1. Panoramica

Le applicazioni Google App Engine sono facili da creare, gestire e scalare in base alle esigenze di traffico e spazio di archiviazione dei dati. Con App Engine, non ci sono server da mantenere. Ti basterà caricare la tua applicazione e sarà pronta per l'uso.
In questo codelab imparerai a eseguire il deployment di una semplice app web Python scritta con il framework web Flask. Sebbene questo esempio utilizzi Flask, puoi utilizzare 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
- Familiarità con l'utilizzo di Python
- Familiarità con gli editor di testo standard di Linux, ad esempio vim, emacs o nano
Sondaggio
Come utilizzerai questo tutorial?
Come valuteresti la tua esperienza con Python?
Come valuteresti la tua esperienza con i servizi Google Cloud?
2. Configurazione e requisiti
Configurazione dell'ambiente autonomo
- 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.



- Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarlo.
- L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo l'impostazione). La console Cloud genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere identificato come
PROJECT_ID). Se l'ID generato non ti piace, puoi generarne un altro casuale. In alternativa, puoi provare a crearne uno e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimane per tutta la durata del progetto. - Per tua informazione, esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. Completare questo codelab non costa molto, se non nulla. Per arrestare le risorse ed evitare addebiti oltre a quelli previsti in questo tutorial, puoi eliminare le risorse che hai creato o il progetto. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.
Avvia Cloud Shell
Sebbene Google Cloud possa essere gestito da remoto dal tuo laptop, in questo codelab utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.
Attiva Cloud Shell
- Nella console Cloud, fai clic su Attiva Cloud Shell
.

Se è la prima volta che avvii Cloud Shell, viene visualizzata una schermata intermedia che ne descrive le funzionalità. Se è stata visualizzata una schermata intermedia, fai clic su Continua.

Bastano pochi istanti per eseguire il provisioning e connettersi a Cloud Shell.

Questa macchina virtuale è 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 e l'autenticazione della rete. Gran parte del lavoro per questo codelab, se non tutto, può essere svolto con un browser.
Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è autenticato e il progetto è impostato sul tuo ID progetto.
- 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`
- Esegui questo comando in Cloud Shell per verificare che il comando gcloud conosca il 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 oppure altri strumenti disponibili nell'istanza della macchina virtuale. Puoi utilizzare la directory $HOME nello spazio di archiviazione su disco permanente per archiviare file associati a progetti diversi e in sessioni di Cloud Shell distinte. La directory $HOME è riservata esclusivamente a te e non è accessibile da 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:

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 della tua app web, torna al terminale e crea un file requirements.txt nella directory principale del tuo 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, devi disporre di un file app.yaml. Questo file di configurazione definisce le impostazioni della tua app web per App Engine.
Dal terminale, crea e modifica il file app.yaml nella directory root del 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 seguenti tre file:
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)?
Il deployment dell'app viene eseguito:
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. Testare 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 della tua app web con il comando gcloud app describe:
APPENGINE_HOSTNAME=$(gcloud app describe --format "value(defaultHostname)")
Testa la tua app web con questa semplice richiesta HTTP GET:
curl https://$APPENGINE_HOSTNAME
Dovresti ricevere la seguente risposta:
Hello World!
Riepilogo
Nei passaggi precedenti, hai configurato, eseguito e implementato una semplice app web Python su App Engine.
8. Aggiornare l'app web
Modifica la tua 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 di nuovo il deployment per aggiornare l'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 della tua app web, esattamente come hai fatto in precedenza:
curl https://$APPENGINE_HOSTNAME
Dovresti ricevere la stessa risposta:
Hello World!
Testalo 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 interruzioni del servizio.
9. Complimenti!
Hai imparato a scrivere la tua prima applicazione web App Engine in Python.
Scopri di più
- Documentazione di App Engine: https://cloud.google.com/appengine
- Consulta questo tutorial per scrivere un'app Python completa su App Engine: https://cloud.google.com/appengine/docs/standard/python3/building-app
Licenza
Questo lavoro è concesso in licenza ai sensi di una licenza Creative Commons Attribution 2.0 Generic.