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:
Il proprietario del progetto Cloud deve abilitare App Engine.
Assicurati che il tuo account utente includa i privilegi necessari.
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'elementoservice
in ogni file di configurazione. Per impostazione predefinita, l'esclusione di questa definizione di elemento dal file di configurazione ne esegue il deployment nel serviziodefault
.
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
:
Esegui il deployment della nuova versione e includi il flag
--no-promote
:gcloud app deploy --no-promote
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.Quando vuoi inviare traffico alla nuova versione, utilizza Cloud Console per eseguire la migrazione del traffico:
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:
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 comandogcloud 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:
L'agente di servizio dell'ambiente flessibile di App Engine predefinito non è presente nel progetto o non ha il ruolo
App Engine flexible environment Service Agent
. Puoi riaggiungere l'account di servizio dell'agente nel tuo progetto concedendo alle autorizzazioni IAM corrette.L'account di servizio App Engine non è presente nel progetto. Se l'account di servizio App Engine è stato rimosso prima che siano trascorsi 30 giorni dall'eliminazione, puoi ripristinarlo.
Il tuo progetto fa parte di un'organizzazione che applica il criterio
constraints/gcp.resourceLocations
, e l'organizzazione non consente la creazione di risorse nella stessa area geografica in cui è stato creato App Engine. Dovrai eseguire l'override del criterioconstraints/gcp.resourceLocations
applicato al tuo progetto e consentire le località con più aree geografiche nella stessa area geografica in cui viene creata l'app App Engine.
[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.