Cada versión de un servicio se define en un archivo .yaml
, que da el nombre del servicio y la versión. El archivo YAML suele llevar el mismo nombre que el servicio que define, pero esto no es obligatorio. Si implementas distintas versiones de un servicio, puedes crear varios archivos YAML en el mismo directorio, uno para cada versión.
En general, creas un directorio para cada servicio, que contiene los archivos YAML del servicio y el código fuente asociado. En el directorio de la app de nivel superior, se incluyen los archivos de configuración opcionales a nivel de la aplicación (dispatch.yaml
, cron.yaml
, index.yaml
y queue.yaml
). En el siguiente ejemplo, se muestran tres servicios.
En service1
y service2
, los archivos de origen se encuentran en el mismo nivel que el archivo YAML. En service3
, hay archivos YAML para dos versiones.
En el caso de proyectos pequeños y simples, todos los archivos de la app pueden ubicarse en el mismo directorio:
Todos los archivos YAML deben incluir un parámetro de versión. Para definir el servicio predeterminado, puedes incluir de forma explícita el parámetro service: default
o dejar el parámetro del servicio fuera del archivo.
El archivo de configuración de cada servicio define el tipo de escalamiento y la clase de instancia para un servicio o versión específicos. Se usan diferentes parámetros de escalamiento, según el tipo de escalamiento que especifiques. Si no lo especificas, la opción predeterminada es el ajuste de escala automático. La configuración de clase de instancia y escalamiento se describe en la sección de referencia de appengine-web.xml
.
Para cada servicio, también puedes especificar una configuración que mapee las solicitudes de URL a secuencias de comando específicas y que identifique los archivos estáticos, lo que aumenta la eficiencia del servidor. En esta configuración, también se incluye en el archivo YAML y se describe en la sección referencia de appengine-web.xml
.
Servicio predeterminado
Todas las aplicaciones tienen un solo servicio predeterminado. Puedes definir el servicio predeterminado en el appengine-web.xml
con la configuración service: default
, pero no es necesario hacerlo. Todos los parámetros de configuración relevantes para los servicios pueden aplicarse al servicio predeterminado.
Archivos de configuración opcional
Estos archivos de configuración controlan características opcionales que se aplican a todos los servicios de la aplicación:
dispatch.yaml
anula las reglas predeterminadas de enrutamiento mediante el envío de solicitudes entrantes a un servicio específico basado en la ruta o el nombre de host en la URL.queue.yaml
configura las listas de aplicaciones en cola y de extracción.index.yaml
especifica qué índices necesita tu app si se usan consultas de Datastore.cron.yaml
configura tareas programadas con frecuencia que operan a horas definidas o intervalos regulares.
Para implementar actualizaciones de estos archivos de configuración en App Engine, ejecuta el siguiente comando desde el directorio donde se encuentran:
gcloud app deploy [CONFIG_FILE]
Ejemplo
A continuación, se muestra un ejemplo de cómo podrías configurar los diversos archivos en una estructura de directorio de WAR para una aplicación que tiene dos servicios: un servicio predeterminado que controla solicitudes web, y otro (llamado my-service
) que controla el procesamiento de backend.
Si suponemos que el directorio EAR de nivel superior es "my-application", define el archivo my-application/META-INF/appengine-application.xml
:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<appengine-application xmlns="http://appengine.google.com/ns/1.0">
<application>my-application</application>
</appengine-application>
Crea directorios de WAR para los dos servicios: my-application/default
y my-application/my-service
.
Ahora, crea un archivo appengine-web.xml
en cada WAR que especifique los parámetros del servicio. Este archivo debe incluir un nombre de la versión del servicio. Para definir el servicio predeterminado, puedes incluir explícitamente el parámetro <service>default</service>
o dejarlo fuera del archivo. Este es el archivo my-application/default/WEB-INF/appengine-web.xml
que define el servicio predeterminado:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>my-application</application>
<module>default</module>
<version>uno</version>
<threadsafe>true</threadsafe>
</appengine-web-app>
El archivo my-application/my-service/WEB-INF/appengine-web.xml
define el servicio que manejará las solicitudes en segundo plano:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>my-application</application>
<module>my-service</module>
<version>uno</version>
<threadsafe>true</threadsafe>
<manual-scaling>
<instances>5</instances>
</manual-scaling>
</appengine-web-app>
Por último, define el archivo my-application/META-INF/application.xml
que enumera los servicios. Ten presente que el servicio predeterminado debe ser el primero que enumeres.
<?xml version="1.0"
encoding="UTF-8"?>
<application
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/application_5.xsd"
version="5">
<description>GAE Java SuperFun app</description>
<display-name>SuperFun</display-name>
<!-- Services -->
<!-- The default service should be listed first -->
<module>
<web>
<web-uri>default</web-uri>
<context-root>default</context-root>
</web>
</module>
<module>
<web>
<web-uri>my-service</web-uri>
<context-root>my-service</context-root>
</web>
</module>
</application>
App Engine ignorará los elementos <context-root>
, por lo que no es necesario que los clientes HTTP la agreguen a la ruta de URL cuando se direcciona a un servicio.