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 mostra un elenco delle traduzioni precedenti. La traduzione avviene in un processo in background per evitare di bloccare la richiesta dell'utente.
Il seguente diagramma illustra la procedura di richiesta di traduzione.
Ecco la sequenza di eventi che illustra il funzionamento dell'app del tutorial:
- Visita la pagina web per visualizzare un elenco delle traduzioni precedenti, archiviate in Firestore.
- Richiedi una traduzione di testo inserendo un modulo HTML.
- La richiesta di traduzione viene pubblicata in Pub/Sub.
- Viene attivata una funzione Cloud Run sottoscritta all'argomento Pub/Sub.
- La funzione Cloud Run utilizza Cloud Translation per tradurre il testo.
- La funzione Cloud Run archivia il risultato in Firestore.
Questo tutorial è rivolto a chiunque sia interessato a conoscere l'elaborazione in background con Google Cloud. Non è richiesta alcuna esperienza pregressa con Pub/Sub, Firestore, App Engine o le funzioni Cloud Run. Tuttavia, per comprendere tutto il codice, è utile avere esperienza con Go, JavaScript e HTML.
Obiettivi
- Comprendi ed esegui il deployment di una funzione Cloud Run.
- Comprendi ed esegui il deployment di un'app App Engine.
- Prova l'app.
Costi
In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Firestore, Cloud Run functions, Pub/Sub, and Cloud Translation APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Firestore, Cloud Run functions, Pub/Sub, and Cloud Translation APIs.
-
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 modificarlo nella directory dell'applicazione.
-
In Cloud Shell, configura lo strumento
gcloud
in modo da utilizzare il tuo progetto Google Cloud:# Configure gcloud for your project gcloud config set project YOUR_PROJECT_ID
Informazioni sulla funzione Cloud Run
- La funzione inizia importando diverse dipendenze, come Firestore e Traduzione. Contiene anche alcuni tipi e variabili globali.
- I client Firestore e Translation globali vengono inizializzati in modo da poter essere riutilizzati tra le chiamate alle funzioni. In questo modo, non devi inizializzare nuovi client per ogni chiamata di funzione, il che rallenterebbe l'esecuzione.
- L'API Translation traduce la stringa nella lingua selezionata.
-
La funzione Cloud Run inizia inizializzando i client Firestore e Pub/Sub. Quindi, analizza il messaggio Pub/Sub per recuperare il testo da tradurre e la lingua di destinazione desiderata.
L'app genera un nome univoco per la richiesta di traduzione per assicurarsi di non memorizzare traduzioni duplicate. Poi, la traduce in una transazione Firestore per assicurarsi che le esecuzioni simultanee non eseguano accidentalmente la stessa traduzione due volte.
Esegui il deployment della funzione Cloud Run
In Cloud Shell, nella stessa directory del file
translate.go
, esegui il deployment della funzione Cloud Run con un attivatore Pub/Sub:gcloud functions deploy Translate --runtime go111 \ --trigger-topic=translate --set-env-vars GOOGLE_CLOUD_PROJECT=YOUR_GOOGLE_CLOUD_PROJECT
dove
YOUR_GOOGLE_CLOUD_PROJECT
è l'ID progetto Google Cloud.
Informazioni sull'app
L'app web è composta da due componenti principali:
-
Un server HTTP Go per gestire le richieste web. Il server ha i seguenti due
endpoint:
-
/
: elenca tutte le traduzioni esistenti e mostra un modulo che gli utenti possono inviare per richiedere nuove traduzioni. -
/request-translation
: gli invii dei moduli vengono inviati a questo endpoint, che pubblica la richiesta in Pub/Sub per la traduzione asincrona.
-
- Un modello HTML che viene compilato con le traduzioni esistenti dal server Go.
Il server HTTP
Nella directory
index
,main.go
inizia configurando l'app e registrando gli handler HTTP:L'handler 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 della richiesta, registrato in
/request-translation
, analizza l'invio del modulo, convalida la richiesta e pubblica un messaggio in Pub/Sub:
Il modello HTML
Il modello HTML è la base della pagina HTML mostrata all'utente in modo che possa vedere le traduzioni precedenti e richiederne di nuove. Il modello viene compilato dal server HTTP con l'elenco delle traduzioni esistenti.
-
L'elemento
<head>
del modello HTML include metadati, fogli di stile e JavaScript per la pagina:La pagina importa gli asset CSS e JavaScript di Material Design Lite (MDL). MDL ti consente di aggiungere un design Material ai tuoi siti web.
La pagina utilizza JQuery per attendere il completamento del caricamento del documento e impostare un gestore di invio del modulo. Ogni volta che viene inviato il modulo di richiesta di traduzione, la pagina esegue una convalida minima del modulo per verificare che il valore non sia vuoto, quindi invia una richiesta asincrona all'endpoint
/request-translation
.Infine, viene visualizzata una barra snack MDL per indicare se la richiesta è andata a buon fine o se si è verificato un errore.
- Il corpo HTML della pagina utilizza un layout MDL e diversi componenti MDL per visualizzare un elenco di traduzioni e un modulo per richiedere traduzioni aggiuntive:
Creazione dell'app
-
Prima di provare a eseguire il deployment dell'app web, compilala per assicurarti che venga compilata
e che tutte le dipendenze funzionino.
go build -o start ./index
La compilazione è riuscita se non è stato stampato nulla ed è stato creato un file
start
.
Deployment dell'app web
Puoi utilizzare l'ambiente standard di App Engine 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.
Questo tutorial utilizza l'ambiente standard di App Engine per eseguire il deployment del frontend HTTP.
app.yaml
configura l'app App Engine:
-
Dalla stessa directory del file
app.yaml
, esegui il deployment dell'app nell'ambiente standard di App Engine:gcloud app deploy
Test dell'app
Dopo aver eseguito il deployment della funzione Cloud Run e dell'app App Engine, prova a richiedere una traduzione.
-
Per visualizzare l'app nel browser,inserisci il seguente URL:
https://PROJECT_ID.REGION_ID.r.appspot.com
Sostituisci quanto segue:
PROJECT_ID
: l'ID del tuo progetto Google CloudREGION_ID
: un codice assegnato da App Engine alla tua app
C'è una pagina con un elenco vuoto di traduzioni e un modulo per richiedere nuove traduzioni.
-
Nel campo Testo da tradurre, inserisci il testo da tradurre, ad esempio
Hello, World
. - Seleziona una lingua dall'elenco a discesa in cui vuoi tradurre il testo.
- Fai clic su Invia.
- Per aggiornare la pagina, fai clic su Aggiorna refresh. Nell'elenco delle traduzioni è presente una nuova riga. Se non vedi una traduzione, attendi qualche altro secondo e riprova. Se continui a non vedere una traduzione, consulta la sezione successiva sul debug dell'app.
Eseguire il debug dell'app
Se non riesci a connetterti all'app App Engine o non vedi nuove traduzioni, verifica quanto segue:
-
Verifica che i comandi di deployment di
gcloud
siano stati completati correttamente e non abbiano generato errori. Se sono stati rilevati errori, correggili e prova nuovamente a eseguire il deployment della funzione Cloud Run e dell'app App Engine. -
Nella console Google Cloud, vai alla pagina Visualizzatore log.
Vai alla pagina del visualizzatore log- Nell'elenco a discesa Risorse selezionate di recente, fai clic su Applicazione GAE e poi su Tutti i module_id. Viene visualizzato un elenco di richieste dall'ultima volta che hai visitato la tua app. Se non vedi un elenco di richieste, verifica di aver selezionato Tutti i module_id dall'elenco a discesa. Se nella console Google Cloud vengono visualizzati messaggi di errore, verifica che il codice dell'app corrisponda al codice riportato nella sezione relativa alla comprensione dell'app.
-
Nell'elenco a discesa Risorse selezionate di recente, fai clic su
funzione Cloud Functions e poi su Tutti i nomi delle funzioni. Viene visualizzata una
funzione elencata per ogni traduzione richiesta. In caso contrario, verifica che la
funzione Cloud Run e l'app App Engine utilizzino lo stesso
argomento Pub/Sub:
- Nel file
background/index/main.go
, verifica che la costantetopicName
sia"translate"
. - Quando
esegui il deployment della funzione Cloud Run,
assicurati di includere il flag
--trigger-topic=translate
.
- Nel file
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto Google Cloud
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Elimina l'istanza App Engine
- In the Google Cloud console, go to the Versions page for App Engine.
- Select the checkbox for the non-default app version that you want to delete.
- Per eliminare la versione dell'app, fai clic su Elimina.
Elimina la funzione Cloud Run
-
Elimina la funzione Cloud Run creata in questo tutorial:
gcloud functions delete Translate
Passaggi successivi
- Prova altri tutorial sulle funzioni Cloud Run.
- Scopri di più su App Engine.
- Prova Cloud Run, che ti consente di eseguire container stateless in un ambiente completamente gestito o nel tuo cluster Google Kubernetes Engine.