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 :
Le compte de service App Engine par défaut ne dispose pas du rôle Lecteur des objets de l'espace de stockage (
roles/storage.objectViewer
).- Pour résoudre ce problème, accordez le rôle Lecteur des objets de l'espace de stockage au compte de service.
Votre projet dispose d'un périmètre de service VPC qui limite l'accès à l'API Cloud Storage à l'aide de niveaux d'accès.
- Pour résoudre ce problème, ajoutez le compte de service utilisé pour déployer votre application au périmètre de service VPC correspondant accessPolicies.
É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 :
Vérifiez que vous avez accordé le rôle Éditeur (
roles/editor
) au compte de service App Engine par défaut.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.
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
) :Accordez ces rôles au compte de service si vous ne l'avez pas déjà fait.
Si vous effectuez un déploiement dans une configuration de VPC partagé et transmettez le champ
instance_tag
dans le fichierapp.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.
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
:
- Définissez le chiffrement sur Clés de chiffrement gérées par Google.
- Supprimez la règle de conservation.
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
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.