Test e deployment dell'applicazione

ID regione

REGION_ID è un codice abbreviato assegnato da Google in base all'area geografica selezionata al momento della creazione dell'app. Il codice non corrisponde a un paese o a una provincia, anche se alcuni ID di area geografica potrebbero essere simili ai codici di paese e provincia 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 area geografica è facoltativo nell'URL.

Scopri di più sugli ID dell'area geografica.

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

Esecuzione in locale

Per testare la funzionalità della tua applicazione prima del deployment, esegui l'applicazione nel tuo ambiente locale con gli strumenti di sviluppo che utilizzi abitualmente.

Ad esempio, di solito puoi eseguire un'applicazione Flask con il server di sviluppo di Flask utilizzando:

python main.py

Le applicazioni Django possono essere avviate con:

python manage.py runserver

Per simulare un ambiente App Engine di produzione, puoi eseguire localmente il server WSGI (Web Server Gateway Interface) completo. A tale scopo, utilizza lo stesso comando specificato per entrypoint in app.yaml, ad esempio:

gunicorn -b :$PORT main:app

Deployment dell'applicazione

Esegui il deployment dell'applicazione in App Engine utilizzando il comando gcloud app deploy. Questo comando crea automaticamente un'immagine container utilizzando il servizio Cloud Build e quindi esegue il deployment dell'immagine nell'ambiente flessibile di App Engine. Il container includerà 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 eseguire il deployment dell'applicazione:

Deployment sicuro

Se attivi i controlli di integrità aggiornati, i deployment vengono sottoposti a rollback se la tua applicazione non raggiunge lo stato di integrità.

Quando esegui il deployment della tua prima applicazione nell'ambiente flessibile, potrebbe verificarsi un ritardo mentre vengono configurati la macchina virtuale (VM) e l'altra infrastruttura. Dopo la configurazione iniziale, i controlli di integrità assicurano che l'istanza sia in stato integro e pronta a ricevere il traffico. Se l'applicazione non raggiunge lo stato di pronto in un periodo di tempo specificato, indicato dal campo initial_delay_sec nella sezioneliveness_check del file app.yaml, il deployment non riesce e viene eseguito il rollback.

L'applicazione potrebbe richiedere più tempo per essere preparata. Ad esempio, potresti inizializzare l'applicazione scaricando file di grandi dimensioni o precaricando le cache. Se utilizzi i controlli di integrità aggiornati, puoi aumentare la quantità di 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 abilita automaticamente questa API la prima volta che esegui il deployment di un'applicazione, ma se qualcuno ha disattivato l'API, il deployment non andrà a buon fine.

Deployment di un servizio

Esegui il deployment dell'applicazione in App Engine eseguendo il deployment delle versioni dei servizi dell'applicazione e di ognuno 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 attuale. Ogni volta che esegui questo comando, App Engine genera un ID univoco per la versione di cui esegui il deployment, ne esegue il deployment nel progetto Cloud che hai configurato con l'interfaccia a riga di comando gcloud e instrada tutto il traffico alla nuova versione. La nuova versione diventa quella predefinita.

Puoi modificare il comportamento predefinito del comando gcloud app deploy 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 ed eseguendo il deployment di ogni 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 evitare che il traffico venga automaticamente indirizzato alla nuova versione, utilizza il flag --no-promote.

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

Ad esempio, per eseguire il deployment del servizio definito da app.yaml in un progetto Cloud specifico, assegnargli un ID versione personalizzato e impedire che il traffico venga instradato alla nuova versione:

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

Per ulteriori informazioni su questo comando, consulta la documentazione di riferimento di gcloud app deploy.

Deployment di più servizi

Puoi utilizzare lo stesso comando di deployment per eseguire il deployment o aggiornare i vari servizi che compongono la tua applicazione.

Per eseguire il deployment di più servizi, devi eseguire il deployment dei file app.yaml di ogni servizio separatamente. Ad esempio:

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

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

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

Requisiti per il deployment di più servizi

  • Inizialmente devi eseguire il deployment di una versione della tua applicazione al servizio default prima di poter creare e implementare i servizi successivi.

  • L'ID di ciascuno dei tuoi servizi deve essere specificato nei file di configurazione app.yaml corrispondenti. Per specificare l'ID del 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 ne esegue il deployment nel servizio default.

Ignorare i file

Puoi utilizzare un file .gcloudignore per specificare i file e le directory da non caricare su Google Cloud quando esegui il deployment dei servizi. Questo metodo è utile per ignorare gli artefatti della build e altri file che non devono essere caricati con il tuo deployment.

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

Creazione manuale di un container per il deployment

Per creare immagini container all'esterno di Google Cloud Platform, devi prima caricarle in un repository di immagini container per poterne eseguire il deployment su App Engine con il comando gcloud app deploy.

Ad esempio, se crei le immagini container a livello locale con Docker, puoi eseguirne il push in Google Container Registry e specificare l'URL dell'immagine nel flag --image-url del comando:

gcloud app deploy --image-url gcr.io/YOUR_PROJECT_ID/YOUR_CONTAINER_IMAGE

Utilizzo delle pipeline di deployment continuo automatico

Puoi utilizzare Cloud Build per automatizzare i deployment nelle pipeline di deployment continuo. Per ulteriori informazioni, consulta Deployment di artefatti e automazione delle build tramite trigger di build nella documentazione di Cloud Build.

Immagini Docker di base per Python

Se vuoi creare un'applicazione runtime personalizzata di Python da graffiare, utilizza un'immagine di base fornita nel Dockerfile:

Runtime Comando Docker Google runtime equivalente
Python (2.7, 3.6 possono essere specificati nel Dockerfile) FROM gcr.io/google-appengine/python runtime: python

Visualizzazione dell'applicazione

Dopo aver eseguito il deployment dell'applicazione in App Engine, puoi eseguire il comando seguente per avviare il browser e visualizzarlo 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 servizio default:

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

    gcloud app deploy --no-promote
  2. Accedi alla nuova versione accedendo 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 di Google Cloud Console. Per ulteriori informazioni, consulta la pagina relativa alla scrittura dei log delle applicazioni.

    Le richieste inviate a https://PROJECT_ID.REGION_ID.r.appspot.com saranno comunque instradate alla versione configurata in precedenza per ricevere il traffico.

  3. Quando vuoi inviare traffico alla nuova versione, utilizza Cloud Console per eseguire la migrazione del traffico:

    Gestisci le versioni

    Seleziona la versione appena sottoposta a deployment e fai clic su Esegui la migrazione del traffico.

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

Per ulteriori informazioni sul targeting di servizi e versioni specifici, consulta la pagina Modalità di routing delle richieste.

Risolvere i problemi

Di seguito sono riportati i messaggi di errore comuni che potresti visualizzare quando esegui il deployment delle app:

PERMISSION_DENIED: Operation not allowed
The "appengine.applications.create" permission is required.
Se il progetto cloud non include l'applicazione richiesta di App Engine, il comando gcloud app deploy potrebbe non riuscire quando tenta di eseguire il comando gcloud app create. Solo gli account con ruolo Proprietario hanno le autorizzazioni necessarie per creare applicazioni App Engine.
502 Bad Gateway
Se app.yaml è configurato in modo errato, il progetto Cloud potrebbe non avviarsi. Controlla i log dell'app per visualizzare messaggi di errore più dettagliati.
[13] An internal error occurred while creating a Cloud Storage bucket.

App Engine crea un bucket Cloud Storage per più aree geografiche predefinito per tuo conto, nella stessa area geografica in cui viene creata l'applicazione. Questo bucket è necessario per archiviare i contenuti dell'applicazione. Questo errore viene restituito quando non è possibile creare questo bucket nei seguenti scenari:

[13] An internal error occurred.

Questo errore può verificarsi se esegui il deployment del servizio con una configurazione di rete utilizzando una configurazione VPC condiviso. Assicurati che il tuo ambiente flessibile di App Engine soddisfi tutti i requisiti per questa configurazione. Successivamente, assicurati che gli account di servizio configurati per questa configurazione siano presenti nel tuo progetto, altrimenti dovrai ripristinare gli account. Tieni presente che l'area geografica della subnet nel progetto host VPC condiviso deve corrispondere alla località in cui è stato creato l'ambiente App Engine.

Se il problema persiste dopo aver verificato la configurazione di app.yaml, utilizza Google Cloud SDK per eseguire nuovamente il deployment del servizio, aggiungendo il flag --verbosity=debug e contatta l'assistenza di GCP fornendo l'output del comando.

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

Se il deployment non riesce con questo messaggio di errore, significa che la rete configurata per il servizio App Engine non ha indirizzi da allocare per le nuove istanze del servizio. Puoi risolvere il problema espandendo gli intervalli VPC sulla subnet configurata per il servizio dell'ambiente flessibile di App Engine.