Archivos de configuración

Cada versión de un servicio se define en un archivo .yaml, que indica el nombre del servicio y de la versión. El archivo YAML suele tener el mismo nombre que el servicio que define, pero no es obligatorio. Si vas a implementar varias versiones de un servicio, puedes crear varios archivos YAML en el mismo directorio, uno para cada versión.

Normalmente, se crea un directorio para cada servicio, que contiene los archivos YAML del servicio y el código fuente asociado. Los archivos de configuración opcionales a nivel de aplicación (dispatch.yaml, cron.yaml, index.yaml y queue.yaml) se incluyen en el directorio de nivel superior de la aplicación. En el ejemplo siguiente se muestran tres servicios. En service1 y service2, los archivos de origen están en el mismo nivel que el archivo YAML. En service3, hay archivos YAML para dos versiones.

Gráfico de jerarquía de servicios YAML

En proyectos pequeños y sencillos, todos los archivos de la aplicación pueden estar en un mismo directorio:

Gráfico de jerarquía de servicios YAML pequeños

Todos los archivos YAML deben incluir un parámetro de versión. Para definir el servicio predeterminado, puedes incluir explícitamente el parámetro service: default o dejar fuera del archivo el parámetro de servicio.

El archivo de configuración de cada servicio define el tipo de escalado y la clase de instancia de un servicio o una versión concretos. Se usan diferentes parámetros de escalado en función del tipo de escalado que especifiques. Si no especificas el escalado, se aplicará el escalado automático de forma predeterminada. Los ajustes de escalado y de clase de instancia se describen en la sección de appengine-web.xml referencia.

En cada servicio, también puedes especificar ajustes que asignen solicitudes de URL a secuencias de comandos concretas e identificar archivos estáticos para mejorar la eficiencia del servidor. Estos ajustes también se incluyen en el archivo YAML y se describen en la sección de referencia de appengine-web.xml.

El servicio predeterminado

Cada aplicación tiene un único servicio predeterminado. Puedes definir el servicio predeterminado en appengine-web.xml con el ajuste service: default, pero no es necesario. Todos los parámetros de configuración relevantes para los servicios se pueden aplicar al servicio predeterminado.

Archivos de configuración opcionales

Estos archivos de configuración controlan las funciones opcionales que se aplican a todos los servicios de una aplicación:

  • dispatch.yaml anula las reglas predeterminadas de enrutamiento enviando las solicitudes entrantes a un servicio específico en función de la ruta o el nombre de host de la URL.
  • queue.yaml configura las colas de salida y las colas para tareas extraídas.
  • index.yaml especifica los índices que necesita tu aplicación si usa consultas de Datastore.
  • cron.yaml configura tareas programadas para operar a horas concretas o en intervalos regulares.

Para implementar las actualizaciones de estos archivos de configuración en App Engine, ejecuta el siguiente comando desde el directorio en el que se encuentran:

    gcloud app deploy [CONFIG_FILE]

Ejemplo

A continuación, se muestra un ejemplo de cómo configurarías los distintos archivos en una estructura de directorios WAR para una aplicación que tiene dos servicios: un servicio predeterminado que gestiona las solicitudes web y otro servicio (llamado my-service) para el procesamiento backend.

Si 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 WAR para los dos servicios: my-application/default y my-application/my-service.

Ahora, cree un archivo appengine-web.xml en cada WAR que especifique los parámetros del servicio. El archivo debe incluir un nombre de versión para el servicio. Para definir el servicio predeterminado, puedes incluir explícitamente el parámetro <service>default</service> o no incluirlo en el 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 gestionará 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 en cuenta que el servicio predeterminado debe ser el primero de la lista.

<?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 los clientes HTTP no tienen que anteponerlo a la ruta de la URL al dirigirse a un servicio.