Crear entornos de ejecución personalizados

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

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.