Archivos de configuración

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. Los archivos de configuración opcionales de nivel de aplicación (dispatch.yaml, cron.yaml, index.yaml y queue.yaml) se incluyen en el directorio de la aplicación de nivel superior. El siguiente ejemplo muestra 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.

Grafo de jerarquías de los servicios YAML

En el caso de proyectos pequeños y simples, todos los archivos de la aplicación pueden ubicarse en el mismo directorio.

Grafo de jerarquías de los 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 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 referencia de app.yaml .

Para cada servicio, también puedes especificar una configuración que asigne las solicitudes de URL a secuencias de comando específicas y que identifique los archivos estáticos, lo que aumenta la eficiencia del servidor. Esta configuración también se incluye en el archivo YAML y se describe en la sección referencia de app.yaml.

Servicio predeterminado

Todas las aplicaciones tienen un solo servicio predeterminado. Puedes definir el servicio predeterminado en el app.yaml 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
  • queue.yaml
  • index.yaml
  • cron.yaml
  • dos.yaml

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, cree un archivo appengine-web.xml en cada WAR que especifique los parámetros para el 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.