Soluciona problemas de implementación en App Engine

Varios factores pueden causar errores de implementación en App Engine, como permisos faltantes, cambios en las políticas de la organización y problemas en la configuración de tu app.

En esta página, se describen los siguientes errores de implementación comunes en App Engine y los métodos para solucionarlos:

Errores de permisos

En esta sección, se describen los errores que pueden ocurrir cuando implementas tu app debido a que faltan permisos de la cuenta o hay cambios en las políticas de la organización.

Para identificar la cuenta activa que usas para acceder a Google Cloud CLI y otras herramientas de Google Cloud Platform, haz una de las siguientes acciones:

  • Si usaste Google Cloud CLI para realizar la implementación, ejecuta el comando gcloud auth list.

  • Si realizaste la implementación desde un IDE, consulta la configuración del complemento de Cloud Tools.

Para comprender por qué asignar solo la función de implementador de App Engine (roles/appengine.deployer) no es suficiente en algunos casos, consulta Funciones de App Engine.

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

La implementación falla para los proyectos nuevos

Es posible que veas el siguiente error cuando implementes tu app por primera vez en un proyecto nuevo:

ERROR: (gcloud.app.deploy) Error Response: [13] Failed to create cloud build: com.google.net.rpc3.client.RpcClientException:..........invalid bucket "staging.PROJECT_ID.appspot.com"; service account PROJECT_ID@appspot.gserviceaccount.com does not have access to the bucket

Para resolver este problema, otorga el rol Administrador de almacenamiento (roles/storage.admin) a la cuenta de servicio predeterminada. Para obtener más información, consulta Almacena registros de compilación en un bucket creado por el usuario.

Si ya otorgaste el rol de administrador de almacenamiento, junto con otros roles necesarios según los diferentes errores de permiso que encuentres durante la implementación y aún no puedas implementar tu app, es posible que se deba a los siguientes cambios en las políticas de la organización:

  • A partir de mayo de 2024, Google Cloud se aplican políticas de la organización seguras de forma predeterminada para todos los recursos de la organización. Esta política evita que App Engine otorgue el rol Editor a las cuentas de servicio predeterminadas de App Engine.

  • En junio de 2024, Cloud Build cambió el comportamiento predeterminado de la forma en que Cloud Build usa cuentas de servicio en proyectos nuevos. Esto se detalla en Cambio de cuenta de servicio de Cloud Build. Como resultado de este cambio, es posible que los proyectos nuevos que implementan versiones por primera vez usen la cuenta de servicio predeterminada de App Engine con permisos insuficientes para implementar versiones.

Para solucionar este problema, haz lo siguiente:

El emisor no tiene permiso para acceder al proyecto

El siguiente error se produce si la cuenta de servicio no tiene permiso para implementar apps en el proyecto actual:

User EMAIL_ADDRESS does not have permission to access project PROJECT_ID (or it may not exist).

Para resolver este problema, otorga el rol de implementador de App Engine (roles/appengine.deployer) a la cuenta de servicio.

No se pudieron recuperar los metadatos del registro

Se produce el siguiente error si usas el comando gcloud app deploy desde una cuenta de servicio que no tiene el rol de Administrador de almacenamiento (roles/storage.admin):

Failed to fetch metadata from the registry, with reason: generic::permission_denied

Para resolver este problema, otorga el rol de administrador de almacenamiento a la cuenta de servicio.

Las cuentas de servicio deben tener permisos en la imagen

El siguiente error ocurre cuando implementas tu app:

The App Engine appspot and App Engine flexible environment service accounts must
have permissions on the image IMAGE_NAME

Este error ocurre por uno de los siguientes motivos:

No se pudo crear Cloud Build

El siguiente error se produce si usas el comando gcloud app deploy desde una cuenta de servicio que no tiene el rol de editor de Cloud Build (roles/cloudbuild.builds.editor).

Failed to create cloud build: Permission denied

Para resolver este problema, otorga el rol de editor de Cloud Build a la cuenta de servicio.

Error al recuperar la aplicación

El siguiente error ocurre cuando la cuenta de servicio que usaste para implementar tu app no tiene el rol de implementador de App Engine.

Permissions error fetching application apps/app_name. Please make sure you are using the correct project ID and that you have permission to view applications on the project.

If you are running Google Cloud CLI version 328 or later, the following error occurs
when you deploy your app:

make sure that you have permission to view applications on the project and that
SERVICE_ACCOUNT has the App Engine Deployer (roles/appengine.deployer) role.

Para resolver este problema, otorga el rol de implementador de App Engine a la cuenta de servicio que usaste para implementar tu app.

Error cuando se implementa un servicio con un conector de Acceso a VPC sin servidores

El siguiente error se produce cuando el usuario o la cuenta de servicio que intenta implementar la app con un conector de Acceso a VPC sin servidores no tiene los permisos necesarios:

Please ensure you have [compute.globalOperations.get] on the service project

Para resolver este problema, asegúrate de que la cuenta de usuario o servicio que se usa para la implementación tenga los roles de usuario de Acceso a VPC sin servidores y de visualizador de IAM para Compute.

Se agotó el tiempo de espera para que la infraestructura de la app alcance un buen estado

El siguiente error ocurre cuando implementas tu app:

Timed out waiting for the app infrastructure to become flex_await_healthy

Varios factores pueden causar este error, como permisos faltantes, errores de código, CPU o memoria insuficientes o verificaciones de estado con errores.

Para resolver este problema, descarta las siguientes causas posibles:

  1. Verifica si la política de la organización del proyecto restringe el acceso a las direcciones IP externas. Para obtener más información, consulta Problemas conocidos del entorno flexible de App Engine.

  2. Verifica si otorgaste los siguientes roles a la cuenta de servicio que usas para ejecutar tu aplicación (por lo general, la cuenta de servicio predeterminada, app-id@appspot.gserviceaccount.com):

  3. Otorga los roles restantes según los errores de implementación, si la cuenta de servicio no los tiene.

  4. Si realizas la implementación en una configuración de VPC compartida y configuras un instance_tag en tu archivo app.yaml, consulta Error de valor no válido cuando se realizan implementaciones en una configuración de VPC compartida para solucionar el problema.

Se produce un error cuando se reinician instancias con versiones en ejecución.

El siguiente error ocurre cuando implementas tu app:

error when restarting the instance under the running versions

A partir de mayo de 2024, Google Cloud se aplicarán las políticas de la organización seguras de forma predeterminada para todas las organizaciones nuevas. Esta política requiere que todas las instancias de VM creadas en proyectos nuevos habiliten VM Manager. En los proyectos nuevos y existentes, esta restricción impide las actualizaciones de metadatos que inhabilitan VM Manager a nivel del proyecto o de la instancia.

Para resolver este problema, debes inhabilitar la restricción de la política de la organización Requerir configuración del SO (constraints/compute.requireOsConfig).

Si el problema persiste, también debes inhabilitar las siguientes políticas de la organización que podrían haberse habilitado a nivel del proyecto o de la organización:

Permiso compute.firewalls.list obligatorio

El siguiente error se produce cuando implementas tu app en una red de VPC compartida:

Request to https://compute.googleapis.com/compute/v1/projects/projects/PROJECT_ID/global/firewalls?key failed, details: Required 'compute.firewalls.list' permission for 'projects/PROJECT_ID'

Este error se produce si las siguientes cuentas de servicio del proyecto host no tienen el rol de usuario de la red de Compute (roles/compute.networkUser):

Para resolver este problema, otorga el rol de usuario de Compute Network a las cuentas de servicio del agente de servicio de las APIs de Google y del entorno flexible de App Engine para el proyecto host.

La implementación falla debido a una restricción de la política de la organización

El siguiente error ocurre cuando implementas tu app:

ERROR: (gcloud.app.deploy) Error Response: [13] An internal error occurred while processing task /app-engine-flex/....: Request to https://compute.googleapis.com/compute/VERSION/projects/PROJECT_ID/... failed, details: Constraint constraints/compute.disableGuestAttributesAccess violated for project PROJECT_ID.

Esto puede deberse a la aplicación de la restricción constraints/compute.disableGuestAttributesAccess cuando se implementa tu app. Todas las apps del entorno flexible de App Engine aplican esta política de la organización de forma predeterminada.

Para resolver este problema, debes inhabilitar la restricción constraints/compute.disableGuestAttributesAccess.

Errores comunes de implementación

En esta sección, se describen estrategias de solución de problemas para errores de configuración en tu app o proyecto.

Error de valor no válido cuando se realizan implementaciones en una configuración de VPC compartida

El siguiente error se muestra en Cloud Logging para las instancias de VM flexibles cuando implementas tu app:

Invalid value for field 'resource.tags.items[1]': 'aef-instance'. Duplicate
tags are not allowed: aef-instance on compute.instances.insert

Este es un problema conocido en el que la configuración de instance_tag en tu archivo app.yaml genera errores cuando se crean instancias.

Para resolver el problema, quita el campo instance_tag del archivo app.yaml y vuelve a implementarlo.

Errores en la implementación de apps con tres instancias como máximo o menos

Las apps implementadas con max_instances establecido en 3 o menos pueden experimentar errores o tiempos de inactividad inesperados. Para resolver el problema, especifica al menos cuatro instancias máximas en tu archivo app.yaml y vuelve a implementar.

Supera el límite de instancias máximas

El siguiente error ocurre cuando implementas tu app:

You may not have more than 'xx' total max instances in your project.

Existe un límite para la cantidad máxima de instancias que puedes crear por proyecto. Las solicitudes para crear instancias adicionales fallan si superas este límite.

Para resolver este problema, establece el valor de max_instances en tu archivo app.yaml a un valor inferior a este límite o borra algunos servicios o versiones para incorporar la suma de max_instances dentro del límite.

La compilación durante la implementación falla sin errores en los registros

El siguiente error ocurre cuando implementas tu app:

ERROR: (gcloud.app.deploy) Cloud build failed. Check logs at https://console.cloud.google.com/cloud-build/builds/BUILD_ID?project=PROJECT_NUMBER Failure status: UNKNOWN: Error Response: [2] Build failed; check build logs for details

Si haces clic en el vínculo del mensaje de error y descubres que todos los pasos de compilación se completaron correctamente, pero la app aún no se compila, es posible que se deba a uno de los siguientes motivos:

Para resolver este problema, cambia la siguiente configuración de tu bucket:

Errores en la implementación en una versión existente de App Engine

El siguiente error puede ocurrir cuando se implementa en una versión existente en el entorno flexible de App Engine:

ERROR: (gcloud.app.deploy) Error Response: [9] An internal error occurred while
processing task /app-engine-flex/flex_await_healthy/flex_await_healthy

Este error indica que actualizar una implementación en mal estado con una imagen de Docker que funciona no siempre da como resultado una implementación en buen estado. El resultado depende del estado de las instancias de la implementación en mal estado. A pesar del error, si proporcionas una buena imagen de Docker, la implementación podría llegar a estar en buen estado. No se recomienda actualizar una versión existente con una nueva imagen de Docker, aunque está permitida. No hay reversión en caso de falla de la versión.