Deployment
Se riscontri problemi con il deployment dell'app utilizzando l'API App Engine Admin, questa pagina elenca i messaggi di errore che potresti visualizzare e fornisce suggerimenti su come correggere ciascun errore.
Il chiamante non dispone dell'autorizzazione per accedere al progetto
Quando esegui il deployment dell'app si verifica il seguente errore:
User EMAIL_ADDRESS does not have permission to access project PROJECT_ID (or it may not exist): The caller does not have permission
Questo errore si verifica se l'account che hai utilizzato per eseguire il deployment dell'app non dispone dell'autorizzazione per eseguire il deployment delle app per il progetto corrente.
Per risolvere il problema, concedi il ruolo Deployer App Engine (roles/appengine.deployer
) all'account. Per vedere quale account hai utilizzato per il deployment, esegui una delle seguenti operazioni:
- Se hai utilizzato Google Cloud CLI per il deployment, esegui il comando
gcloud auth list
. - Se hai eseguito il deployment da un IDE, visualizza le impostazioni del plug-in Cloud Tools.
Impossibile recuperare i metadati dal registro
Quando esegui il deployment dell'app si verifica il seguente errore:
Failed to fetch metadata from the registry, with reason: generic::permission_denied
Questo errore si verifica se utilizzi il comando gcloud app deploy
da un account di servizio che non ha il ruolo Amministratore Storage (roles/storage.admin
).
Per risolvere il problema, concedi il ruolo Amministratore Storage all'account di servizio:
- Per vedere quale account hai utilizzato, esegui il comando
gcloud auth list
. - Per scoprire perché in alcuni casi l'assegnazione solo del ruolo Deployer App Engine (
roles/appengine.deployer
) potrebbe non essere sufficiente, consulta Ruoli App Engine.
Gli account di servizio devono disporre delle autorizzazioni per l'immagine
Quando esegui il deployment dell'app si verifica il seguente errore:
The App Engine appspot and App Engine flexible environment service accounts must have permissions on the image IMAGE_NAME
Questo errore si verifica per uno dei seguenti motivi:
L'account di servizio App Engine predefinito non dispone del ruolo Visualizzatore oggetti Storage (
roles/storage.objectViewer
).- Per risolvere il problema, concedi il ruolo Visualizzatore oggetti Storage all'account di servizio.
Il progetto ha un perimetro di servizio VPC che limita l'accesso all'API Cloud Storage utilizzando i livelli di accesso.
- Per risolvere il problema, aggiungi l'account di servizio che utilizzi per eseguire il deployment dell'app al perimetro di servizio VPC corrispondente per l'attributo accessPolicies.
Impossibile creare Cloud Build
Quando esegui il deployment dell'app si verifica il seguente errore:
Failed to create cloud build: Permission denied
Questo errore si verifica se utilizzi il comando gcloud app deploy
da un account che
non dispone del ruolo Editor di Cloud Build (roles/cloudbuild.builds.editor
).
Per risolvere il problema, concedi il ruolo Editor di Cloud Build all'account di servizio che utilizzi per eseguire il deployment dell'app.
Per vedere quale account hai utilizzato, esegui il comando gcloud auth list
.
Errore relativo alle autorizzazioni durante il recupero dell'applicazione
Quando esegui il deployment dell'app si verifica il seguente errore:
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
Se esegui Google Cloud CLI 328 o versioni successive, quando esegui il deployment dell'app si verifica il seguente errore:
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.
Questo errore si verifica se l'account che hai utilizzato per eseguire il deployment dell'app non ha il ruolo Deployer App Engine (roles/appengine.deployer
).
Per risolvere il problema, verifica di aver concesso il ruolo Deployer App Engine all'account di servizio che hai utilizzato per eseguire il deployment dell'app; concedi il ruolo se non è presente nell'account di servizio. Per vedere quale account hai utilizzato per il deployment, esegui una di queste operazioni:
- Se hai utilizzato Google Cloud CLI per il deployment, esegui il comando
gcloud auth list
. - Se hai eseguito il deployment da un IDE, visualizza le impostazioni del plug-in Cloud Tools.
Timeout durante l'attesa dell'integrità dell'infrastruttura dell'app
Quando esegui il deployment dell'app si verifica il seguente errore:
Timed out waiting for the app infrastructure to become healthy
La causa di questo errore può essere dovuta a diversi fattori, ad esempio autorizzazioni mancanti, errori di codice, CPU o memoria insufficienti o controlli di integrità non superati. L'errore si verifica solo nell'ambiente flessibile di App Engine.
Per risolvere il problema, escludi le seguenti potenziali cause:
- Verifica di aver concesso il ruolo Editor (
roles/editor
) al tuo account di servizio App Engine predefinito. - Verifica se il criterio dell'organizzazione per il tuo progetto limita l'accesso agli indirizzi IP esterni. Per ulteriori informazioni, consulta i problemi noti dell'ambiente flessibile di App Engine.
Verifica di aver concesso i ruoli seguenti all'account di servizio che utilizzi per eseguire l'applicazione (di solito l'account di servizio predefinito,
app-id@appspot.gserviceaccount.com
):Concedi i ruoli se non sono presenti nell'account di servizio.
Se esegui il deployment nella configurazione del VPC condiviso e passi
instance_tag
inapp.yaml
, consulta questa sezione per risolvere il problema.
Errore delle autorizzazioni durante il deployment di un servizio con connettore di accesso VPC serverless
Quando esegui il deployment dell'app si verifica il seguente errore:
Please ensure you have [compute.globalOperations.get] on the service project
Questo errore si verifica quando l'account utente o di servizio che sta tentando di eseguire il deployment dell'app con il connettore VPC serverless non dispone delle autorizzazioni richieste.
Per risolvere questo problema, assicurati che l'account utente o di servizio che esegue il deployment disponga dei ruoli Utente con accesso VPC serverless e Visualizzatore Compute.
Errore di valore non valido durante il deployment in una configurazione di un VPC condiviso
In Cloud Logging per le istanze VM flessibili viene visualizzato il seguente errore quando esegui il deployment dell'app:
Invalid value for field 'resource.tags.items[1]': 'aef-instance'. Duplicate tags are not allowed: aef-instance on compute.instances.insert
Questo errore è dovuto a un problema noto attuale per cui l'impostazione di instance_tag genera errori durante la creazione delle istanze.
Per risolvere il problema, rimuovi il campo instance_tag
da app.yaml
ed esegui di nuovo il deployment.
Errori durante il deployment di app con un massimo di 3 istanze
Le app di cui è stato eseguito il deployment con max_instances
impostato su 3 o su un valore inferiore potrebbero riscontrare tempi di inattività o errori imprevisti. Per risolvere il problema, specifica almeno quattro istanze massime in app.yaml
ed esegui di nuovo il deployment.
Errore durante il superamento del limite massimo di istanze
Quando esegui il deployment dell'app si verifica il seguente errore:
You may not have more than 'xx' total max instances in your project.
Esiste un limite al numero massimo di istanze che puoi creare per progetto. Le richieste per creare istanze aggiuntive non andranno a buon fine se superi questo limite.
Per risolvere il problema, imposta il valore di max_instances
nel file app.yaml
su un valore inferiore a questo limite
oppure elimina alcuni servizi o versioni per portare la somma di max_instances
entro il limite.
Autorizzazione "compute.firewalls.list" obbligatoria
Il seguente errore si verifica quando esegui il deployment della tua app su una VPC condiviso condivisa:
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'
Questo errore si verifica se i seguenti account di servizio per il progetto host non hanno il ruolo Utente di rete Compute (roles/compute.networkUser
):
Per risolvere il problema, verifica di aver concesso il ruolo Utente di rete Compute agli account di servizio Agente di servizio API di Google e Agente di servizio dell'ambiente flessibile di App Engine per il progetto host. concedi il ruolo se non lo è agli account di servizio.
La build durante il deployment non riesce senza errori nei log di build
Quando esegui il deployment della tua app si verifica il seguente errore:
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
Se fai clic sul link nel messaggio di errore, puoi vedere che tutti i passaggi della build sono stati completati correttamente. Tuttavia, la creazione dell'app non è riuscita.
Questo problema si verifica se utilizzi chiavi di crittografia gestite dal cliente (CMEK) o hai configurato un criterio di conservazione dei dati per il bucket staging.PROJECT_ID.appspot.com
.
Per risolvere questo problema, modifica le seguenti impostazioni per il bucket staging.PROJECT_ID.appspot.com
:
- Imposta la crittografia su Chiavi di crittografia gestite da Google.
- Rimuovi il criterio di conservazione.
Il deployment non riesce a causa di un vincolo dei criteri dell'organizzazione
Quando esegui il deployment di un'app si verifica il seguente errore:
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].
Questo errore può verificarsi a causa dell'applicazione del vincolo del criterio dell'organizzazione constraints/compute.disableGuestAttributesAccess
durante il deployment della tua app. Questo criterio viene applicato per impostazione predefinita a tutte le app nell'ambiente flessibile di App Engine.
Per risolvere questo problema, devi disabilitare il vincolo del criterio dell'organizzazione
constraints/compute.disableGuestAttributesAccess
.
Errori durante il deployment in una versione dell'ambiente flessibile esistente
Quando esegui il deployment in una versione flessibile di App Engine esistente, potrebbe verificarsi il seguente errore:
ERROR: (gcloud.app.deploy) Error Response: [9] An internal error occurred while processing task /app-engine-flex/flex_await_healthy/flex_await_healthy
Questo errore indica che l'aggiornamento di un deployment non integro con un'immagine Docker funzionante non comporta sempre un deployment integro. Il risultato dipende dallo stato delle istanze del deployment non integro. Nonostante l'errore, se fornisci una buona immagine Docker, il deployment potrebbe diventare integro. Aggiornare una versione esistente con una nuova immagine Docker, sebbene sia consentito, non è una buona pratica.
Attualmente non è possibile eseguire il rollback in caso di errore della versione.
attiva
Le sezioni seguenti trattano gli errori di inizializzazione e pubblicazione dell'app.
Errore di autorizzazione durante la creazione di un'app con l'account di servizio predefinito
Quando crei un'app dopo aver abilitato l'API App Engine per la prima volta, l'app presenta un errore e si verificano i seguenti errori:
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
Log delle richieste:
Service account creation is not allowed on this project.
Console:
Error while initialising App Engine.
Questo errore può verificarsi a causa dell'applicazione del vincolo del criterio dell'organizzazione constraints/iam.disableServiceAccountCreation
durante la creazione dell'app. Questo criterio impedisce il provisioning dell' account di servizio predefinito di App Engine PROJECT_ID@appspot.gserviceaccount.com
. L'account di servizio predefinito è necessario per la creazione dell'app e non può essere ignorato. Questo vale anche quando utilizzi un account di servizio per versione.
Per risolvere questo problema, devi rimuovere temporaneamente il vincolo dei criteri dell'organizzazione constraints/iam.disableServiceAccountCreation
per consentire la creazione e il deployment dell'account di servizio predefinito di App Engine.
L'account di servizio predefinito di App Engine può quindi essere eliminato o sostituito con un account di servizio creato dopo il completamento del deployment.
Se utilizzi un account di servizio creato da te, consulta la Panoramica dei suggerimenti per i ruoli per capire come applicare la limitazione delle autorizzazioni, ad esempio fornendo un ruolo autore di token nell'account di servizio creato per l'agente di servizio.
Nginx non riesce a connettersi o contatta il contenitore dell'app
Il seguente errore si verifica solo nell'ambiente flessibile di App Engine e in genere restituisce errori 502 subito dopo l'errore:
recv() failed (104: Connection reset by peer) while reading response header from upstream
Questo errore indica che il proxy inverso nginx (sidecar nginx) non è in grado di raggiungere il container dell'app. Nei log puoi confrontare la tempistica di chiusura dell'errore 502 nel log nginx con quella del log nginx.error. Un errore nginx.error seguito immediatamente da un errore nginx 502 è probabilmente la causa dell'errore di nginx 502.
Questo errore si verifica spesso quando il timeout keepalive della connessione dell'applicazione è inferiore al timeout keepalive di nginx. Poiché nginx nell'ambiente flessibile di App Engine ha keepalive_timeout
di 650 secondi, le applicazioni devono mantenere attive le connessioni per almeno questo tempo. Per impostazione predefinita, le applicazioni Node.js hanno keepAliveTimeout
di 5000 millisecondi. In questo caso, puoi impostare server.keepAliveTimeout
su 700.000 millisecondi.
Per risolvere i problemi, controlla i log scritti dal codice in esecuzione nel container dell'app connettendoti all'istanza VM e, se necessario, aggiungi altri log per trovare la causa principale.
Memoria insufficiente
Nell'ambiente flessibile di App Engine si verifica il seguente errore e in genere viene restituito con errori 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
Questo errore indica che App Engine ha terminato l'applicazione.
Questo errore si verifica quando la memoria dell'istanza è insufficiente. Per impostazione predefinita, l'ambiente flessibile di App Engine ha 1 GB di memoria, con solo 600 MB disponibili per il container dell'applicazione.
Per risolvere il problema, controlla i log e verifica se la memoria è esaurita. Aggiorna
la configurazione di memory_gb
ed esegui di nuovo il deployment.
Connessioni aperte insufficienti per gestire le richieste in entrata
Le app potrebbero riscontrare un errore 502 se il numero massimo di connessioni in attesa è uguale o superiore al 75% del numero di connessioni attive.
Per risolvere il problema, controlla nelle metriche di Cloud Monitoring il numero massimo di connessioni attive e in attesa e riduci il numero di connessioni in attesa per assicurarti che il numero massimo di connessioni in attesa sia inferiore o uguale al 75% del numero di connessioni attive.