Introduzione ad App Engine (Python 3)

1. Panoramica

befa7a877ccdd35d.png

Le applicazioni Google App Engine sono facili da creare e da gestire e da scalare, man mano che cambiano le esigenze di traffico e archiviazione dei dati. Con App Engine, non ci sono server da mantenere. Non devi fare altro che caricare la tua richiesta ed è pronta per iniziare.

In questo codelab, imparerai a eseguire il deployment di una semplice app web Python scritta con il framework web Flask. Anche se questo esempio utilizza Flask, puoi usare altri framework web, tra cui Django, Pyramid, Bottle e web.py.

Questo tutorial è adattato da https://cloud.google.com/appengine/docs/standard/python3/quickstart

Obiettivi didattici

  • Come creare un semplice server Python su Google App Engine.
  • Come aggiornare il codice senza disattivare il server.

Che cosa ti serve

  • Dimestichezza nell'utilizzo di Python
  • Familiarità con gli editor di testo standard di Linux, ad esempio vim, emacs o nano.

Sondaggio

Come utilizzerai questo tutorial?

Solo lettura Leggilo e completa gli esercizi

Come valuteresti la tua esperienza con Python?

Principiante Livello intermedio Eccellente

Come giudichi la tua esperienza con i servizi Google Cloud?

Principiante Livello intermedio Eccellente

2. Configurazione e requisiti

Configurazione dell'ambiente da seguire in modo autonomo

  1. Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Il Nome progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarla.
  • L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca. di solito non ti importa cosa sia. Nella maggior parte dei codelab, dovrai fare riferimento al tuo ID progetto (in genere identificato come PROJECT_ID). Se l'ID generato non ti soddisfa, potresti generarne un altro casuale. In alternativa, puoi provarne una personalizzata per verificare se è disponibile. Non può essere modificato dopo questo passaggio e rimane per tutta la durata del progetto.
  • Per informazione, c'è un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare risorse/API Cloud. L'esecuzione di questo codelab non ha alcun costo. Per arrestare le risorse ed evitare di incorrere in fatturazione dopo questo tutorial, puoi eliminare le risorse che hai creato o eliminare il progetto. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.

Avvia Cloud Shell

Mentre Google Cloud può essere utilizzato da remoto dal tuo laptop, in questo codelab utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

Attiva Cloud Shell

  1. Dalla console Cloud, fai clic su Attiva Cloud Shell 853e55310c205094.png.

3c1dabeca90e44e5.png

Se è la prima volta che avvii Cloud Shell, ti verrà mostrata una schermata intermedia che descrive di cosa si tratta. Se ti è stata presentata una schermata intermedia, fai clic su Continua.

9c92662c6a846a5c.png

Il provisioning e la connessione a Cloud Shell dovrebbero richiedere solo qualche istante.

9f0e51b578fecce5.png

Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Gran parte, se non tutto, del lavoro in questo codelab può essere svolto con un browser.

Una volta stabilita la connessione a Cloud Shell, dovresti vedere che hai eseguito l'autenticazione e che il progetto è impostato sul tuo ID progetto.

  1. Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list

Output comando

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Esegui questo comando in Cloud Shell per confermare che il comando gcloud è a conoscenza del tuo progetto:
gcloud config list project

Output comando

[core]
project = <PROJECT_ID>

In caso contrario, puoi impostarlo con questo comando:

gcloud config set project <PROJECT_ID>

Output comando

Updated property [core/project].

3. Scrivi l'app web

Dopo l'avvio di Cloud Shell, puoi utilizzare la riga di comando per richiamare il comando gcloud di Cloud SDK o altri strumenti disponibili nell'istanza della macchina virtuale. Puoi utilizzare la directory $HOME nello spazio di archiviazione su disco permanente per archiviare i file di diversi progetti e tra sessioni di Cloud Shell. La directory $HOME è privata e non è accessibile ad altri utenti.

Inizia creando una nuova cartella nella directory $HOME per l'applicazione:

mkdir ~/helloworld
cd ~/helloworld

Crea un file denominato main.py:

touch main.py

Modifica il file con il tuo editor della riga di comando preferito (nano, vim o emacs) o facendo clic sul pulsante Editor di Cloud Shell:

10af7b1a6240e9f4.gif

Per modificare direttamente il file con l'editor di Cloud Shell, utilizza questo comando:

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    return "Hello World!\n"


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

4. Definisci le dipendenze

Per specificare le dipendenze dell'app web, torna al terminale e crea un file requirements.txt nella directory radice del progetto, con la versione esatta di Flask da utilizzare:

touch requirements.txt

Per modificare il file con l'editor di Cloud Shell, utilizza questo comando:

cloudshell edit requirements.txt

requirements.txt

# https://pypi.org/project/Flask
Flask==3.0.2

5. Configura il deployment

Per eseguire il deployment della tua app web in App Engine, ti serve un file app.yaml. Questo file di configurazione definisce le impostazioni dell'app web per App Engine.

Dal terminale, crea e modifica il file app.yaml nella directory radice del tuo progetto:

touch app.yaml

Per modificare il file con l'editor di Cloud Shell, utilizza questo comando:

cloudshell edit app.yaml

app.yaml

runtime: python312

6. Esegui il deployment dell'app web

Dal terminale, controlla il contenuto della directory:

ls

Dovresti avere i 3 file seguenti:

app.yaml  main.py  requirements.txt

Esegui il deployment della tua app web con questo comando:

gcloud app deploy

La prima volta, devi scegliere una regione di deployment:

Please choose the region where you want your App Engine application
located:

 [1] asia-east2
...
 [7] australia-southeast1
 [8] europe-west
 [9] europe-west2
...
 [12] northamerica-northeast1
 [13] southamerica-east1
...
 [19] us-west4
...
Please enter your numeric choice:

Conferma per avviare il deployment:

Creating App Engine application in project [PROJECT_ID] and region [REGION]....done.
Services to deploy:

descriptor:      [~/helloworld/app.yaml]
source:          [~/helloworld]
target project:  [PROJECT_ID]
target service:  [default]
target version:  [YYYYMMDDtHHMMSS]
target url:      [https://PROJECT_ID.REGION_ID.r.appspot.com]

Do you want to continue (Y/n)?

È stato eseguito il deployment della tua app:

Beginning deployment of service [default]...
Created .gcloudignore file. See `gcloud topic gcloudignore` for details.
Uploading 3 files to Google Cloud Storage
100%
File upload done.
Updating service [default]...done.     
Setting traffic split for service [default]...done.
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

La tua app web è ora pronta a rispondere alle richieste HTTP su https://PROJECT_ID.REGION_ID.r.appspot.com.

7. Testa l'app web

La tua app web è pronta a rispondere alle richieste HTTP su https://PROJECT_ID.REGION_ID.r.appspot.com.

Innanzitutto, recupera il nome host dell'app web con il comando gcloud app describe:

APPENGINE_HOSTNAME=$(gcloud app describe --format "value(defaultHostname)")

Testa l'app web con questa semplice richiesta GET HTTP:

curl https://$APPENGINE_HOSTNAME

Dovresti ricevere la seguente risposta:

Hello World!

Riepilogo

Nei passaggi precedenti, hai configurato un'app web Python semplice, hai eseguito l'applicazione e ne hai eseguito il deployment su App Engine.

8. Aggiorna l'app web

Modifica l'app web cambiando il corpo della funzione hello() nel file main.py.

Per modificare il file con l'editor di Cloud Shell, utilizza questo comando:

cloudshell edit main.py

main.py

import flask

# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)


@app.get("/")
def hello():
    """Return a friendly HTTP greeting."""
    # return "Hello World!\n"  # ← Replace this line
    who = flask.request.args.get("who", "World")
    return f"Hello {who}!\n"


if __name__ == "__main__":
    # Used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="localhost", port=8080, debug=True)

Dal terminale, esegui nuovamente il deployment per aggiornare la tua app web:

gcloud app deploy --quiet

Viene eseguito il deployment della nuova versione dell'app:

Beginning deployment of service [default]...
Uploading 1 file to Google Cloud Storage 
...
Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]

Testa la nuova versione dell'app web, esattamente come hai fatto in precedenza:

curl https://$APPENGINE_HOSTNAME

Dovresti ottenere la stessa risposta:

Hello World!

Provala con il parametro facoltativo:

curl https://$APPENGINE_HOSTNAME?who=Universe

Dovresti ricevere la seguente risposta:

Hello Universe!

Riepilogo

In questo passaggio, hai aggiornato e rieseguito il deployment della tua app web senza alcuna interruzione del servizio.

9. Complimenti!

Hai imparato a scrivere la tua prima applicazione web App Engine in Python.

Scopri di più

Licenza

Questo lavoro è concesso in licenza ai sensi di una licenza Creative Commons Attribution 2.0 Generic.