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 attivata una funzione Cloud Run sottoscritta a quell'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 scoprire l'elaborazione in background con Google Cloud. Non è richiesta alcuna esperienza precedente con Pub/Sub, Firestore, App Engine o Cloud Run Functions. Tuttavia, per comprendere tutto il codice, è utile avere una certa esperienza con Node.js, JavaScript e HTML.
Obiettivi
- Comprendere ed eseguire il deployment di una funzione Cloud Run.
- Comprendere ed eseguire il deployment di un'app App Engine.
- 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 carichi di lavoro.
-
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, Cloud Run functions, Pub/Sub, and Cloud Translation APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). 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, Cloud Run functions, Pub/Sub, and Cloud Translation APIs.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Nella Google Cloud console, 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
gcloudin modo da utilizzare il tuo Google Cloud progetto:# Configure gcloud for your project gcloud config set project YOUR_PROJECT_ID
Comprendere la funzione Cloud Run
La funzione inizia importando diverse dipendenze come Firestore e Translation. I client globali Firestore e Translation vengono inizializzati in modo che possano essere riutilizzati tra le chiamate di funzione. 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 analizza il messaggio Pub/Sub per ottenere il testo da tradurre e la lingua di destinazione desiderata.
L'app richiede quindi una traduzione e archivia il risultato in Firestore.
Eseguire il deployment della funzione Cloud Run
Nella stessa directory del file
translate.js, esegui il deployment della funzione Cloud Run con un trigger Pub/Sub:gcloud functions deploy translate --runtime nodejs10 --trigger-topic translate
Comprendere l'app
L'app web ha due componenti principali:
-
Un server HTTP Node.js 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 su Pub/Sub per la traduzione asincrona.
-
- Un modello HTML compilato con le traduzioni esistenti dal server Node.js server.
Il server HTTP
Nella directory
server,app.jsinizia configurando l'app e registrando i gestori HTTP: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 richiesta di traduzione, registrato in
/request-translation, analizza l'invio del modulo, convalida la richiesta e pubblica un messaggio su Pub/Sub:
Il modello HTML
Il modello HTML è la base della pagina HTML mostrata all'utente in modo che possa visualizzare 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). MDL ti consente di aggiungere un aspetto Material Design 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 snackbar 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:
Eseguire il 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.
Il file 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
Testare l'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.comSostituisci quanto segue:
PROJECT_ID: l'ID progetto Google CloudREGION_ID: un codice assegnato da App Engine alla tua app
Viene visualizzata una pagina con un elenco vuoto di traduzioni e un modulo per richiedere nuove traduzioni.
-
Nel campo Testo da tradurre, inserisci del 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 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 all'app App Engine o non vedi nuove traduzioni, controlla quanto segue:
-
Verifica che i comandi di deployment
gcloudsiano stati completati correttamente e non abbiano generato errori. Se si sono verificati errori, correggili e riprova a eseguire il deployment della funzione Cloud Run e dell'app App Engine di nuovo. -
Nella Google Cloud console, vai alla pagina Visualizzatore log.
Vai alla pagina Visualizzatore log- Nell'elenco a discesa Risorse selezionate di recente, fai clic GAE Application, quindi su Tutti module_id. Viene visualizzato un elenco di richieste da quando hai visitato l'app. Se non vedi un elenco di richieste, verifica di aver selezionato Tutti module_id dall'elenco a discesa. Se nella Google Cloud console vengono visualizzati messaggi di errore, 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 Run e l'app App Engine utilizzino lo stesso
argomento Pub/Sub:
- Nel file
background/server/app.js, verifica che laTOPIC_NAMEcostante sia"translate". - Quando esegui il
deployment della funzione Cloud Run,
assicurati di includere il flag
--trigger-topic=translate.
- Nel file
Libera spazio
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 Google Cloud 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, quindi fai clic su Chiudi per eliminare il progetto.
Elimina l'istanza App Engine
- Nella Google Cloud console, vai alla pagina Versioni di App Engine.
- Seleziona la casella di controllo per la versione dell'app non predefinita che vuoi eliminare.
- Per eliminare la versione dell'app, fai clic su Elimina.
Elimina la funzione Cloud Run
-
Elimina la funzione Cloud Run che hai creato in questo tutorial:
gcloud functions delete Translate
Passaggi successivi
- Prova altri tutorial su Cloud Run 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.