Un entorno de ejecución personalizado te permite usar una implementación alternativa de cualquier lenguaje de entorno flexible compatible o personalizar un lenguaje proporcionado por Google. También te permite escribir código en cualquier otro lenguaje que pueda controlar solicitudes HTTP entrantes (ejemplo). Con un entorno de ejecución personalizado, el entorno flexible te proporciona y administra la infraestructura de escalamiento, supervisión y balanceo de cargas para que puedas enfocarte en compilar tu aplicación.
Para crear un entorno de ejecución personalizado, debes hacer lo siguiente:
- Proporcione un
app.yaml
archivo que describa la configuración del entorno de ejecución de su aplicación en App Engine. - Agrega un objeto
Dockerfile
que configure de forma interna el entorno de ejecución. - Asegúrate de que tu código siga algunas reglas básicas.
Proporciona un archivo app.yaml
Tu archivo de configuración app.yaml
debe contener, al menos, la siguiente configuración:
runtime: custom
env: flex
Para obtener más información sobre qué más puedes configurar para tu app, consulta Configura tu app con app.yaml.
Crea un Dockerfile
La documentación completa sobre cómo crear Dockerfiles está disponible en el sitio web de Docker. Si usas un entorno de ejecución personalizado, debes proporcionar un Dockerfile, ya sea que uses tu propia imagen base o una de las de Google.
Especifica una imagen base
El primer comando de un Dockerfile suele ser un comando FROM
que especifica una imagen base.
Se usa una imagen base para crear el contenedor y compilar la aplicación. Puedes
crear tu propia imagen base
o seleccionar una de registros de contenedores como DockerHub.
Ubica el Dockerfile
En general, el Dockerfile siempre se llama Dockerfile
y se ubica en el mismo directorio que el archivo app.yaml
correspondiente. Sin embargo, en algunos casos, el entorno de herramientas puede tener requisitos diferentes. Por ejemplo, las herramientas de Java basadas en el SDK de Cloud, como los complementos de Maven, Gradle, IntelliJ y Eclipse, requieren que el archivo Dockerfile
esté en src/main/docker/Dockerfile
y el archivo app.yaml
esté en src/main/appengine/app.yaml
. Consulta la documentación de tu entorno de herramientas para obtener más información.
Estructura del código
En esta sección, se describe el comportamiento que debe implementar tu código, ya sea que uses una imagen base tuya o una proporcionada por Google.
Escucha en el puerto 8080
El frontend de App Engine enrutará las solicitudes entrantes al módulo apropiado en el puerto 8080. Debes asegurarte de que el código de tu aplicación escuche en 8080.
Controla eventos de ciclo de vida
El entorno flexible envía de forma periódica a la aplicación ciertos eventos del ciclo de vida.
Cierre de la aplicación
Cuando una instancia se debe cerrar, las nuevas solicitudes entrantes se enrutan a otras instancias (si las hubiera) y se concede tiempo a las solicitudes que se están procesando para completarse. Cuando se cierra una instancia, el entorno flexible envía normalmente
una señal STOP
(SIGTERM
) al contenedor de la app. No es necesario que tu app responda a este evento, pero puede usarlo para realizar las acciones de limpieza necesarias antes de que el contenedor se cierre. En condiciones normales, el sistema espera hasta 30 segundos para que la app se detenga y, luego, envía una señal KILL
(SIGKILL
), que cierra la instancia de inmediato.
En casos excepcionales, las interrupciones pueden evitar que App Engine proporcione 30 segundos de tiempo de cierre, lo que significa que las señales STOP
y KILL
podrían no enviarse antes de que finalice una instancia. Para manejar esta posibilidad, debes realizar un punto de control de forma periódica del estado de tu instancia y usarla de manera principal como caché en memoria en lugar de un almacén de datos confiable.
Solicitudes de verificación de estado
Puedes usar solicitudes de verificación de estado periódicas para confirmar que una instancia de VM se implementó de manera correcta y para comprobar que una instancia en ejecución mantenga un buen estado.
Compila y, luego, implementa tu entorno de ejecución personalizado
Después de configurar el archivo app.yaml
y DOCKER
, puedes
compilar y, luego, implementar
esa imagen de contenedor en App Engine.
Como alternativa, puedes implementar imágenes de contenedor compiladas previamente de tus entornos de ejecución personalizados que se almacenan en Artifact Registry. Por ejemplo, puedes usar Cloud Build para compilar tus imágenes por separado y, luego, almacenarlas en Artifact Registry. Para obtener más información, consulta Envía y extrae imágenes.
Integra tu aplicación con Google Cloud
Las aplicaciones que se ejecutan en entornos de ejecución personalizados pueden usar las bibliotecas cliente de Google Cloud para acceder a los servicios de Google Cloud. Las aplicaciones en entornos de ejecución personalizados también pueden usar cualquier servicio de terceros a través de las APIs estándar.
Autentica con servicios de Google Cloud
Las credenciales predeterminadas de la aplicación proporcionan la forma más sencilla de autenticarse y llamar a las API de Google.
Si tu aplicación usa Cloud Build para compilar imágenes de Docker, la red cloudbuild
aloja las credenciales predeterminadas de la aplicación, lo que permite que los servicios de Google Cloud asociados encuentren tus credenciales de forma automática.
Para obtener más información sobre la autenticación, consulta Autenticación en Google.
Logging
Cuando se envía una solicitud a tu aplicación que se ejecuta en App Engine, los detalles de la solicitud y la respuesta se registran automáticamente. Se pueden ver en el Explorador de registros de la consola de Google Cloud.
Cuando tu aplicación controla una solicitud, también puede escribir sus propios mensajes de registro en stdout
y stderr
. Estos archivos se recopilan de forma automática y se pueden visualizar en el Explorador de registros. Solo se conservan las entradas más recientes a stdout
y stderr
para limitar su tamaño.
También puedes escribir registros personalizados en /var/log/app_engine/custom_logs
con un archivo que termine en .log
o .json
.
Si incluyes agentes de terceros en el contenedor de tu aplicación, asegúrate de configurar los agentes para que accedan a stdout
y stderr
, o a un registro personalizado.
Esto garantiza que los errores que producen estos agentes sean visibles en Cloud Logging.
Un agente de Cloud Logging recopila la solicitud y los registros de la aplicación y los conserva durante un máximo de 90 días, hasta un máximo de 1 GB. Si deseas almacenar tus registros durante un período más largo o almacenar un tamaño superior a 1 GB, puedes exportar tus registros a Cloud Storage. También puedes exportar tus registros a BigQuery y Pub/Sub para su procesamiento posterior.
Otros registros también están disponibles para que los uses. Los siguientes son algunos de los registros que se configuran de forma predeterminada:
Nombre del registro | Tipo de carga útil | Objetivo |
---|---|---|
crash.log |
texto | Información que se registra cuando falla la configuración. Si tu aplicación no se ejecuta, revisa este registro. |
monitoring.* |
texto | Información del contenedor de Docker que publica datos en Cloud Monitoring. |
shutdown.log |
texto | Información que se registró durante el cierre. |
stdout |
texto | Resultado estándar de tu app. |
stderr |
texto | Error estándar de tu contenedor. |
syslog |
texto | La VM syslog, fuera del contenedor de Docker. |