Deployment di un'app Java

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 i relativi servizi 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 l'aggiornamento di singole versioni o di 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:

Per eseguire il deployment dell'app utilizzando lo strumento di compilazione Maven, devi configurare il progetto in modo che utilizzi il plug-in Maven per App Engine.

Installazione dellgcloud CLI

Per eseguire il deployment dell'app con gcloud CLI, devi scaricare, installare e inizializzare gcloud CLI.

Scarica l'SDK

Se hai già installato Google Cloud CLI e vuoi configurarlo in modo da utilizzare un ID progetto Google Cloud diverso da quello con cui l'hai inizializzato, consulta Gestire le configurazioni di gcloud CLI CLI.

Utilizzo di un proxy

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

Esegui i seguenti 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.

Eseguire il deployment di un'app

Per eseguire il deployment dell'app in App Engine, utilizza lo strumento di compilazione Maven (opzione consigliata) o il comando gcloud app deploy dalla directory radice dell'applicazione.

Per eseguire il deployment dell'app con lo strumento di compilazione Maven, esegui il seguente comando dalla directory di primo livello del progetto, in cui si trova il file pom.xml:

mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud. Se il tuo file pom.xml specifica già il tuo ID progetto, non devi includere la proprietà -Dapp.deploy.projectId nel comando eseguito.

Utilizzo della riga di comando gcloud

  gcloud app deploy [CONFIGURATION_FILES]

Sostituisci [CONFIGURATION_FILES] con il percorso di uno o più file di configurazione. Utilizza un singolo spazio per separare i percorsi.

Flag facoltativi:

  • --version: specifica un ID versione personalizzato. Se non specifichi un ID versione, App Engine ne genera uno.
  • --no-promote: esegui il deployment dell'app senza inoltrare 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 rispetto a quello inizializzato come predefinito in gcloud CLI.

Per ulteriori informazioni, consulta la documentazione di riferimento di gcloud app deploy o esegui gcloud help dalla riga di comando.

Scegliere ID versione univoci

Per le istanze con scalabilità manuale, l'ID della versione deve iniziare con una lettera per distinguerle dagli ID istanza numerici. In questo modo, le richieste vengono indirizzate alla destinazione corretta ed è possibile evitare l'ambiguità con i pattern URL come 123-dot-my-service.[REGION_ID].r.appspot.com, che può essere interpretato 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 un nome alle versioni come preferisci per le istanze configurate per la scalabilità automatica o la scalabilità di base perché il targeting di queste istanze non è supportato.

Deployment di più applicazioni di servizio

Quando l'applicazione viene presa in considerazione in più servizi, puoi eseguire il deployment e l'aggiornamento dei 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 del codice sorgente nelle versioni corrispondenti.

Ad esempio, puoi eseguire il deployment e creare due versioni in App Engine, in cui ogni versione viene eseguita nel proprio servizio. La prima versione funge da servizio frontend e l'altra da backend della tua 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

Utilizzi gli stessi comandi di deployment per eseguire il deployment e l'aggiornamento dei vari servizi della tua 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 appengine-web.xml file di configurazione della versione corrispondente. Per specificare l'ID servizio, includi la definizione dell'elemento module: [YOUR_SERVICE_ID] in ogni file di configurazione. Per impostazione predefinita, l'esclusione di questa definizione di elemento dal file di configurazione consente di eseguire il deployment della versione nel servizio default.

  • Per eseguire il deployment di più servizi contemporaneamente, devi specificare tutti i file di configurazione appengine-web.xml corrispondenti nel comando di deployment. Il servizio default deve essere elencato per primo.

Per eseguire il deployment di più servizi

Dalla directory principale dell'applicazione in cui si trovano i file di configurazione, esegui il comando di deployment e specifica i percorsi relativi e i nomi dei file per il file appengine-web.xml di ciascun servizio.

Utilizzo dello strumento di compilazione Maven

Se la directory principale del progetto contiene solo i tuoi servizi, puoi eseguire il deployment di tutti questi servizi con un unico comando Maven.

Il comando di deployment di Maven esegue l'iterazione di ciascun servizio del progetto per locate i relativi file di configurazione e poi esegue il deployment di ciascun servizio.

Per eseguire il deployment di più servizi utilizzando il plug-in Maven:

  1. Assicurati che appengine-maven-plugin sia stato aggiunto al filepom.xml principale.
  2. Esegui questo comando:

    mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

    Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud. Se il tuo file pom.xml specifica già il tuo ID progetto, non devi includere la proprietà -Dapp.deploy.projectId nel comando eseguito.

Utilizzo di gcloud

    gcloud app deploy [CONFIGURATION_FILES]

Sostituisci [CONFIGURATION_FILES] con il percorso di uno o più file di configurazione. Utilizza un singolo spazio per separare i percorsi.

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

Visualizzazione dei log di build

Cloud Build esegue lo streaming dei log di compilazione e deployment che sono visibili nella sezione Cronologia di Cloud Build della console Google Cloud. Per visualizzare le build nella regione dell'app, utilizza il menu a discesa Regione nella parte superiore della pagina per scegliere la regione in base alla quale applicare il filtro.

Aggiornamento degli indici

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

La creazione di tutti gli indici da parte di Datastore può richiedere un po' di tempo, 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 il tempo necessario per la creazione di tutti gli indici, ad esempio:

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

    1. Carica il file index.xml in Datastore:

      gcloud datastore indexes create index.yaml
      Per informazioni, consulta la sezione di riferimento 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 gli indici prima di eseguire la migrazione o suddividere il traffico nella tua versione:

    1. Definisci un nuovo ID versione nel file appengine-web.xml dell'app.
    2. Esegui il deployment della nuova versione.
    3. Utilizza la console Google Cloud per monitorare lo stato di tutti i tuoi index:

      Vai alla pagina Datastore

    4. 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 Configurare gli indici di 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 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.
Command not found
Consulta Utilizzare il server di sviluppo locale per istruzioni su come configurare lo strumento del server di sviluppo locale.
Import Error
Se hai installato sia l'interfaccia alla gcloud CLI sia l'SDK App Engine originale, le voci del PATH potrebbero entrare in conflitto tra loro e causare errori di importazione. Se hai ricevuto errori durante l'esecuzione dei comandi gcloud CLI, segui le istruzioni per l'esecuzione del 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 default servizio. Per maggiori dettagli su come eseguire il deployment di una versione nel servizio default, consulta Eseguire il deployment di più applicazioni di servizio.
Too Many Versions (403)
App Engine ha un limite al numero di versioni di cui è stato eseguito il deployment della tua applicazione. Questi valori sono diversi per le applicazioni gratuite e quelle di cui è stato eseguito il deployment. Puoi utilizzare la console Google Cloud per eliminare una versione precedente e caricare il codice più recente. You do not have permission to modify this app (403)
Questo può verificarsi quando l'account con cui hai eseguito l'autenticazione non ha l'autorizzazione per eseguire il deployment nell'ID applicazione specificato nel comando o in appengine-web.xml. Verifica che l'ID applicazione sia preciso e corrisponda al valore dell'ID progetto della console Google Cloud. Successivamente, controlla le autorizzazioni del progetto nella console e verifica che il tuo account sia elencato con un livello di autorizzazione sufficiente per consentire il deployment delle app.
[13] An internal error occurred while creating a Cloud Storage bucket.

App Engine crea un bucket Cloud Storage multiregionale predefinito per tuo conto nella stessa regione in cui è stata creata l'applicazione. Questo bucket è necessario per archiviare i contenuti della tua applicazione. Questo errore viene visualizzato quando non è possibile creare il 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 name non valida sotto la chiave vpc_access_connector. Assicurati che il campo name contenga il progetto e la regione corretti in cui è stato creato il connettore di accesso VPC serverless.

Se il problema persiste dopo aver verificato che la configurazione di app.yaml sia valida, utilizza Google Cloud SDK per eseguire nuovamente il deployment del servizio, aggiungendo il --verbosity=debug flag 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 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.

Passaggi successivi