Questo tutorial mostra come gestire le sessioni su Cloud Run.
Molte app richiedono la gestione delle sessioni per l'autenticazione e le preferenze utente. Il framework Jetty include un'implementazione basata sulla memoria per eseguire questa funzione. Tuttavia, questa implementazione non è adatta a un'app che può essere pubblicata da più istanze, perché la sessione registrata in un'istanza potrebbe differire da altre istanze. Questo tutorial mostra come gestire le sessioni su Cloud Run.
Obiettivi
- Scrivi l'app.
- Esegui l'app localmente.
- Esegui il deployment dell'app su Cloud Run.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.
Prima di iniziare
- Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Firestore API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Nella console Google Cloud , apri l'app in Cloud Shell.
Cloud Shell fornisce l'accesso da riga di comando alle risorse cloud direttamente dal browser. Apri Cloud Shell nel browser e fai clic su Continua per scaricare il codice campione e modificare la directory dell'app.
-
In Cloud Shell, configura gcloud CLI in modo da utilizzare
il nuovo progetto Google Cloud :
# Configure gcloud for your project gcloud config set project YOUR_PROJECT_ID
-
Aggiorna Maven in modo che utilizzi Java 11 per impostazione predefinita:
Quando richiesto, inserisci il numero per selezionare Java 11. Prendi nota del percorso elencato per quella versione.sudo update-alternatives --config java
- Esporta il percorso che hai copiato nel passaggio precedente come variabile di ambiente:
export JAVA_HOME=java-11-path
L'app web
Questa app mostra saluti in lingue diverse per ogni utente. Gli utenti che tornano sul sito vengono sempre accolti nella stessa lingua.
Prima che la tua app possa memorizzare le preferenze di un utente, devi disporre di un modo per memorizzare
le informazioni sull'utente corrente in una sessione. Questa app di esempio utilizza un
WebFilter per recuperare e aggiornare i dati di sessione in Firestore.
Il seguente diagramma illustra come Firestore gestisce le sessioni per l'app Cloud Run.
HttpServletRequest utilizza un cookie per archiviare un ID univoco per la sessione locale, che corrisponde a un documento in Firestore con i dettagli della sessione.
Eliminazione delle sessioni
Firestore non elimina le sessioni vecchie o scadute. Puoi eliminare i dati di sessione nella consoleGoogle Cloud o implementare una strategia di eliminazione automatica. Se utilizzi soluzioni di archiviazione per le sessioni come Memcache o Redis, le sessioni scadute vengono eliminate automaticamente.
Esecuzione in locale
Avvia il server HTTP:
mvn jetty:runVisualizza l'app nel browser web:
Cloud Shell
Nella barra degli strumenti di Cloud Shell, fai clic su Anteprima web
e seleziona Anteprima sulla porta 8080.Macchina locale
Nel browser, vai a
http://localhost:8080Viene visualizzato uno dei cinque saluti: "Hello World", "Hallo Welt", "Hola mundo", "Salut le Monde" o "Ciao Mondo". La lingua cambia se apri la pagina in un browser diverso o in modalità di navigazione in incognito. Puoi visualizzare e modificare i dati della sessione nella consoleGoogle Cloud .

Per arrestare il server HTTP, premi
Control+Cnella finestra del terminale.
Deployment ed esecuzione su Cloud Run
Puoi utilizzare Cloud Run per creare ed eseguire il deployment di un'app che funziona in modo affidabile anche se sottoposta a un carico elevato e con grandi quantità di dati.
Nella finestra del terminale, crea ed esegui il deployment di un'immagine del codice in Google Container Registry (GCR) con il plug-in Maven Jib.
mvn clean package jib:build
Esegui il deployment dell'app in Cloud Run:
gcloud beta run deploy session-handling --image gcr.io/MY_PROJECT/session-handling
--platform managed --region us-central1 --memory 512MSostituisci
MY_PROJECTcon l'ID del progettoGoogle Cloud che hai creato. Visita l'URL restituito da questo comando per vedere come i dati di sessione vengono mantenuti tra i caricamenti di pagina.
Esecuzione del debug dell'app
Se non riesci a connetterti alla tua app Cloud Run, controlla quanto segue:
- Verifica che i comandi di deployment
gcloudsiano stati completati correttamente e non abbiano generato errori. Se si sono verificati errori (ad esempio,message=Build failed), correggili e prova a eseguire di nuovo il deployment dell'app Cloud Run. Nella console Google Cloud , vai alla pagina Esplora log.
Nell'elenco a discesa Risorse selezionate di recente, fai clic su Applicazione Cloud Run, quindi fai clic su Tutti i module_id. Viene visualizzato un elenco di richieste relative alle tue visite all'app. Se non vedi un elenco di richieste, verifica di aver selezionato Tutti i module_id dall'elenco a discesa. Se visualizzi messaggi di errore stampati nella consoleGoogle Cloud , verifica che il codice dell'app corrisponda al codice nella sezione relativa alla scrittura dell'app web.
Assicurati che l'API Firestore sia abilitata.
Esegui la pulizia
Elimina il progetto
- Nella console Google Cloud , vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona quello che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Elimina l'istanza Cloud Run
Elimina il servizio da Cloud Run.
- Nella console Google Cloud , vai alla pagina Servizi per Cloud Run.
- Seleziona il servizio che vuoi eliminare.
- Fai clic su Elimina delete per eliminare il servizio.
Passaggi successivi
- Prova altri tutorial su Cloud Run Functions.
- Prova Cloud Run, che ti consente di eseguire container stateless in un ambiente completamente gestito o nel tuo cluster Google Kubernetes Engine.