Deployment di un'app Python

Esegui il deployment dell'app per caricarla ed eseguirla su App Engine. Quando esegui il deployment delle tue app, crei le versioni delle app e dei servizi corrispondenti in App Engine. Puoi eseguire il deployment di intere app, inclusi tutto il codice sorgente e i file di configurazione, oppure puoi eseguire il deployment e aggiornare singole versioni o file di configurazione.

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

Prima di iniziare

Prima di poter eseguire il deployment dell'app:

Installazione di gcloud CLI

Per eseguire il deployment della tua app con gcloud CLI, devi scaricare, installare e inizializzare gcloud CLI.

Scarica l'SDK

Se hai già installato gcloud CLI e vuoi configurarlo in modo che utilizzi un ID progetto Google Cloud diverso da quello in cui l'hai inizializzato, consulta Gestione delle configurazioni dell'interfaccia a riga di comando gcloud.

Utilizzo di un proxy

Se esegui il comando di deployment da un sistema che utilizza un proxy HTTP o HTTPS, devi configurare lo strumento in modo che possa comunicare tramite il proxy.

Esegui questi comandi per configurare gcloud CLI:

gcloud config set proxy/type [PROXY_TYPE]
gcloud config set proxy/address [PROXY_ADDRESS]
gcloud config set proxy/port [PROXY_PORT]

Puoi anche impostare username e password per il proxy. Per ulteriori informazioni, consulta gcloud config.

Deployment di un'app

Per eseguire il deployment dell'app in App Engine, utilizza il comando gcloud app deploy nella posizione in cui si trovano i file di configurazione, ad esempio app.yaml.

Scelta di ID versione univoci

Per le istanze con scalabilità manuale, l'ID della versione deve iniziare con una lettera per distinguerle dagli ID numerici delle istanze. Ciò garantisce che le richieste vengano indirizzate alla destinazione corretta ed evita l'ambiguità con pattern URL come 123-dot-my-service.[REGION_ID].r.appspot.com, che possono essere interpretati in due modi:

  • Se esiste la versione 123, la richiesta viene instradata alla versione 123 del servizio my-service.
  • Se la versione 123 non esiste, la richiesta viene instradata all'ID istanza 123 in cui sono in esecuzione le versioni del servizio my-service.

Puoi assegnare alle versioni il nome che preferisci per le istanze configurate per la scalabilità automatica o la scalabilità di base perché il targeting di queste istanze non è supportato.

gcloud app deploy [CONFIGURATION_FILES]

Per impostazione predefinita, il comando esegue il deployment del file di configurazione app.yaml dalla directory corrente. Se esegui il comando da una directory che non contiene app.yaml dell'app o se vuoi eseguire il deployment di più app, sostituisci [CONFIGURATION_FILES] con il percorso di uno o più file di configurazione. Utilizza un singolo spazio vuoto per separare i nomi dei percorsi.

Flag facoltativi:

  • --version: specifica un ID versione personalizzata. Per impostazione predefinita, App Engine genera un ID versione.
  • --no-promote: esegue il deployment dell'app senza instradare automaticamente tutto il traffico a quella versione. Per impostazione predefinita, ogni versione di cui esegui il deployment viene configurata automaticamente per ricevere il 100% del traffico.
  • --project: specifica un ID progetto Google Cloud alternativo a quello che hai inizializzato come predefinito in gcloud CLI.

Per maggiori informazioni, consulta il riferimento gcloud app deploy o esegui gcloud help dalla riga di comando.

Esempi:

gcloud app deploy
gcloud app deploy app.yaml dos.yaml index.yaml
gcloud app deploy --version [YOUR_VERSION_ID] --no-promote --project [YOUR_PROJECT_ID]

Se esegui il deployment di una versione che specifica lo stesso ID di una versione già esistente in App Engine, i file di cui esegui il deployment sovrascriveranno la versione esistente. Questo può rappresentare un problema se la versione gestisce traffico perché il traffico verso la tua applicazione potrebbe subire interruzioni. Puoi evitare interruzioni del traffico se esegui il deployment della nuova versione con un ID versione diverso e poi trasferisci il traffico a quella versione.

Deployment di più applicazioni di servizio

Quando la tua applicazione viene inclusa in più servizi, puoi eseguire il deployment e l'aggiornamento di servizi scelti come target singolarmente o di tutti i servizi contemporaneamente. Il deployment degli aggiornamenti ai servizi può includere l'aggiornamento di singoli file di configurazione o dell'aggiornamento del codice sorgente nelle versioni corrispondenti.

Ad esempio, puoi eseguire il deployment e creare due versioni in App Engine, dove ogni versione viene eseguita nel proprio servizio. La prima versione funge da servizio di frontend e l'altra da backend dell'app. Puoi quindi eseguire il deployment di singoli file di configurazione per aggiornare solo le impostazioni di un servizio. Puoi anche scegliere di eseguire il deployment di una nuova versione in un servizio per aggiornare il codice sorgente del frontend, del backend o di entrambi contemporaneamente.

Requisiti per più servizi

Puoi utilizzare gli stessi comandi di deployment per il deployment e l'aggiornamento dei vari servizi dell'applicazione con i seguenti requisiti:

  • Devi inizialmente eseguire il deployment di una versione della tua app nel servizio default prima di poter creare ed eseguire il deployment di servizi successivi.

  • Devi specificare l'ID del servizio nel file di configurazione di app.yaml della versione corrispondente. Per specificare l'ID servizio, devi includere la definizione dell'elemento service: [YOUR_SERVICE_ID] in ogni file di configurazione. Per impostazione predefinita, se si esclude questa definizione di elemento dal file di configurazione viene eseguito il deployment della versione nel servizio default.

  • Per eseguire contemporaneamente il deployment di più servizi, devi specificare tutti i file di configurazione app.yaml corrispondenti nel comando di deployment.

Per eseguire il deployment di più servizi

Dalla directory radice dell'applicazione in cui si trovano i file di configurazione, esegui il comando di deployment e specifichi i percorsi relativi e i nomi file per il file app.yaml di ogni servizio.

gcloud app deploy [CONFIGURATION_FILES]

dove [CONFIGURATION_FILES] rappresenta il percorso e il nome di uno o più file di configurazione separati da un singolo spazio vuoto.

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

Riceverai la verifica tramite la riga di comando man mano che il deployment di ogni servizio viene eseguito correttamente.

Visualizzazione dei log di build

Cloud Build esegue i flussi di log di build ed deployment, visualizzabili nella sezione della cronologia di Cloud Build della console Google Cloud. Per visualizzare le build nella regione dell'app, usa il menu a discesa Regione nella parte superiore della pagina per scegliere la regione in base alla quale vuoi applicare il filtro.

Aggiornamento degli indici

Per creare o aggiornare gli indici utilizzati dalle app, carica il file di configurazione index.yaml in Datastore. Gli indici che non esistono ancora vengono creati dopo il caricamento del file di configurazione.

Datastore può richiedere del tempo per creare tutti gli indici, pertanto questi indici non saranno immediatamente disponibili per App Engine. Se la tua app è già configurata per ricevere traffico, possono verificarsi eccezioni per le query che richiedono un indice ancora in fase di creazione.

Per evitare eccezioni, devi attendere la creazione di tutti gli indici, ad esempio:

  • Carica il file di configurazione index.yaml in Datastore prima di eseguire il deployment della versione:

    1. Carica il file index.yaml in Datastore:

      gcloud datastore indexes create index.yaml

      Per informazioni, consulta la documentazione di riferimento di gcloud datastore.

    2. Utilizza la console Google Cloud per monitorare lo stato di tutti i tuoi indici:

      Vai alla pagina Datastore

    3. Dopo aver creato tutti gli indici, esegui il deployment della nuova versione in App Engine.

  • Crea i tuoi indici prima di eseguire la migrazione o la suddivisione del traffico verso la tua versione:

    1. Esegui il deployment della nuova versione senza instradare il traffico a quella versione: devi specificare entrambi i file app.yaml e index.yaml e includere anche il flag --no-promote in modo che nessun traffico venga instradato alla versione:
      gcloud app deploy app.yaml index.yaml --no-promote
    2. Utilizza la console Google Cloud per monitorare lo stato di tutti i tuoi indici:

      Vai alla pagina di Datastore

    3. Dopo aver creato tutti gli indici, utilizza la console Google Cloud per eseguire la migrazione o suddividere il traffico verso la tua versione:

      Vai alla pagina Versioni

Per ulteriori informazioni sugli indici, consulta Configurazione degli indici Datastore.

Risoluzione dei problemi

Di seguito sono riportati i messaggi di errore comuni che potresti visualizzare:

PERMISSION_DENIED: Operation not allowed
The "appengine.applications.create" permission is required.
Se il progetto Google Cloud non include l'applicazione App Engine richiesta, il comando gcloud app deploy potrebbe non riuscire quando tenta di eseguire il comando gcloud app create. Solo gli account con ruolo Proprietario dispongono delle autorizzazioni necessarie per creare applicazioni App Engine.
Command not found
Consulta Utilizzo del server di sviluppo locale per istruzioni su come configurare lo strumento del server di sviluppo locale.
Import Error
Se hai installato sia gcloud CLI sia l'SDK originale di App Engine, le voci del tuo PATH potrebbero essere in conflitto tra loro e causare errori di importazione. Se hai ricevuto errori durante l'esecuzione dei comandi dell'interfaccia a riga di comando gcloud CLI, segui le istruzioni per eseguire il server di sviluppo locale.
[400] The first service (module) you upload to a new application must be the 'default' service (module)
Prima di poter eseguire il deployment e creare i vari servizi della tua applicazione, devi prima eseguire il deployment e creare il servizio default. Per maggiori dettagli su come eseguire il deployment di una versione nel servizio default, consulta Deployment di più applicazioni di servizio.
Too Many Versions (403)
App Engine prevede un limite al numero di versioni di cui è stato eseguito il deployment dell'applicazione. Si differenziano per le applicazioni gratuite e per quelle di cui è stato eseguito il deployment. Puoi utilizzare la console Google Cloud per eliminare una versione precedente e caricare il codice più recente.
[13] An internal error occurred while creating a Cloud Storage bucket.

App Engine crea un bucket Cloud Storage predefinito multiregionale per tuo conto, nella stessa regione in cui è stata 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 il file di configurazione app.yaml di App Engine contiene una risorsa non valida name nella chiave vpc_access_connector. Assicurati che il campo name contenga il progetto e la regione corretti in cui viene creato il connettore di accesso VPC serverless.

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

Altro errore di deployment

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

Passaggi successivi