Testa ed esegui il deployment dell'applicazione

ID regione

REGION_ID è un codice abbreviato assegnato da Google in base alla regione selezionata quando crei l'app. Il codice non corrisponde a un paese o a una provincia, anche se alcuni ID regione possono sembrare simili ai codici di paesi e province di uso comune. Per le app create dopo febbraio 2020, REGION_ID.r è incluso negli URL di App Engine. Per le app esistenti create prima di questa data, l'ID regione è facoltativo nell'URL.

Scopri di più sugli ID regione.

Scopri come eseguire la tua applicazione localmente, come eseguirne il deployment e come testarla in App Engine.

Esegui localmente

Per testare l'applicazione prima del deployment, eseguila nel tuo ambiente locale con gli strumenti di sviluppo che utilizzi di solito. Ad esempio, in genere puoi eseguire un'applicazione Flask con il server di sviluppo Flask utilizzando:

python main.py

Avvia le applicazioni Django utilizzando:

python manage.py runserver

Per simulare un ambiente App Engine di produzione, puoi eseguire il server WSGI (Web Server Gateway Interface) completo in locale. Utilizza lo stesso comando specificato come entrypoint nel file app.yaml, ad esempio:

gunicorn -b :$PORT main:app

Esegui il deployment dell'applicazione

Esegui il deployment dell'applicazione in App Engine utilizzando il comando gcloud app deploy.

Il servizio Cloud Build esegue automaticamente il deployment in un'immagine container e la esegue nell'ambiente flessibile di App Engine. Il contenitore include eventuali modifiche locali apportate all'immagine di runtime.

Per eseguire il deployment delle app in modo programmatico, utilizza l'API Admin.

Prima di iniziare

Prima di poter eseguire il deployment dell'applicazione:

Garantire il buon esito del deployment

Se attivi i controlli di integrità aggiornati, viene eseguito il rollback dei deployment se l'applicazione non raggiunge lo stato integro. Quando esegui il deployment della tua prima applicazione nell'ambiente flessibile, potrebbe verificarsi un ritardo durante la configurazione della macchina virtuale (VM) e dell'altra infrastruttura. Dopo la configurazione iniziale, i controlli di integrità assicurano che l'istanza sia in stato di salute e pronta a ricevere il traffico. Se l'applicazione non raggiunge lo stato di elaborazione in un periodo di tempo specificato, indicato dal campo initial_delay_sec nella sezione liveness_check del file app.yaml, il deployment non va a buon fine e viene eseguito il rollback.

La tua richiesta potrebbe richiedere più tempo per essere pronta. Ad esempio, potresti inizializzare l'applicazione scaricando file di grandi dimensioni o precaricando le cache. Se utilizzi i controlli di stato aggiornati, puoi aumentare il tempo modificando l'impostazione di configurazione app_start_timeout_sec nella sezione readiness_check del file app.yaml.

Se il deployment non va a buon fine, assicurati che l'API Cloud Build sia abilitata nel progetto. App Engine attiva questa API automaticamente la prima volta che esegui il deployment di un'app, ma se qualcuno ha disattivato l'API, i deployment non andranno a buon fine.

Esegui il deployment di un servizio

Esegui il deployment dell'applicazione in App Engine eseguendo il deployment delle versioni dei servizi dell'applicazione e di ciascuno dei relativi file di configurazione.

Per eseguire il deployment del servizio dell'applicazione, esegui il comando seguente dalla directory in cui si trova il file app.yaml del servizio:

gcloud app deploy

Per impostazione predefinita, il comando gcloud app deploy esegue il deployment solo del file app.yaml nella directory corrente. Ogni volta che esegui questo comando, App Engine genera un ID univoco per la versione di cui esegui il deployment, esegue il deployment della versione nel progetto Google Cloud per cui hai configurato l'utilizzo dell'interfaccia a riga di comando gcloud e inoltra tutto il traffico alla nuova versione. La nuova versione diventa la versione predefinita.

Puoi modificare il comportamento predefinito del comando di deployment scegliendo come target file specifici, specificando le versioni o includendo parametri aggiuntivi:

  • Puoi eseguire il deployment degli altri file di configurazione del tuo servizio scegliendo come target e implementando ciascun file separatamente, ad esempio:

    gcloud app deploy cron.yaml
    gcloud app deploy dispatch.yaml
    gcloud app deploy index.yaml
    
  • Per specificare un ID versione personalizzato, utilizza il flag --version.

  • Per impedire che il traffico venga indirizzato automaticamente alla nuova versione, utilizza il flag --no-promote.

  • Per eseguire il deployment in un progetto Google Cloud specifico, utilizza il flag --project.

Ad esempio, per eseguire il deployment del servizio definito dal file app.yaml in un progetto Google Cloud specifico, assegna al servizio un ID versione personalizzato e impedisci il routing del traffico alla nuova versione:

gcloud app deploy --project PROJECT_ID --version VERSION_ID --no-promote

Per ulteriori informazioni, consulta la sezione di riferimento gcloud app deploy.

Puoi impostare proprietà per l'interfaccia a riga di comando gcloud e creare e gestire configurazioni dell'SDK in modo da non dover specificare flag come --project ogni volta che esegui il deployment.

Esegui il deployment di più servizi

Utilizzi lo stesso comando di deployment per il deployment o l'aggiornamento dei diversi servizi che compongono l'applicazione.

Prima di iniziare:

  • Devi inizialmente eseguire il deployment di una versione dell'applicazione nel servizio default prima di poter creare ed eseguire il deployment di servizi successivi.

  • L'ID di ciascun servizio deve essere specificato nei relativi file di configurazione app.yaml. Per specificare l'ID servizio, includi la definizione dell'elemento service in ogni file di configurazione. Per impostazione predefinita, l'esclusione di questa definizione di elemento dal file di configurazione comporta il deployment della versione nel servizio default.

Per eseguire il deployment di più servizi, devi eseguire il deployment separato del file app.yaml di ciascun servizio, ad esempio:

gcloud app deploy service1/app.yaml
gcloud app deploy service2/app.yaml

Puoi specificare più file con un unico comando di deployment:

gcloud app deploy service1/app.yaml service2/app.yaml

Ignorare i file

Puoi utilizzare un file .gcloudignore per specificare i file e le directory da non caricare su Google Cloudquando esegui il deployment dei servizi. Questa opzione è utile per ignorare gli elementi di compilazione e altri file che non devono essere caricati con il deployment.

Scopri di più sulla sintassi del file .gcloudignore nel riferimento gcloud.

Creare manualmente un container per il deployment

Per creare le immagini container al di fuori di Google Cloud:

  1. Carica le immagini in un repository Artifact Registry. Per ulteriori informazioni, consulta Eseguire il push e il pull delle immagini.
  2. Esegui il deployment in App Engine con il comando gcloud app deploy.

Ad esempio, se crei le immagini container localmente con Docker, puoi eseguire il push di queste immagini in Artifact Registry e specificare l'URL dell'immagine nel flag --image-url del comando:

gcloud app deploy --image-url LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE

Sostituisci:

  • LOCATION con la posizione del repository in cui è archiviata l'immagine.

  • PROJECT-ID con il tuo Google Cloud ID progetto.

  • REPOSITORY con il nome del repository in cui è memorizzata l'immagine.

  • IMAGE con il nome dell'immagine container.

Utilizza pipeline di deployment continuo automatizzate

Puoi utilizzare Cloud Build per automatizzare i deployment nelle pipeline di deployment continuo. Per saperne di più, consulta Eseguire il deployment in App Engine e Creare e gestire gli trigger di build nella documentazione di Cloud Build.

Immagini di base Docker

Se vuoi creare un'applicazione di runtime personalizzata, consulta Creare un file Docker.

visualizza l'applicazione

Dopo aver eseguito il deployment dell'applicazione in App Engine, puoi eseguire il seguente comando per avviare il browser e visualizzarla all'indirizzo https://PROJECT_ID.REGION_ID.r.appspot.com:

gcloud app browse

Test su App Engine

Prima di configurare una nuova versione per ricevere il traffico, puoi testarla su App Engine. Ad esempio, per testare una nuova versione del serviziodefault:

  1. Esegui il deployment della nuova versione e includi il flag --no-promote:

    gcloud app deploy --no-promote

  2. Per accedere alla nuova versione, vai al seguente URL:

    https://VERSION_ID-dot-default-dot-PROJECT_ID.REGION_ID.r.appspot.com

    Ora puoi testare la nuova versione nell'ambiente di runtime di App Engine. Puoi eseguire il debug dell'applicazione visualizzando i relativi log in Esplora log della console Google Cloud. Per ulteriori informazioni, consulta Scrivere i log delle applicazioni.

    Le richieste inviate a https://PROJECT_ID.REGION_ID.r.appspot.com continueranno a essere inoltrate alla versione configurata in precedenza per ricevere il traffico.

  3. Quando vuoi inviare traffico alla nuova versione, utilizza la console Google Cloud per eseguirne la migrazione:

    Gestisci le versioni

    Seleziona la versione appena di cui hai eseguito il deployment e fai clic su Esegui la migrazione del traffico.

Puoi utilizzare la stessa procedura per testare le nuove versioni di altri servizi sostituendo default nell'URL con il nome del servizio:

https://VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com

Per ulteriori informazioni sul targeting di servizi e versioni specifici, consulta Come vengono instradate le richieste.

Utilizzare le variabili di ambiente di compilazione

Puoi impostare le variabili di ambiente di compilazione per i runtime che supportano i buildpack.

Le variabili di ambiente di compilazione sono coppie chiave-valore che puoi specificare per configurare il buildpack utilizzato per il deployment dell'app. Ad esempio, potresti voler specificare le opzioni del compilatore.

Prima di iniziare:

  • Le chiavi devono iniziare con una lettera ASCII maiuscola e possono includere lettere ASCII maiuscole, cifre e trattini bassi.
  • Evita di creare variabili con un prefisso della chiave GOOGLE_*.
  • Le seguenti chiavi sono riservate all'uso di Google:
    • GOOGLE_RUNTIME
    • GOOGLE_RUNTIME_VERSION
    • GOOGLE_ENTRYPOINT
    • GOOGLE_DEVMODE
  • Puoi utilizzare qualsiasi chiave supportata da buildpack.

Per utilizzare le variabili di ambiente con i buildpack, specifica il campo build_env_variables nel file app.yaml.

Scopri di più sui buildpack.

Utilizzare Cloud Trace

Cloud Trace è utile per capire come le richieste si propagano nell'applicazione. Puoi analizzare informazioni dettagliate sulla latenza per una singola richiesta o visualizzare la latenza aggregata per l'intera applicazione.

Puoi visualizzare i dettagli della traccia. In Trace Explorer, puoi filtrare in base al servizio e alla versione di App Engine specifici.

Risoluzione dei problemi

Di seguito sono riportati i messaggi di errore comuni che potresti riscontrare durante il deployment delle app:

PERMISSION_DENIED: Operation not allowed
The "appengine.applications.create" permission is required.
Se il progetto Google Cloud non include l'applicazione App Engine obbligatoria, il comando gcloud app deploy può non riuscire quando tenta di eseguire il comando gcloud app create. Solo gli account con il ruolo Proprietario dispongono delle autorizzazioni necessarie per creare applicazioni App Engine.
502 Bad Gateway
L'avvio del progetto Google Cloud può non riuscire se app.yaml non è configurato correttamente. Controlla i log dell'app per messaggi di errore più dettagliati.
[13] An internal error occurred while creating a Cloud Storage bucket.

App Engine crea per tuo conto un bucket Cloud Storage multiregionale predefinito nella stessa regione in cui crea la tua applicazione. Richiede questo bucket per archiviare i contenuti della tua applicazione. L'errore viene restituito quando non è possibile creare questo bucket, ad esempio nei seguenti scenari:

Ad esempio, se la tua app App Engine viene creata nella regione europe-west, anche se la regione corrisponde alle località europe-west1, devi modificare il vincolo per consentire le risorse in in:eu-locations, che include tutte le regioni EU. Questo è necessario perché i bucket creati da App Engine sono multiregionali. Se la tua app App Engine è stata creata nella regione US, devi consentire in:us-locations e, se è stata creata nelle regioni ASIA, devi consentire in:asia-locations.

[13] An internal error occurred.

Questo errore può verificarsi se esegui il deployment del servizio con una configurazione di rete che utilizza una configurazione VPC condivisa. Prova a procedere come segue:

  1. Assicurati che la configurazione di app.yaml sia valida.
  2. Assicurati che l'ambiente flessibile di App Engine adempia a tutti i requisiti per la configurazione di un VPC condiviso. Consulta Utilizzare l'ambiente flessibile di App Engine su una rete VPC condivisa.
  3. Assicurati di avere configurato gli account di servizio nel tuo progetto. In caso contrario, devi ripristinare gli account. La regione della subnet nel progetto host VPC condiviso deve corrispondere alla località in cui è stato creato l'ambiente App Engine.

Se il problema persiste, esegui nuovamente il deployment del servizio utilizzando Google Cloud SDK. Assicurati di aggiungere il flag --verbosity=debug. Contatta l'Google Cloud assistenza e fornisci l'output del comando.

IP space of {USER_SUBNETWORK_NAME} is exhausted and needs to be expanded.

Se il deployment non va a buon fine con questo messaggio di errore, la rete configurata per il servizio App Engine non ha indirizzi rimanenti da allocare per le nuove istanze del servizio. Per risolvere il problema, espandi gli intervalli VPC nella sottorete configurata per il servizio di ambiente flessibile di App Engine.