Un runtime personalizado te permite usar una implementación alternativa de cualquier lenguaje de entorno flexible compatible o personalizar uno proporcionado por Google. También te permite escribir código en cualquier otro lenguaje que pueda gestionar solicitudes HTTP entrantes (ejemplo). Con un tiempo de ejecución personalizado, el entorno flexible proporciona y gestiona tu infraestructura de escalado, monitorización y balanceo de carga, para que puedas centrarte en crear tu aplicación.
Para crear un tiempo de ejecución personalizado, debes hacer lo siguiente:
- Proporciona un archivo
app.yaml
que describa la configuración del tiempo de ejecución de tu aplicación a App Engine. - Añade un
Dockerfile
que configure internamente el entorno de ejecución. - Asegúrate de que tu código cumpla algunas reglas básicas.
Proporciona un archivo app.yaml
Tu archivo de configuración app.yaml
debe contener al menos los siguientes ajustes:
runtime: custom
env: flex
Para obtener información sobre qué más puedes configurar en tu aplicación, consulta Configurar tu aplicación con app.yaml.
Crear un Dockerfile
En el sitio web de Docker encontrarás documentación completa sobre cómo crear Dockerfiles. Si usas un tiempo de ejecución personalizado, debes proporcionar un Dockerfile, tanto si proporcionas tu propia imagen base como si usas una de las imágenes base de Google.
Especificar una imagen base
El primer comando de un Dockerfile suele ser un comando FROM
que especifica una imagen base.
Una imagen base se usa para crear el contenedor y compilar la aplicación. Puedes crear tu propia imagen base o seleccionar una de registros de contenedores como DockerHub.
Busca el archivo Dockerfile
Por lo general, el archivo Dockerfile siempre se llama Dockerfile
y se coloca en el mismo directorio que el archivo app.yaml
correspondiente. Sin embargo, en algunos casos, el entorno de las herramientas puede tener requisitos diferentes. Por ejemplo, las herramientas de Java basadas en el SDK de Cloud, como los complementos Maven, Gradle, Eclipse e IntelliJ, requieren que Dockerfile
esté en src/main/docker/Dockerfile
y que el archivo app.yaml
esté en src/main/appengine/app.yaml
. Para obtener más información, consulta la documentación de tu entorno de herramientas.
Estructura del código
En esta sección se describe el comportamiento que debe implementar tu código, tanto si usas una imagen base proporcionada por Google como si usas tu propia imagen base.
Escuchar el puerto 8080
El frontend de App Engine dirigirá las solicitudes entrantes al módulo correspondiente en el puerto 8080. Debes asegurarte de que el código de tu aplicación esté escuchando en el puerto 8080.
Gestionar eventos del ciclo de vida
El entorno flexible envía periódicamente a tu aplicación determinados eventos del ciclo de vida.
Cierre de la aplicación
Cuando es necesario apagar una instancia, las nuevas solicitudes entrantes se dirigen a otras instancias (si las hay) y se da tiempo para completar las solicitudes que se estén procesando. Al apagar una instancia, el entorno flexible normalmente envía una señal STOP
(SIGTERM
) al contenedor de la aplicación. Tu aplicación no tiene que responder a este evento, pero puede usarlo para llevar a cabo las acciones de limpieza necesarias antes de que se cierre el contenedor. En condiciones normales, el sistema espera hasta 30 segundos a que la aplicación se detenga y, a continuación, envía una señal KILL
(SIGKILL
) para cerrar la instancia inmediatamente.
En raras ocasiones, las interrupciones pueden impedir que App Engine proporcione 30 segundos de tiempo de cierre, lo que significa que es posible que las señales STOP
y KILL
no se envíen antes de que finalice una instancia. Para gestionar esta posibilidad, debes crear puntos de control periódicos del estado de tu instancia y usarla principalmente como caché en memoria en lugar de como almacén de datos fiable.
Solicitudes de comprobación del estado
Puedes usar solicitudes de comprobación del estado periódicas para confirmar que una instancia de VM se ha desplegado correctamente y para comprobar que una instancia en ejecución mantiene un estado correcto.
Compilar y desplegar un tiempo de ejecución personalizado
Una vez que hayas configurado los archivos app.yaml
y DOCKER
, podrás compilar e implementar esa imagen de contenedor en App Engine.
También puedes desplegar imágenes de contenedor prediseñadas de tus tiempos de ejecución personalizados que estén almacenadas en Artifact Registry. Por ejemplo, puedes usar Cloud Build para compilar tus imágenes por separado y, a continuación, almacenarlas en Artifact Registry. Para obtener más información, consulta Enviar y extraer imágenes.
Integrar tu aplicación con Google Cloud
Las aplicaciones que se ejecutan en tiempos de ejecución personalizados pueden usar las bibliotecas de cliente de Google Cloud para acceder a los servicios de Google Cloud . Las aplicaciones en tiempos de ejecución personalizados también pueden usar cualquier servicio de terceros mediante APIs estándar.
Autenticar con servicios de Google Cloud
Las credenciales predeterminadas de la aplicación son la forma más sencilla de autenticarte y llamar a las APIs 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 Google Cloud asociados encuentren automáticamente tus credenciales.
Para obtener más información sobre la autenticación, consulta el artículo Autenticación en Google.
Almacenamiento de registros
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 consultar en el Google Cloud explorador de registros de la consola.
Cuando tu aplicación gestiona una solicitud, también puede escribir sus propios mensajes de registro en stdout
y stderr
. Estos archivos se recogen automáticamente y se pueden ver en el explorador de registros. Solo se conservan las entradas más recientes de 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 incluye agentes de terceros en el contenedor de su aplicación, asegúrese de configurarlos para que registren los datos en stdout
y stderr
, o en un registro personalizado.
De esta forma, los errores que produzcan estos agentes se podrán ver en Cloud Logging.
Un agente de Cloud Logging recoge los registros de solicitudes y de aplicaciones de tu aplicación, que se conservan durante un máximo de 90 días y hasta un tamaño máximo de 1 GB. Si quieres almacenar tus registros durante más tiempo o almacenar un tamaño superior a 1 GB, puedes exportarlos a Cloud Storage. También puedes exportar tus registros a BigQuery y Pub/Sub para procesarlos más adelante.
También puedes usar otros registros. A continuación se indican algunos de los registros que se configuran de forma predeterminada:
Nombre del registro | Tipo de carga útil | Finalidad |
---|---|---|
crash.log |
texto | Información registrada cuando se produce un error en la configuración. Si tu aplicación no se ejecuta, consulta este registro. |
monitoring.* |
texto | Información del contenedor Docker que publica datos en Cloud Monitoring. |
shutdown.log |
texto | Información registrada al apagar el dispositivo. |
stdout |
texto | Salida estándar de tu aplicación. |
stderr |
texto | Error estándar de tu contenedor. |
syslog |
texto | El syslog de la VM, fuera del contenedor Docker. |