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 testo da tradurre e che mostra 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.
Ecco la sequenza di eventi relativi al funzionamento dell'app tutorial:
- Visita la pagina web per visualizzare un elenco delle traduzioni precedenti, archiviate in Firestore.
- Richiedi una traduzione del testo inserendo un modulo HTML.
- La richiesta di traduzione viene pubblicata in Pub/Sub.
- Viene attivata una Cloud Function sottoscritta a quell'argomento Pub/Sub.
- La funzione Cloud Functions utilizza Cloud Translation per tradurre il testo.
- La funzione Cloud Functions 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 precedente con Pub/Sub, Firestore, App Engine o Cloud Functions. Tuttavia, per comprendere tutto il codice, è utile avere una certa esperienza con Go, JavaScript e HTML.
Obiettivi
- Comprendi ed esegui il deployment di una Cloud Function.
- Comprendere un'app di App Engine ed eseguirne il deployment.
- Prova l'app.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi basata sull'utilizzo previsto,
utilizza il Calcolatore prezzi.
Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina 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 gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Firestore, Cloud Functions, Pub/Sub, and Cloud Translation.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Firestore, Cloud Functions, Pub/Sub, and Cloud Translation.
-
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'app.
-
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 Cloud Function
- La funzione inizia importando diverse dipendenze, come Firestore e Translation. Ha anche alcune variabili e tipi globali.
- I client globali Firestore e Translation vengono inizializzati in modo da poter essere riutilizzati tra una chiamata a una funzione e l'altra. In questo modo, non devi inizializzare nuovi client per ogni chiamata di funzione, il che rallenterà l'esecuzione.
- L'API Translation traduce la stringa nella lingua selezionata.
-
La funzione Cloud Functions inizia inizializzando i client Firestore e Pub/Sub. Poi analizza il messaggio Pub/Sub per ottenere il testo da tradurre e la lingua di destinazione desiderata.
Dopodiché, l'app assegna un nome univoco alla richiesta di traduzione, per assicurarsi che non vengano memorizzate traduzioni duplicate. Quindi, converte in una transazione Firestore per impedire che esecuzioni simultanee non eseguano accidentalmente la stessa traduzione due volte.
Deployment della Cloud Function
In Cloud Shell, nella stessa directory del file
translate.go
, esegui il deployment della Cloud Function con un trigger 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.
Comprensione dell'app
I componenti principali dell'app web sono due:
-
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 del modulo vengono inviati a questo endpoint, che pubblica la richiesta in Pub/Sub affinché venga tradotta in modo asincrono.
-
- Un modello HTML compilato con le traduzioni esistenti dal server Go.
Il server HTTP
Nella directory
index
,main.go
inizia configurando l'app e registrando i gestori HTTP:Il gestore dell'indice (
/
) riceve tutte le traduzioni esistenti da Firestore e compila un modello HTML con l'elenco:Per richiedere nuove traduzioni, invia un modulo HTML. Il gestore della traduzione delle richieste, registrato su
/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 per la 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 recupera gli asset CSS e JavaScript di Material Design Lite (MDL). La tecnologia MDL ti consente di aggiungere un aspetto di material design ai tuoi siti web.
La pagina utilizza JQuery per attendere il completamento del caricamento del documento e impostare un gestore di invio modulo. Ogni volta che viene inviato il modulo di richiesta di traduzione, la pagina esegue una convalida del modulo minima per verificare che il valore non sia vuoto, quindi invia una richiesta asincrona all'endpoint
/request-translation
.Infine, appare una snackbar MMD che indica se la richiesta è riuscita o se si è verificato un errore.
- Il corpo HTML della pagina utilizza un layout MDL e diversi componenti ML 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, crea l'app per assicurarti che venga compilata e che tutte le dipendenze funzionino.
go build -o start ./index
La build è riuscita se non è stato stampato nulla e se è 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 viene eseguita 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.
L'app.yaml
configura l'app App Engine:
-
Dalla stessa directory del file
app.yaml
, esegui il deployment della tua app nell'ambiente standard di App Engine:gcloud app deploy
Test dell'app
Dopo aver eseguito il deployment della Cloud Function 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 dall'elenco a discesa la lingua in cui vuoi tradurre il testo.
- Fai clic su Invia.
- Per aggiornare la pagina, fai clic su Aggiorna refresh. Nell'elenco di traduzione è presente una nuova riga. Se non vedi una traduzione, attendi qualche secondo in più e riprova. Se non vedi ancora una traduzione, consulta la sezione successiva sul debug dell'app.
Debug dell'app
Se non riesci a connetterti alla tua 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 restituito errori. Se si sono verificati errori, correggili e prova a eseguire di nuovo il deployment della funzione Cloud Functions e dell'app App Engine. -
Nella console Google Cloud, vai alla pagina Visualizzatore log.
Vai alla pagina Visualizzatore log- Nell'elenco a discesa Risorse selezionate di recente, fai clic su Applicazione GAE, quindi su All module_id. Viene visualizzato un elenco delle richieste relative al momento in cui hai visitato la tua app. Se non vedi un elenco di richieste, verifica di aver selezionato All module_id (Tutti i moduli_id) dall'elenco a discesa. Se vengono visualizzati messaggi di errore stampati nella console Google Cloud, verifica che il codice dell'app corrisponda al codice nella sezione relativa alla comprensione dell'app.
-
Nell'elenco a discesa Risorse selezionate di recente, fai clic su funzione Cloud Functions Functions, quindi su Tutti i nomi delle funzioni. Viene visualizzata una funzione per ogni traduzione richiesta. In caso contrario, verifica che la funzione Cloud Function e l'app App Engine utilizzino lo stesso argomento Pub/Sub:
- Nel file
background/index/main.go
, controlla che la costantetopicName
sia"translate"
. - Quando esegui il deployment della funzione Cloud Functions, 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
- Nella console Google Cloud, 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 del progetto e fai clic su Chiudi per eliminare il progetto.
Elimina l'istanza di App Engine
- Nella console Google Cloud, vai alla pagina Versioni di App Engine.
- Seleziona la casella di controllo relativa alla versione non predefinita dell'app che vuoi eliminare.
- Per eliminare la versione dell'app, fai clic su Elimina.
Elimina la Cloud Function
-
Elimina la Cloud Function creata in questo tutorial:
gcloud functions delete Translate
Passaggi successivi
- Prova altri tutorial di Cloud Functions.
- 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.