Solucionar problemas de despliegue en App Engine

Varios factores pueden provocar errores de implementación en App Engine, como la falta de permisos, los cambios en las políticas de la organización y los problemas en la configuración de la aplicación.

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

Errores de permisos

En esta sección se describen los errores que pueden producirse al implementar tu aplicación debido a que faltan permisos de cuenta o a cambios en las políticas de la organización.

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

  • Si has usado la CLI de Google Cloud para realizar el despliegue, ejecuta el comando gcloud auth list.

  • Si has implementado desde un IDE, consulta la configuración del complemento Cloud Tools.

Para saber por qué asignar solo el rol de desplegador de App Engine (roles/appengine.deployer) puede no ser suficiente en algunos casos, consulta Roles de App Engine.

Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

La implementación falla en los proyectos nuevos

Es posible que veas el siguiente error cuando implementes tu aplicación 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, concede el rol Administrador de almacenamiento (roles/storage.admin) a la cuenta de servicio predeterminada. Para obtener más información, consulta Almacenar registros de compilación en un bucket creado por un usuario.

Si ya has concedido el rol Administrador de almacenamiento, junto con los demás roles necesarios en función de los diferentes errores de permisos que se produzcan durante la implementación, y sigues sin poder implementar tu aplicación, puede deberse a los siguientes cambios en las políticas de la organización:

  • Desde mayo del 2024, Google Cloud aplica políticas de organización seguras de forma predeterminada a todos los recursos de la organización. Esta política impide que App Engine conceda el rol Editor a las cuentas de servicio predeterminadas de App Engine.

  • En junio del 2024, Cloud Build cambió el comportamiento predeterminado de cómo usa las cuentas de servicio en los proyectos nuevos. Puedes consultar más detalles en el artículo sobre el cambio en la cuenta de servicio de Cloud Build. Como resultado de este cambio, es posible que los proyectos nuevos que implementen versiones por primera vez usen la cuenta de servicio predeterminada de App Engine con permisos insuficientes para implementar versiones.

Para solucionar este problema, sigue estos pasos:

El método llamador no tiene permiso para acceder al proyecto

Se produce el siguiente error si la cuenta de servicio no tiene permiso para desplegar aplicaciones en el proyecto actual:

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

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

No se han podido obtener 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 Administrador de Storage (roles/storage.admin):

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

Para solucionar este problema, concede el rol Administrador de Storage a la cuenta de servicio.

Las cuentas de servicio deben tener permisos en la imagen

Se produce el siguiente error al implementar tu aplicación:

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

Este error se produce por uno de los siguientes motivos:

  • La cuenta de servicio predeterminada de App Engine no tiene el rol Visor de objetos de Storage (roles/storage.objectViewer).

    Para solucionar este problema, asigna el rol Lector de objetos de Storage a la cuenta de servicio.

  • Tu proyecto tiene un perímetro de servicio de Controles de Servicio de VPC que limita el acceso a la API Cloud Storage mediante niveles de acceso.

    Para resolver este problema, añade la cuenta de servicio que usas para desplegar tu aplicación a los accessPolicies del perímetro de servicio de Controles de Servicio de VPC correspondiente.

  • Después del 15 de mayo del 2024, Artifact Registry alojará imágenes del dominio gcr.io en proyectos Google Cloud sin uso previo de Container Registry. Si despliegas una aplicación en un proyecto nuevo creado después de esa fecha, es posible que la cuenta de servicio no tenga los permisos necesarios para desplegar la aplicación. Para conceder los permisos necesarios, consulta Desplegar en App Engine.

No se ha podido crear Cloud Build

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

Failed to create cloud build: Permission denied

Para solucionar este problema, asigna el rol Editor de Cloud Build a la cuenta de servicio.

Error al obtener la aplicación

Se produce el siguiente error cuando la cuenta de servicio que has usado para desplegar tu aplicación no tiene el rol de desplegador 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 solucionar este problema, asigna el rol de desplegador de App Engine a la cuenta de servicio que has usado para desplegar tu aplicación.

Error al implementar un servicio con un conector de Acceso a VPC sin servidor

Se produce el siguiente error cuando el usuario o la cuenta de servicio que intenta desplegar la aplicación con un conector de acceso a VPC sin servidor no tiene los permisos necesarios:

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

Para solucionar este problema, asegúrate de que el usuario o la cuenta de servicio que se usen para la implementación tengan los roles Usuario de acceso a VPC sin servidor y Lector de Compute IAM.

Errores de implementación habituales

En esta sección se describen estrategias para solucionar errores de configuración en tu aplicación o proyecto.

Error de valor no válido al implementar en una configuración de VPC compartida

Al desplegar tu aplicación, se muestra el siguiente error en Cloud Logging para las instancias de VM flexibles:

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

Se trata de un problema conocido que se produce cuando se define instance_tag en el archivo app.yaml, lo que provoca errores al crear instancias.

Para solucionar el problema, quite el campo instance_tag del archivo app.yaml y vuelva a implementar.

Errores al implementar aplicaciones con tres o menos instancias máximas

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

Superar el límite de instancias máximas

Se produce el siguiente error al implementar tu aplicación:

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

Hay un límite en el número máximo de instancias que puedes crear por proyecto. Si superas este límite, las solicitudes para crear instancias adicionales fallarán.

Para solucionar este problema, asigne al valor de max_instances en su archivo app.yaml un valor inferior a este límite o elimine algunos servicios o versiones para que la suma de max_instances no supere el límite.

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

Se produce el siguiente error al implementar tu aplicación:

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 enlace del mensaje de error y ves que todos los pasos de compilación se han completado correctamente, pero la aplicación no se ha podido compilar, puede deberse a uno de los siguientes motivos:

Para solucionar este problema, cambia los siguientes ajustes de tu contenedor:

Se produce un error al compilar una aplicación Node.js

Pueden producirse errores de compilación al desplegar una aplicación de Node.js.

De forma predeterminada, el tiempo de ejecución de Node.js ejecutará npm run build si se detecta una secuencia de comandos de compilación en el archivo package.json. Esto puede provocar comportamientos inesperados, como compilaciones de larga duración o errores de falta de memoria.

Para solucionar este problema, especifique NODE_ENV=development en su archivo app.yaml para asegurarse de que la ejecución tenga todas las dependencias necesarias.

A pesar del error, puede forzar la producción especificando NODE_ENV: 'production' en build-env-variables en su archivo app.yaml:

  build_env_variables:
    NODE_ENV: 'production'

Para obtener más información, consulte Ejecutar pasos de compilación personalizados durante la implementación.