Questo tutorial mostra come creare un flusso di lavoro di traduzione in attesa del tuo input (il human-in-the-loop) e che connette un database Firestore, due funzioni Cloud Functions, l'API Cloud Translation e una pagina web che utilizza l'SDK Firebase per eseguire l'aggiornamento in tempo reale.
Con Workflows, puoi supportare un endpoint di callback (o webhook) che attende l'arrivo delle richieste HTTP a quell'endpoint, riprendendo l'esecuzione del flusso di lavoro in un secondo momento. In questo caso, il flusso di lavoro attende che l'input rifiuti o convalidi la traduzione di un testo, ma potrebbe anche attendere un processo esterno. Per ulteriori informazioni, consulta Attendi utilizzando i callback.
Architettura
Questo tutorial crea un'app web che ti consente di:
- Nella pagina web di traduzione, inserisci il testo che vuoi tradurre dall'inglese al francese. Fai clic su Traduci.
- Dalla pagina web, si chiama una funzione Cloud Functions che avvia l'esecuzione del flusso di lavoro. Il testo da tradurre viene passato come parametro sia alla funzione che al flusso di lavoro.
- Il testo viene salvato in un database Cloud Firestore. l'API Cloud Translation. La traduzione restituita viene archiviata nel database. Il deployment dell'app web viene eseguito utilizzando Firebase Hosting e si aggiorna in tempo reale per visualizzare il testo tradotto.
- Il passaggio
create_callback
del flusso di lavoro crea un URL dell'endpoint di callback che viene salvato anche nel database Firestore. La pagina web ora mostra sia un pulsante Convalida sia un pulsante Rifiuta. - Ora il flusso di lavoro è in pausa e attende una richiesta HTTP POST esplicita all'URL dell'endpoint di callback.
- Puoi decidere se convalidare o rifiutare la traduzione. Il clic su un pulsante chiama una seconda Cloud Function che a sua volta chiama l'endpoint di callback creato dal flusso di lavoro, trasmettendo lo stato di approvazione.
Il flusso di lavoro riprende la sua esecuzione e salva uno stato di approvazione
true
ofalse
nel database Firestore.
Questo diagramma fornisce una panoramica della procedura:
Obiettivi
- Eseguire il deployment di un'app web.
- Crea un database Firestore per archiviare le richieste di traduzione.
- Esegui il deployment di Cloud Functions per eseguire il flusso di lavoro.
- Esegui il deployment e il flusso di lavoro per orchestrare l'intero processo.
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.
Prima di iniziare
I vincoli di sicurezza definiti dalla tua organizzazione potrebbero impedirti di completare i passaggi seguenti. Per informazioni sulla risoluzione dei problemi, vedi Sviluppare applicazioni in un ambiente Google Cloud vincolato.
- 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.
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
-
Crea o seleziona un progetto Google Cloud.
-
Crea un progetto Google Cloud:
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_ID
con un nome per il progetto Google Cloud che stai creando. -
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_ID
con il nome del tuo progetto Google Cloud.
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API App Engine, Cloud Build, Cloud Functions, Firestore, Translation, and Workflows .
gcloud services enable appengine.googleapis.com
cloudbuild.googleapis.com cloudfunctions.googleapis.com firestore.googleapis.com translate.googleapis.com workflows.googleapis.com - Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
-
Crea o seleziona un progetto Google Cloud.
-
Crea un progetto Google Cloud:
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_ID
con un nome per il progetto Google Cloud che stai creando. -
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_ID
con il nome del tuo progetto Google Cloud.
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API App Engine, Cloud Build, Cloud Functions, Firestore, Translation, and Workflows .
gcloud services enable appengine.googleapis.com
cloudbuild.googleapis.com cloudfunctions.googleapis.com firestore.googleapis.com translate.googleapis.com workflows.googleapis.com - Aggiorna i componenti di Google Cloud CLI:
gcloud components update
- Accedi utilizzando il tuo account:
gcloud auth login
- Imposta l'ID progetto e la località predefinita utilizzati in questo tutorial:
export GOOGLE_CLOUD_PROJECT=PROJECT_ID export REGION=REGION gcloud config set workflows/location ${REGION}
Sostituisci quanto segue:
PROJECT_ID
: il tuo ID progetto Google Cloud. Puoi trovare l'ID progetto nella pagina Ti diamo il benvenuto della console Google Cloud.REGION
: la località supportata di Workflows scelta da te.
Esegui il deployment della prima Cloud Function
Questa funzione Cloud Functions avvia l'esecuzione del flusso di lavoro. Il testo da tradurre viene passato come parametro sia alla funzione che al flusso di lavoro.
Crea una directory denominata
callback-translation
e con sottodirectory chiamateinvokeTranslationWorkflow
,translationCallbackCall
epublic
:mkdir -p ~/callback-translation/{invokeTranslationWorkflow,translationCallbackCall,public}
Passa alla directory
invokeTranslationWorkflow
:cd ~/callback-translation/invokeTranslationWorkflow
Crea un file di testo con il nome
index.js
che contiene il seguente codice Node.js:Crea un file di testo con il nome
package.json
che contiene i seguenti metadatinpm
:Esegui il deployment della funzione con un trigger HTTP e consenti l'accesso non autenticato:
gcloud functions deploy invokeTranslationWorkflow \ --region=${REGION} \ --runtime nodejs14 \ --entry-point=invokeTranslationWorkflow \ --set-env-vars PROJECT_ID=${GOOGLE_CLOUD_PROJECT},CLOUD_REGION=${REGION},WORKFLOW_NAME=translation_validation \ --trigger-http \ --allow-unauthenticated
Il deployment della funzione potrebbe richiedere alcuni minuti. In alternativa, puoi utilizzare l'interfaccia Cloud Functions nella console Google Cloud per eseguire il deployment della funzione.
Una volta eseguito il deployment della funzione, puoi confermare la proprietà
httpsTrigger.url
:gcloud functions describe invokeTranslationWorkflow
Prendi nota dell'URL che viene restituito in modo da poterlo utilizzare in un passaggio successivo.
Esegui il deployment della seconda Cloud Function
Questa funzione Cloud Functions effettua una richiesta POST HTTP all'endpoint di callback creato dal flusso di lavoro, trasmettendo uno stato di approvazione che indica se la traduzione è stata convalidata o rifiutata.
Passa alla directory
translationCallbackCall
:cd ../translationCallbackCall
Crea un file di testo con il nome
index.js
che contiene il seguente codice Node.js:Crea un file di testo con il nome
package.json
che contiene i seguenti metadatinpm
:Esegui il deployment della funzione con un trigger HTTP e consenti l'accesso non autenticato:
gcloud functions deploy translationCallbackCall \ --region=${REGION} \ --runtime nodejs14 \ --entry-point=translationCallbackCall \ --trigger-http \ --allow-unauthenticated
Il deployment della funzione potrebbe richiedere alcuni minuti. In alternativa, puoi utilizzare l'interfaccia Cloud Functions nella console Google Cloud per eseguire il deployment della funzione.
Una volta eseguito il deployment della funzione, puoi confermare la proprietà
httpsTrigger.url
:gcloud functions describe translationCallbackCall
Prendi nota dell'URL che viene restituito in modo da poterlo utilizzare in un passaggio successivo.
Esegui il deployment del flusso di lavoro
Un flusso di lavoro è composto da una serie di passaggi descritti utilizzando la sintassi Workflows, che può essere scritta in formato YAML o JSON. Questa è la definizione del flusso di lavoro. Dopo aver creato un flusso di lavoro, devi eseguirne il deployment per renderlo disponibile per l'esecuzione.
Passa alla directory
callback-translation
:cd ..
Crea un file di testo con il nome
translation-validation.yaml
e i seguenti contenuti:Dopo aver creato il flusso di lavoro, puoi eseguirne il deployment, ma non eseguirlo:
gcloud workflows deploy translation_validation --source=translation-validation.yaml
Crea la tua app web
Crea un'app web che chiami una Cloud Function che avvia l'esecuzione del flusso di lavoro. La pagina web si aggiorna in tempo reale per mostrare il risultato della richiesta di traduzione.
Passa alla directory
public
:cd public
Crea un file di testo con il nome
index.html
contenente il seguente markup HTML. In un passaggio successivo, modificherai il fileindex.html
e aggiungerai gli script dell'SDK Firebase.Crea un file di testo con il nome
script.js
contenente il seguente codice JavaScript:Modifica il file
script.js
, sostituendo i segnapostoUPDATE_ME
con gli URL della funzione Cloud Functions che hai annotato in precedenza.Nel metodo
translateBtn.addEventListener
, sostituisciconst fnUrl = UPDATE_ME;
con:
const fnUrl = "https://REGION-PROJECT_ID.cloudfunctions.net/invokeTranslationWorkflow";
Nella funzione
callCallbackUrl
, sostituisciconst fnUrl = UPDATE_ME;
con:
const fnUrl = "https://REGION-PROJECT_ID.cloudfunctions.net/translationCallbackCall";
Crea un file di testo con il nome
style.css
che contiene i seguenti stili a cascata:
Aggiungi Firebase alla tua applicazione web
In questo tutorial, la pagina HTML, lo script JavaScript e il foglio di stile CSS vengono distribuiti come asset statici utilizzando Firebase Hosting, ma possono essere ospitati ovunque e pubblicati localmente sulla tua macchina a scopo di test.
Crea un progetto Firebase
Prima di poter aggiungere Firebase alla tua app, devi creare un progetto Firebase da connettere all'app.
-
Nella console Firebase, fai clic su Crea un progetto e seleziona il progetto Google Cloud esistente dal menu a discesa per aggiungere risorse Firebase al progetto.
-
Fai clic su Continua fino a quando non viene visualizzata l'opzione per aggiungere Firebase.
-
Salta la configurazione di Google Analytics per il progetto.
-
Fai clic su Aggiungi Firebase.
Firebase esegue automaticamente il provisioning delle risorse per il tuo progetto Firebase. Al termine del processo, si aprirà la pagina della panoramica del progetto nella console Firebase.
Registra la tua app con Firebase
Dopo aver creato un progetto Firebase, puoi aggiungervi la tua app web.
Al centro della pagina di riepilogo del progetto, fai clic sull'icona Web (</>) per avviare il flusso di lavoro di configurazione.
Inserisci un nickname per la tua app.
Questa informazione è visibile solo a te nella Console Firebase.
Per ora ignora la configurazione di Firebase Hosting.
Fai clic su Registra app e vai alla console.
Attiva Cloud Firestore
L'app web utilizza Cloud Firestore per ricevere e salvare i dati. Dovrai abilitare Cloud Firestore.
Nella sezione Crea della console Firebase, fai clic su Database Firestore.
Potrebbe essere necessario espandere prima il riquadro di navigazione a sinistra per vedere la sezione Crea.
Nel riquadro Cloud Firestore, fai clic su Crea database.
Seleziona Inizia in modalità di test utilizzando una regola di sicurezza come la seguente:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write; } } }
Fai clic su Avanti dopo aver letto il disclaimer sulle regole di sicurezza.
Imposta la località in cui sono archiviati i tuoi dati di Cloud Firestore. Puoi accettare l'impostazione predefinita o scegliere una regione vicina a te.
Fai clic su Abilita per eseguire il provisioning di Firestore.
Aggiungi l'SDK Firebase e inizializza Firebase
Firebase fornisce librerie JavaScript per la maggior parte dei prodotti Firebase. Prima di utilizzare Firebase Hosting, devi aggiungere gli SDK Firebase alla tua app web.
- Per inizializzare Firebase nella tua app, devi fornire la configurazione del progetto Firebase dell'app.
- Nella console Firebase, vai alle Impostazioni progetto .
- Nel riquadro Le tue app, seleziona la tua app.
- Nel riquadro Impostazione e configurazione SDK, seleziona CDN per caricare le librerie SDK Firebase dalla rete CDN.
- Copia lo snippet nel file
index.html
in fondo al tag<body>
, sostituendo i valori segnapostoXXXX
.
Installa l'SDK Firebase JavaScript.
Se non hai ancora un file
package.json
, creane uno eseguendo questo comando dalla directorycallback-translation
:npm init
Installa il pacchetto npm
firebase
e salvalo nel filepackage.json
eseguendo:npm install --save firebase
Inizializza il tuo progetto ed eseguine il deployment
Per collegare i file di progetto locali al progetto Firebase, devi inizializzare il progetto. Puoi quindi eseguire il deployment della tua app web.
Dalla directory
callback-translation
, esegui questo comando:firebase init
Seleziona l'opzione
Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys
.Scegli di utilizzare un progetto esistente e inserisci il tuo ID progetto.
Accetta
public
come directory root pubblica predefinita.Scegli di configurare un'app con una sola pagina.
Salta la configurazione di build e deployment automatici con GitHub.
Al prompt di
File public/index.html already exists. Overwrite?
, digita No.Passa alla directory
public
:cd public
Dalla directory
public
, esegui questo comando per eseguire il deployment del progetto sul tuo sito:firebase deploy --only hosting
Testa l'app web in locale
Firebase Hosting ti consente di visualizzare e testare le modifiche in locale e di interagire con le risorse di progetto di backend emulate. Quando utilizzi firebase serve
, la tua app interagisce con un backend emulato per la configurazione e l'hosting, ma con il backend reale per tutte le altre risorse del progetto. Per questo tutorial, puoi utilizzare firebase serve
, ma non è consigliato quando si eseguono test più approfonditi.
Dalla directory
public
, esegui questo comando:firebase serve
Apri l'app web all'URL locale restituito (di solito
http://localhost:5000
).Inserisci del testo in inglese e fai clic su Traduci.
Deve essere visualizzata una traduzione del testo in francese.
Ora puoi fare clic su Convalida o Rifiuta.
Nel database Firestore puoi verificare i contenuti. Dovrebbe essere simile al seguente:
approved: true callback: "https://workflowexecutions.googleapis.com/v1/projects/26811016474/locations/us-central1/workflows/translation_validation/executions/68bfce75-5f62-445f-9cd5-eda23e6fa693/callbacks/72851c97-6bb2-45e3-9816-1e3dcc610662_1a16697f-6d90-478d-9736-33190bbe222b" text: "The quick brown fox jumps over the lazy dog." translation: "Le renard brun rapide saute par-dessus le chien paresseux."
Lo stato
approved
ètrue
ofalse
a seconda che tu convalidi o rifiuti la traduzione.
Complimenti! Hai creato un flusso di lavoro di traduzione human-in-the-loop che utilizza i callback di Workflows.
Esegui la pulizia
Se hai creato un nuovo progetto per questo tutorial, elimina il progetto. Se hai utilizzato un progetto esistente e vuoi conservarlo senza le modifiche aggiunte in questo tutorial, elimina le risorse create per il tutorial.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.
Per eliminare il progetto:
- 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 risorse tutorial
Rimuovi la configurazione predefinita dell'interfaccia a riga di comando gcloud aggiunta durante la configurazione del tutorial:
gcloud config unset workflows/location
Elimina il flusso di lavoro creato in questo tutorial:
gcloud workflows delete WORKFLOW_NAME
Elimina le funzioni Cloud Functions che hai creato in questo tutorial:
gcloud functions delete FUNCTION_NAME
Puoi anche eliminare Cloud Functions dalla console Google Cloud.