Molte app devono eseguire l'elaborazione in background al di fuori del contesto di una richiesta web. Questo tutorial crea un'app web che consente agli utenti di inserire il testo da tradurre e poi visualizza un elenco delle traduzioni precedenti. La traduzione viene eseguita in un processo in background per evitare di bloccare la richiesta dell'utente.
Il seguente diagramma illustra il processo di richiesta di traduzione.
Di seguito è riportata la sequenza di eventi per il funzionamento dell'app del tutorial:
- Visita la pagina web per visualizzare un elenco delle traduzioni precedenti, archiviate in Firestore.
- Richiedi la traduzione del testo inserendo un modulo HTML.
- La richiesta di traduzione viene pubblicata su Pub/Sub.
- Viene attivato un servizio Cloud Run sottoscritto a quell'argomento Pub/Sub.
- Il servizio Cloud Run utilizza Cloud Translation per tradurre il testo.
- Il servizio Cloud Run archivia il risultato in Firestore.
Questo tutorial è rivolto a chiunque sia interessato a scoprire l'elaborazione in background con Google Cloud. Non è richiesta alcuna esperienza pregressa con Pub/Sub, Firestore, Cloud Run. Tuttavia, per comprendere tutto il codice, è utile avere una certa esperienza con Java e HTML.
Obiettivi
- Comprendere ed eseguire il deployment di un servizio Cloud Run.
- Provare l'app.
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 Google Cloud account. 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, Pub/Sub, and Cloud Translation APIs.
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.-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
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, Pub/Sub, and Cloud Translation APIs.
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.-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Aggiorna i componenti
gcloud:gcloud components update
- Prepara l'ambiente di sviluppo.
Preparare l'app
Nella finestra del terminale, clona il repository dell'app di esempio sulla tua macchina locale:
git clone https://github.com/GoogleCloudPlatform/getting-started-java.git
In alternativa puoi scaricare l'esempio come file ZIP ed estrarlo.
Passa alla directory che contiene il codice campione per l'elaborazione in background:
cd getting-started-java/background
Comprendere l'app
Esistono due componenti principali per l'app web:
- Un server HTTP Java per gestire le richieste web. Il server ha i seguenti due endpoint:
/translateGET(utilizzando un browser web): visualizza le 10 richieste di traduzione elaborate più recenti inviate dagli utenti.POST(con una sottoscrizione Pub/Sub): elabora le richieste di traduzione utilizzando l'API Cloud Translation e archivia i risultati in Firestore.
/create: il modulo per inviare nuove richieste di traduzione.
- Client di servizi che elaborano le richieste di traduzione inviate dal modulo web. Esistono tre client che funzionano insieme:
- Pub/Sub: quando un utente invia il modulo web, il client Pub/Sub pubblica un messaggio con i dettagli della richiesta. Una sottoscrizione creata in questo tutorial inoltra questi messaggi all'endpoint Cloud Run che crei per eseguire le traduzioni.
- Traduzione: questo client gestisce le richieste Pub/Sub eseguendo le traduzioni.
- Firestore: al termine della traduzione, questo client archivia i dati della richiesta insieme alla traduzione in Firestore. Questo client legge anche le richieste più recenti sull'endpoint
/translateprincipale.
Comprendere il codice Cloud Run
L'app Cloud Run ha dipendenze da Firestore, Translation e Pub/Sub.
I client globali Firestore, Translation e Pub/Sub vengono inizializzati in modo che possano essere riutilizzati tra le chiamate. In questo modo, non devi inizializzare nuovi client per ogni chiamata, il che rallenterebbe l'esecuzione.
Il gestore dell'indice (
/) recupera tutte le traduzioni esistenti da Firestore e compila un modello HTML con l'elenco:Le nuove traduzioni vengono richieste inviando un modulo HTML. Il gestore della traduzione delle richieste, registrato in
/create, analizza l'invio del modulo, convalida la richiesta e pubblica un messaggio su Pub/Sub:La sottoscrizione Pub/Sub che crei inoltra queste richieste all'endpoint Cloud Run, che analizza il messaggio Pub/Sub per recuperare il testo da tradurre e la lingua di destinazione desiderata. L'API Translation traduce quindi la stringa nella lingua selezionata.
L'app archivia i dati di traduzione in un nuovo documento creato in Firestore.
Eseguire il deployment dell'app Cloud Run
Scegli un nome argomento Pub/Sub e genera un token di verifica Pub/Sub utilizzando
uuidgeno un generatore UUID online come uuidgenerator.net. Questo token garantirà che l'endpoint Cloud Run accetti solo le richieste dalla sottoscrizione Pub/Sub che crei.export PUBSUB_TOPIC=background-translate export PUBSUB_VERIFICATION_TOKEN=your-verification-token
Crea un argomento Pub/Sub:
gcloud pubsub topics create $PUBSUB_TOPIC- Sostituisci
MY_PROJECTnel filepom.xmlcon l'ID Google Cloud progetto.
- Sostituisci
Crea ed esegui il deployment di un'immagine del codice in GCR (un repository di immagini) con il plug-in Jib Maven.
mvn clean package jib:buildEsegui il deployment dell'app in Cloud Run:
gcloud run deploy background --image gcr.io/MY_PROJECT/background \ --platform managed --region us-central1 --memory 512M \ --update-env-vars PUBSUB_TOPIC=$PUBSUB_TOPIC,PUBSUB_VERIFICATION_TOKEN=$PUBSUB_VERIFICATION_TOKEN
Dove
MY_PROJECTè il nome del Google Cloud progetto che hai creato. Questo comando restituisce l'endpoint a cui la sottoscrizione Pub/Sub invia le richieste di traduzione. Prendi nota di questo endpoint, perché ti servirà per creare la sottoscrizione Pub/Sub e lo visiterai in un browser per richiedere una nuova traduzione.
Testare l'app
Dopo aver eseguito il deployment del servizio Cloud Run, prova a richiedere una traduzione.
Per visualizzare l'app nel browser, vai all'endpoint Cloud Run che hai creato in precedenza.
È presente una pagina con un elenco vuoto di traduzioni e un modulo per richiedere nuove traduzioni.
Fai clic su + Richiedi traduzione, compila il modulo di richiesta e poi fai clic su Invia.
L'invio ti riporta automaticamente al percorso
/translate, ma la nuova traduzione potrebbe non essere ancora visualizzata. Per aggiornare la pagina, fai clic su Aggiorna refresh. Nell'elenco delle traduzioni è presente una nuova riga. Se non vedi una traduzione, attendi qualche secondo e riprova. Se ancora non vedi una traduzione, consulta la sezione successiva relativa al debug dell'app.
Eseguire il debug dell'app
Se non riesci a connetterti al servizio Cloud Run o non vedi nuove traduzioni, controlla quanto segue:
Verifica che il comando
gcloud run deploysia stato completato correttamente e non abbia generato errori. Se si sono verificati errori (ad esempio,message=Build failed), correggili e prova a eseguire di nuovo il comando.Controlla la presenza di errori nei log:
Nella Google Cloud console, vai alla pagina Cloud Run.
Fai clic sul nome del servizio,
background.Fai clic su Log.
Libera spazio
Elimina il progetto
- Nella Google Cloud console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID progetto e fai clic su Chiudi per eliminare il progetto.
Elimina i servizi Cloud Run.
Elimina i servizi Cloud Run che hai creato in questo tutorial:
gcloud run services delete --region=$region background
Passaggi successivi
- Scopri di più su Cloud Run.
- Prova Cloud Run, che ti consente di eseguire container stateless in un ambiente completamente gestito o nel tuo cluster Google Kubernetes Engine.