ID de región
REGION_ID
es un código abreviado que Google asigna en función de la región que eliges cuando creas la app. El código no corresponde a un país ni a una provincia, aunque algunos ID de región puedan parecer similares a los códigos de país y provincia que se suelen usar. En el caso de las apps creadas después de febrero de 2020, REGION_ID.r
se incluye en las URL de App Engine. En el caso de las apps existentes creadas antes de esta fecha, el ID de región es opcional en la URL.
Obtén más información acerca de los ID de región.
En esta guía, se explica cómo estructurar los servicios y los recursos relacionados de tu app de App Engine.
Estructura del directorio
Cada versión del servicio de App Engine se define en un archivo de configuración app.yaml
. El requisito mínimo para la implementación, en el caso de las apps simples, es definir el archivo app.yaml
. El archivo app.yaml
actúa como un descriptor de implementación y define el tipo de escalamiento, el entorno de ejecución, los controladores y otras opciones de configuración de recursos para una versión específica de un servicio. Si estás implementando distintas versiones de un servicio, puedes crear varios archivos YAML en el mismo directorio a fin de representar la configuración para cada versión.
Puedes crear directorios separados para cada servicio en el directorio raíz de la aplicación cuando desarrolles de forma local. Si alojas la app fuera del sistema de control de versión (VCS), p. ej., GitHub, también puedes estructurarla para usar directorios independientes en un repositorio o usar repositorios independientes en cada servicio. Cada directorio o repositorio debería representar un solo servicio y contener el archivo app.yaml
de ese servicio junto con el código fuente asociado.
Tienes la opción de especificar un nombre único para cada archivo app.yaml
de tu servicio. Por ejemplo, puedes usar el nombre de tu servicio para un archivo de configuración o usar nombres únicos que representen cada versión de ese servicio específico, como service1.yaml
o app.standard.yaml
.
Los otros archivos de configuración opcionales deben residir en el directorio raíz o repositorio del servicio default
de tu app. Estos archivos de configuración opcionales aplican una configuración para toda la app que no es específica de un servicio en particular, incluidos los archivos dispatch.yaml
, index.yaml
y cron.yaml
.
Ejemplos
Una app simple solo necesita que se agregue el archivo app.yaml
en la misma ubicación que los archivos de origen de la app. Una app con un solo servicio solo incluirá el servicio default
, y todos los archivos se pueden encontrar en el mismo directorio en la raíz de esa app.
En el siguiente ejemplo, se muestra cómo estructurar una app con tres servicios si desarrollas una app de manera local. El archivo opcional dispatch.yaml
se agregó a la app en el directorio raíz. Además, en la raíz, hay tres directorios, uno para cada servicio de la app. El subdirectorio de service1
incluye los archivos fuente y de configuración de ese servicio. Del mismo modo, service2
y service3
están en directorios independientes que contienen los archivos de cada servicio, aunque service3
incluye dos versiones del archivo de configuración YAML:
En el siguiente ejemplo, un solo servicio tiene el archivo opcional dispatch.yaml
y dos archivos de configuración que representan diferentes versiones de ese servicio, service1.yaml
y service2.yaml
:
Consideraciones de diseño para el tiempo de actividad de las instancias
Las fallas de hardware o software que causan que la aplicación finalice antes de tiempo o las instancias se reinicien con frecuencia pueden ocurrir de improvisto, y su resolución puede llevar mucho tiempo. Tu aplicación debe manejar estas fallas.
A continuación se detallan algunas estrategias para evitar el tiempo de inactividad por reinicios de las instancias.
- Reduce el tiempo que lleva reiniciar tus instancias o iniciar las nuevas.
- Crea puntos de control de forma periódica para los cálculos de larga duración, para permitirte reanudar el proceso desde ese estado.
- La app debe ser "sin estado" para que no se almacene nada en la instancia.
- Usa colas para ejecutar tareas asíncronas.
- Si configuras tus instancias para el ajuste de escala manual, haz lo siguiente:
- Usa el balanceo de cargas en varias instancias.
- Configura más instancias de las necesarias para controlar un tráfico normal.
- Escribe una lógica de resguardo que use resultados almacenados en caché cuando no esté disponible una instancia de escalamiento manual.
Obtén más información sobre las instancias en Cómo se administran las instancias.
El servicio default
Todas las aplicaciones de App Engine incluyen un servicio default
. Debes implementar la versión inicial de la app en el servicio default
para poder implementar y crear servicios adicionales en la app.
El servicio predeterminado se puede especificar de forma opcional en el archivo app.yaml
con la configuración service: default
.
Si usas Java y los servicios en paquetes heredados, puedes especificar el servicio predeterminado en appengine-web.xml
con la configuración <service>default</service>
.
Las solicitudes enviadas a la app a través del proyecto de Google Cloud se envían al servicio default
, por ejemplo, https://PROJECT_ID.REGION_ID.r.appspot.com
. Para obtener más información sobre cómo orientar a otros servicios, consulta Establece comunicaciones entre servicios.
Archivos de configuración opcional
Los siguientes archivos de configuración controlan las funciones opcionales que se aplican a todos los servicios en una app individual. Consulta los siguientes temas para obtener más información sobre cada función opcional:
cron.yaml
configura tareas programadas con frecuencia que operan a horas definidas o intervalos regulares.dispatch.yaml
anula las reglas predeterminadas de enrutamiento a través del envío de solicitudes entrantes a un servicio específico basado en la ruta o el nombre de host en la URL.index.yaml
especifica qué índices necesita tu app si se usan consultas de Datastore.
Nombres del archivo
App Engine ejecuta apps en un contenedor en una distribución de Ubuntu de Linux actualizada. Los nombres de archivo que usas en el entorno estándar de App Engine deben ser compatibles con UTF-8, ya sea UTF-8 o algo que se pueda convertir de forma automática en UTF-8. Si los nombres de tus archivos usan diferentes codificaciones, implementa tu app desde una máquina con una configuración de lenguaje de nombre de archivo compatible con UTF-8.
La implementación fallará si los nombres de los archivos no son compatibles con UTF-8. Ten en cuenta que no hay restricciones en la codificación de caracteres que usas dentro de un archivo.
Consideraciones sobre el almacenamiento de archivos y datos
Desde App Engine, puedes acceder con facilidad a otros servicios de Google Cloud, como Datastore, Cloud SQL y Cloud Storage.
También puedes usar una base de datos externa o de terceros si es compatible con tu lenguaje y es accesible desde la instancia de App Engine.
Si quieres obtener más información para almacenar archivos en Google Cloud o de forma externa, consulta Comprende el almacenamiento de datos y archivos.
Además, puedes seleccionar la forma en que deseas entregar el contenido estático. Puedes entregar el contenido estático de la app de forma directa desde esa app en App Engine, alojar el contenido estático en una opción de Google Cloud como Cloud Storage, o usar una red de distribución de contenidos (CDN) de terceros. Para obtener más información sobre la entrega de contenido estático, consulta la página sobre cómo entregar archivos estáticos.
¿Qué sigue?
Si trabajas con varios servicios y deseas implementarlos juntos, consulta los pasos para implementar varios servicios.