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