Creare un'app con runtime personalizzato nell'ambiente flessibile di App Engine

ID regione

Il REGION_ID è un codice abbreviato che Google assegna 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 App Engine. Per le app esistenti create prima di questa data, l'ID regione è facoltativo nell'URL.

I runtime personalizzati consentono di creare app che vengono eseguite in un ambiente definito da un Dockerfile. Utilizzando un Dockerfile, puoi utilizzare linguaggi e pacchetti che non fanno parte di Google Cloud e utilizzare le stesse risorse e gli stessi strumenti utilizzati nell'ambiente flessibile di App Engine.

In questa guida rapida, viene avviato un server web nginx su App Engine utilizzando un runtime personalizzato.

Prima di iniziare

Prima di eseguire l'app di esempio in questa guida rapida, devi configurare il tuo ambiente e creare un nuovo progetto Google Cloud per App Engine:

  1. Crea un nuovo progetto Google Cloud utilizzando la console Google Cloud :

    1. Apri la console Google Cloud :

      Vai a Progetti

    2. Fai clic su Crea progetto e poi assegna un nome al nuovo progetto. Google Cloud

    3. Abilita la fatturazione nel tuo nuovo progetto Google Cloud creando un nuovo account di fatturazione o impostandone uno esistente:

      Vai a Fatturazione

  2. Scarica e installa Google Cloud CLI, quindi inizializza gcloud CLI:

    Scaricare l'SDK

  3. Esegui il seguente comando gcloud per creare un'applicazione App Engine e specifica in quale regione geografica vuoi che venga eseguita l'app:

    gcloud app create
    
  4. A causa delle modifiche al comportamento predefinito per il modo in cui Cloud Build utilizza i service account nei nuovi progetti e delle modifiche ai criteri dell'organizzazione sicuri per impostazione predefinita, potresti dover concedere ruoli aggiuntivi al account di servizio di deployment. Per ulteriori informazioni sulla concessione di ruoli specifici, consulta la guida alla risoluzione dei problemi.

Località App Engine

App Engine è regionale, il che significa che l'infrastruttura che esegue le tue app si trova in una regione specifica e Google la gestisce in modo che sia disponibile in modo ridondante in tutte le zone all'interno di quella regione.

Soddisfare i requisiti di latenza, disponibilità o durabilità è il fattore principale per la selezione della regione in cui vengono eseguite le tue app. In genere puoi selezionare la regione più vicina agli utenti della tua app, ma devi considerare le posizioni in cui è disponibile App Engine e le posizioni degli altri Google Cloud prodotti e servizi utilizzati dalla tua app. L'utilizzo di servizi in più località può influire sulla latenza della tua app e sui relativi prezzi.

Non puoi modificare la regione di un'app dopo averla impostata.

Se hai già creato un'applicazione App Engine, puoi visualizzarne la regione eseguendo una delle seguenti operazioni:

scarica l'app Hello World

  1. Scegli una delle seguenti opzioni per scaricare l'app di esempio Hello World da GitHub al tuo computer locale:

    • Clona l'app di esempio Hello World dal seguente repository:

      git clone https://github.com/GoogleCloudPlatform/appengine-custom-runtimes-samples
      
    • Scarica il campione come file .zip ed estrailo in una directory locale.

  2. Vai alla directory nginx in cui si trova il codice campione, ad esempio:

    cd appengine-custom-runtimes-samples/nginx
    

Esecuzione di Hello World sulla macchina locale

Puoi testare l'app di esempio scaricando e installando Docker, quindi eseguendo il container Hello World sulla tua macchina locale.

Non sono previsti passaggi specifici di App Engine, quindi puoi testare l'app di esempio utilizzando gli strumenti e l'approccio che preferisci.

Deployment di Hello World in App Engine

Quando è tutto pronto per eseguire il deployment dell'app di esempio su App Engine, procedi nel seguente modo:

  1. Dalla directory in cui si trovano app.yaml e Dockerfile, esegui questo comando:

    gcloud app deploy
    

    Scopri di più sui flag facoltativi.

  2. Per visualizzare l'app in esecuzione all'indirizzo https://PROJECT_ID.REGION_ID.r.appspot.com, esegui il seguente comando per avviare il browser:

    gcloud app browse
    

Flag dei comandi gcloud comuni

  • Includi il flag --version per specificare un ID che identifichi in modo univoco quella versione della tua app. In caso contrario, ne verrà generato uno per te. Esempio: --version [YOUR_VERSION_ID]
  • Includi il flag --project per specificare un ID progetto Google Cloud alternativo a quello inizializzato come predefinito nello strumento gcloud. Esempio: --project [YOUR_PROJECT_ID]

Esempio:

gcloud app deploy --version pre-prod-5 --project my-sample-app

Per scoprire di più sul deployment dell'app dalla riga di comando, consulta Test e deployment dell'app. Per un elenco di tutti i flag dei comandi, consulta la documentazione di riferimento di gcloud app deploy.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, segui questi passaggi.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Passaggi successivi

Scopri di più sui Dockerfile nel riferimento Dockerfile.

Per informazioni su come creare un runtime personalizzato, consulta Creazione di runtime personalizzati.

Revisione del codice

Hello World è l'app App Engine più semplice possibile, in quanto crea un singolo container che esegue un solo servizio e una sola versione. Questa sezione descrive in dettaglio ciascuno dei file dell'app.

app.yaml

Specifica la configurazione dell'app. Il file app.yaml deve trovarsi nella stessa directory del file Dockerfile.

runtime: custom
env: flex

La voce runtime: custom indica ad App Engine di cercare un Dockerfile che definirà l'immagine del runtime e env: flex specifica che stai eseguendo il deployment nell'ambiente flessibile.

Per ulteriori informazioni, consulta il riferimento app.yaml.

Dockerfile

Definisce l'insieme di istruzioni utilizzate per creare l'immagine Docker per il container dell'app di esempio. Il file Dockerfile deve trovarsi nella stessa directory del file app.yaml. Questo Dockerfile installa il server web nginx e copia alcune configurazioni di base:

# The standard nginx container just runs nginx. The configuration file added
# below will be used by nginx.
FROM nginx

# Copy the nginx configuration file. This sets up the behavior of nginx, most
# importantly, it ensure nginx listens on port 8080. Google App Engine expects
# the runtime to respond to HTTP requests at port 8080.
COPY nginx.conf /etc/nginx/nginx.conf

# create log dir configured in nginx.conf
RUN mkdir -p /var/log/app_engine

# Create a simple file to handle health checks. Health checking can be disabled
# in app.yaml, but is highly recommended. Google App Engine will send an HTTP
# request to /_ah/health and any 2xx or 404 response is considered healthy.
# Because 404 responses are considered healthy, this could actually be left
# out as nginx will return 404 if the file isn't found. However, it is better
# to be explicit.
RUN mkdir -p /usr/share/nginx/www/_ah && \
    echo "healthy" > /usr/share/nginx/www/_ah/health

# Finally, all static assets.
ADD www/ /usr/share/nginx/www/
RUN chmod -R a+r /usr/share/nginx/www

Il comando FROM crea un'immagine di base utilizzando l'immagine Docker ufficiale per il server web nginx.

Utilizzando questo Dockerfile, l'immagine container conterrà nginx e tutti i contenuti della directory www/ saranno disponibili per la tua applicazione.

L'app di esempio Hello World include anche un file nginx.conf, che contiene le informazioni di configurazione di base di nginx, nonché il file index.html, che funge da pagina radice per il server web nginx.