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. 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.

Gráfico de jerarquías de los servicios YAML

En el caso de proyectos pequeños y simples, todos los archivos de la app pueden ubicarse en el mismo directorio:

Gráfico 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 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 app.yaml.

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 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 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

Este es un ejemplo de cómo podrías configurar los archivos YAML para una aplicación que tiene tres servicios: uno predeterminado que controla solicitudes web y dos servicios que controlan solicitudes móviles y procesamiento de backend.

Comienza por definir un archivo de configuración llamado app.yaml que manejará todas las solicitudes relacionadas con la Web:

runtime: python27
api_version: 1
threadsafe: true

Si el ID del proyecto de la consola de Google Cloud para esta app es simple-sample, esta configuración crearía un servicio predeterminado con ajuste de escala automático y una dirección pública de https://simple-sample.uc.r.appspot.com.

Luego, imagina que quieres crear un servicio a fin de controlar las solicitudes web móviles. Para la conveniencia de los usuarios de dispositivos móviles, en este ejemplo, la latencia pendiente máxima será solo de un segundo y siempre tendremos, al menos, dos instancias inactivas. Para configurar esto, se debe crear un archivo de configuración mobile-frontend.yaml con los siguientes contenidos:

service: mobile-frontend
runtime: python27
api_version: 1
threadsafe: true

automatic_scaling:
  min_idle_instances: 2
  max_pending_latency: 1s

El servicio que crea este archivo sería accesible en https://mobile-frontend-dot-simple-sample.uc.r.appspot.com.

Por último, agrega un servicio, llamado my-service para controlar el trabajo de backend estático. Este podría ser un trabajo continuo que exporta datos de Datastore a BigQuery. El volumen de trabajo es relativamente fijo, por lo que solo necesitas 1 servicio residente en un momento determinado. Además, dado que se necesitará que estos trabajos controlen grandes volúmenes de procesamiento en la memoria, es conveniente tener servicios con una configuración de memoria aumentada. Para configurar esto, deberías crear un archivo de configuración my-service.yaml con los siguientes contenidos.

service: my-service
runtime: python27
api_version: 1
threadsafe: true

instance_class: B8
manual_scaling:
  instances: 1

El servicio que crea este archivo sería accesible en https://my-service-dot-simple-sample.uc.r.appspot.com.

Observa la configuración manual_scaling:. El parámetro instances: le indica a App Engine cuántas instancias debe crear para este servicio.

Es posible que también quieras descargar esta aplicación de demostración de Python y ver de qué se trata.