Résoudre les erreurs App Engine

Déploiement

Si vous rencontrez des problèmes pour déployer votre application à l'aide de l'API App Engine Admin, cette page répertorie les messages d'erreur susceptibles de s'afficher et propose des suggestions pour corriger chaque erreur.

L'appelant n'est pas autorisé à accéder au projet

L'erreur suivante se produit lorsque vous déployez votre application :

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

Cette erreur se produit si le compte utilisé pour le déploiement de l'application n'est pas autorisé à déployer des applications pour le projet en cours.

Pour résoudre ce problème, accordez le rôle Déployeur App Engine (roles/appengine.deployer) au compte. Pour afficher le compte utilisé pour le déploiement, effectuez l'une des opérations suivantes :

  • Si vous avez utilisé Google Cloud CLI pour le déploiement, exécutez la commande gcloud auth list.
  • Si vous avez déployé le service à partir d'un IDE, affichez les paramètres du plug-in Cloud Tools.

Échec de la récupération des métadonnées à partir du registre

L'erreur suivante se produit lorsque vous déployez votre application :

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

Cette erreur se produit si vous exécutez la commande gcloud app deploy à partir d'un compte de service qui ne dispose pas du rôle "Administrateur Storage" (roles/storage.admin).

Pour résoudre ce problème, accordez le rôle Administrateur Storage au compte de service :

  • Pour afficher le compte utilisé, exécutez la commande gcloud auth list.
  • Pour découvrir les raisons pour lesquelles l'attribution du rôle "Déployeur App Engine (roles/appengine.deployer)" ne suffit pas toujours, consultez la section Rôles App Engine.

Les comptes de service doivent disposer d'autorisations sur l'image

L'erreur suivante se produit lorsque vous déployez votre application :

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

Cette erreur se produit pour l'une des raisons suivantes :

Échec de la création de la compilation cloud

L'erreur suivante se produit lorsque vous déployez votre application :

Failed to create cloud build: Permission denied

Cette erreur se produit si vous exécutez la commande gcloud app deploy à partir d'un compte qui ne dispose pas du rôle "Éditeur Cloud Build (roles/cloudbuild.builds.editor).

Pour résoudre ce problème, accordez le rôle Éditeur Cloud Build au compte de service que vous utilisez pour déployer votre application.

Pour afficher le compte utilisé, exécutez la commande gcloud auth list.

Erreur d'autorisation lors de la récupération de l'application

L'erreur suivante se produit lorsque vous déployez votre application :

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

Si vous utilisez Google Cloud CLI version 328 ou ultérieure, l'erreur suivante se produit lors du déploiement de votre application :

Permissions error fetching application apps/app_name. Please
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.

Cette erreur se produit si le compte utilisé pour le déploiement de votre application ne dispose pas du rôle "Déployeur App Engine" (roles/appengine.deployer).

Pour résoudre ce problème, vérifiez que vous avez bien accordé le rôle Déployeur App Engine au compte de service que vous avez utilisé pour déployer votre application. Si ce n'est pas le cas, accordez-lui ce rôle. Pour afficher le compte utilisé pour le déploiement, effectuez l'une des opérations suivantes :

  • Si vous avez utilisé Google Cloud CLI pour le déploiement, exécutez la commande gcloud auth list.
  • Si vous avez déployé le service à partir d'un IDE, affichez les paramètres du plug-in Cloud Tools.

Le délai d'attente a expiré lors de la mise en service de l'infrastructure de l'application

L'erreur suivante se produit lorsque vous déployez votre application :

Timed out waiting for the app infrastructure to become healthy

Plusieurs facteurs peuvent entraîner cette erreur, par exemple des autorisations manquantes, des erreurs de code, des ressources de processeur ou de mémoire insuffisantes, ou encore des vérifications d'état ayant échoué. L'erreur ne se produit que dans l'environnement flexible App Engine.

Pour résoudre ce problème, éliminez les causes potentielles suivantes :

  1. Vérifiez que vous avez accordé le rôle Éditeur (roles/editor) au compte de service App Engine par défaut.
  2. Vérifiez si la règle d'administration de votre projet restreint l'accès aux adresses IP externes. Pour plus d'informations, consultez Problèmes connus dans l'environnement flexible App Engine.
  3. Vérifiez que vous avez attribué les rôles suivants au compte de service que vous utilisez pour exécuter votre application (généralement le compte de service par défaut, app-id@appspot.gserviceaccount.com) :

  4. Accordez ces rôles au compte de service si vous ne l'avez pas déjà fait.

  5. Si vous effectuez un déploiement dans une configuration de VPC partagé et transmettez le champ instance_tag dans le fichier app.yaml, reportez-vous à cette section pour résoudre le problème.

Erreur d'autorisations lors du déploiement d'un service avec le connecteur d'accès VPC sans serveur

L'erreur suivante se produit lorsque vous déployez votre application :

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

Cette erreur se produit lorsque l'utilisateur ou le compte de service qui tente de déployer l'application avec le connecteur VPC sans serveur ne dispose pas des autorisations requises.

Pour résoudre ce problème, assurez-vous que l'utilisateur ou le compte de service effectuant le déploiement dispose des rôles IAM Utilisateur pour l'accès au VPC sans serveur et Lecteur de Compute.

Erreur de valeur non valide lors du déploiement dans une configuration de VPC partagé

L'erreur suivante s'affiche dans Cloud Logging pour les instances de VM Flex lorsque vous déployez votre application :

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

Cette erreur est due à un problème connu actuel à cause duquel la définition d'"instance_tag" entraîne des erreurs lors de la création d'instances.

Pour résoudre le problème, supprimez le champ instance_tag du fichier app.yaml et redéployez votre application.

Erreurs lors du déploiement d'applications dotées de trois instances au maximum

Les applications déployées avec le paramètre max_instances défini sur 3 ou moins peuvent rencontrer des erreurs ou des temps d'arrêt inattendus. Pour résoudre le problème, spécifiez au moins quatre instances dans le fichier app.yaml, puis redéployez-le.

Erreur lors du dépassement de la limite du nombre maximal d'instances

L'erreur suivante se produit lorsque vous déployez votre application :

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

Le nombre maximal d'instances que vous pouvez créer par projet est limité. Les requêtes de création d'instances supplémentaires échouent si vous dépassez cette limite.

Pour résoudre ce problème, définissez la valeur de max_instances dans votre fichier app.yaml sur une valeur inférieure à cette limite, ou supprimez certains services ou certaines versions afin que le cumul des valeurs max_instances ne dépasse pas la limite autorisée.

Autorisation "compute.firewalls.list" requise

L'erreur suivante se produit lorsque vous déployez votre application sur un réseau VPC partagé :

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'

Cette erreur se produit si les comptes de service suivants pour le projet hôte ne possèdent pas le rôle d'utilisateur de réseau Compute (roles/compute.networkUser) :

Pour résoudre ce problème, vérifiez que vous avez bien accordé le rôle d'utilisateur de réseau Compute aux comptes de service de l'agent de service des API Google et de l'agent de service de l'environnement flexible App Engine pour le projet hôte. Accordez ce rôle aux comptes de service s'ils ne le possèdent pas.

Échec de la compilation lors du déploiement sans erreur dans les journaux de compilation

L'erreur suivante se produit lorsque vous déployez votre application :

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

Lorsque vous cliquez sur le lien dans le message d'erreur, vous pouvez vérifier si toutes les étapes de compilation ont été effectuées. Cependant, l'application ne parvient pas à procéder à la compilation.

Ce problème se produit si vous utilisez des clés de chiffrement gérées par le client (CMEK) ou si vous avez configuré une règle de conservation des données dans votre bucket staging.PROJECT_ID.appspot.com.

Pour résoudre ce problème, modifiez les paramètres suivants de votre bucket staging.PROJECT_ID.appspot.com :

Échec du déploiement en raison d'une contrainte de règle d'administration

L'erreur suivante se produit lorsque vous déployez une application :

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

Cette erreur peut se produire en raison de l'application de la contrainte de règle d'administration constraints/compute.disableGuestAttributesAccess lors du déploiement de votre application. Cette règle est appliquée par défaut à toutes les applications dans l'environnement flexible App Engine.

Pour résoudre ce problème, vous devez désactiver la contrainte de règle d'administration constraints/compute.disableGuestAttributesAccess.

Erreurs lors du déploiement dans une version d'environnement flexible existante

L'erreur suivante peut se produire lors du déploiement dans une version flexible App Engine existante :

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

Cette erreur indique que la mise à jour d'un déploiement non opérationnel avec une image Docker opérationnelle n'entraîne pas toujours un déploiement opérationnel. Le résultat dépend de l'état des instances du déploiement non opérationnel. Malgré l'erreur, si vous fournissez une bonne image Docker, le déploiement peut finalement devenir opérationnel. La mise à jour une version existante avec une nouvelle image Docker, bien qu'autorisée, n'est pas recommandée.

Actuellement, il n'y a pas de rollback en cas d'échec de la version.

Diffusion

Les sections suivantes décrivent les erreurs d'initialisation et de diffusion des applications.

Erreur d'autorisation lors de la création d'une application avec le compte de service par défaut

Lorsque vous créez une application après avoir activé l'API App Engine pour la première fois, elle échoue avec les erreurs suivantes :

  • gcloud CLI :

    An internal error occurred while calling service consumer manager for service account.
    Creating  App Engine application in project [PROJECT__ID] and [REGION]....failed. DEBUG: (gcloud.app.create) Error Response: [13] an internal error has occurred
    
  • Journaux des requêtes :

    Service account creation is not allowed on this project.
    
  • Console :

    Error while initialising App Engine.
    

Cette erreur peut se produire en raison de l'application de la contrainte de règle d'administration constraints/iam.disableServiceAccountCreation lors de la création de votre application. Cette règle empêche le provisionnement du compte de service App Engine par défaut PROJECT_ID@appspot.gserviceaccount.com. Le compte de service par défaut est nécessaire pour la création de l'application et ne peut pas être ignoré. Cela est également applicable lorsque vous utilisez un compte de service par version.

Pour résoudre ce problème, vous devez supprimer temporairement la contrainte de règle d'administration constraints/iam.disableServiceAccountCreation pour permettre la création et le déploiement du compte de service App Engine par défaut. Le compte de service App Engine par défaut peut ensuite être supprimé ou remplacé par un compte de service que vous créez une fois le déploiement réussi.

Si vous utilisez un compte de service que vous avez créé, consultez Présentation des recommandations de rôle pour comprendre comment appliquer des autorisations restreintes, par exemple pour attribuer un rôle de créateur de jetons au compte de service créé pour l'agent de service.

Nginx ne parvient pas à se connecter ou à contacter le conteneur d'application

L'erreur suivante ne se produit que dans l'environnement flexible App Engine et renvoie généralement des erreurs 502 immédiatement après l'erreur:

recv() failed (104: Connection reset by peer) while reading response header from upstream

Cette erreur indique que le proxy inverse nginx (side-car nginx) ne parvient pas à atteindre le conteneur d'application. Dans les journaux, vous pouvez comparer le délai de fermeture de l'erreur 502 dans le journal nginx avec le délai du journal nginx.error. Une erreur nginx.error suivie immédiatement d'une erreur 502 nginx est probablement la cause de l'erreur nginx 502.

Cette erreur se produit souvent lorsque le délai d'expiration de la connexion keepalive de l'application est inférieur au délai d'expiration keepalive de nginx. Comme nginx dans l'environnement flexible App Engine possède un keepalive_timeout de 650 secondes, les applications doivent maintenir les connexions actives pendant au moins cette durée. Par défaut, les applications Node.js possède un keepAliveTimeout de 5 000 millisecondes. Dans ce cas, vous pouvez définir server.keepAliveTimeout sur 700 000 millisecondes.

Pour résoudre le problème, consultez les journaux écrits par le code exécuté dans le conteneur de votre application en vous connectant à l'instance de VM et ajoutez, si nécessaire, d'autres journaux pour en identifier la cause.

Mémoire insuffisante

L'erreur suivante se produit dans l'environnement flexible App Engine et renvoie généralement des erreurs 502 :

kernel: [  133.706951] Out of memory: Kill process 4490 (java) score 878 or sacrifice child
kernel: [  133.714468] Killed process 4306 (java) total-vm:5332376kB, anon-rss:2712108kB, file-rss:0kB

Cette erreur indique qu'App Engine a arrêté l'application.

Cette erreur se produit lorsque l'instance ne dispose pas de suffisamment de mémoire. Par défaut, l'environnement flexible App Engine dispose de 1 Go de mémoire, avec seulement 600 Mo pour le conteneur d'applications.

Pour résoudre le problème, consultez les journaux et vérifiez si vous voyez une entrée de mémoire insuffisante. Mettez à jour votre configuration memory_gb et redéployez l'application.

Connexions ouvertes insuffisantes pour gérer les requêtes entrantes

Les applications peuvent rencontrer une erreur 502 si le nombre maximal de connexions en attente est égal ou supérieur à 75 % du nombre de connexions actives.

Pour résoudre le problème, consultez les Métriques Cloud Monitoring pour le nombre maximal de connexions actives et en attente, puis diminuez le nombre de connexions en attente pour vous assurer que le nombre maximal de connexions en attente est inférieur ou égal à 75 % du nombre de connexions actives.