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 per tradurre, quindi mostra un elenco di traduzioni precedenti. La traduzione viene eseguita in background per evitare di bloccare la richiesta dell'utente.
Il seguente diagramma illustra la procedura di richiesta di traduzione.
Ecco la sequenza degli eventi per il funzionamento dell'app:
- 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 è pubblicata in 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 è destinato 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 qualche esperienza con .NET, JavaScript e HTML.
Obiettivi
- Capire ed eseguire il deployment dei servizi Cloud Run.
- Prova l'app.
Costi
In questo documento utilizzi 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 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, Pub/Sub, and Cloud Translation APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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, Pub/Sub, and Cloud Translation APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Aggiorna i componenti di
gcloud
:gcloud components update
- Prepara l'ambiente di sviluppo.
Preparazione dell'app in corso...
Nella finestra del terminale, clona il repository dell'app di esempio sulla macchina locale:
git clone https://github.com/GoogleCloudPlatform/getting-started-dotnet.git
In alternativa, puoi scaricare l'esempio come file ZIP ed estrarlo.
Passa alla directory che contiene il codice campione dell'attività in background:
cd getting-started-dotnet/BackgroundProcessing
Informazioni sul servizio TranslateWorker
Il servizio inizia importando diverse dipendenze, ad esempio Firestore e Translation.
I client Firestore e Translation sono inizializzati in modo da poter essere riutilizzati tra le chiamate del gestore. In questo modo, non dovrai inizializzare nuovi client per ogni chiamata, cosa che comporterebbe un rallentamento dell'esecuzione.
L'API Translation traduce la stringa nella lingua selezionata.
Il costruttore del controller riceve i client Firestore e Pub/Sub.
Il metodo
Post
analizza il messaggio Pub/Sub per far tradurre il testo. Utilizza l'ID messaggio come nome univoco per la richiesta di traduzione, per assicurare che non memorizzi traduzioni duplicate.
Deployment del servizio TranslateWorker
in corso...
Nella directory
BackgroundProcessing
, esegui lo script di PowerShell per creare ed eseguire il deployment del servizio in Cloud Run:PublishTo-CloudRun.ps1
Informazioni sullo script PublishTo-CloudRun.ps1
Lo script PublishTo-CloudRun.ps1
pubblica il servizio su Cloud Run e protegge il servizio TranslateWorker da comportamenti illeciti. Se il servizio consente tutte le connessioni in entrata, chiunque può pubblicare richieste di traduzione al titolare e, di conseguenza, i costi. Pertanto, configuri il servizio in modo che accetti solo richieste POST
da Pub/Sub.
Lo script esegue le seguenti operazioni:
- Crea l'app localmente utilizzando l'
dotnet publish
. - Crea un container che esegue l'app utilizzando Cloud Build.
- Esegue il deployment dell'app in Cloud Run.
- Consente al progetto di creare token di autenticazione Pub/Sub.
- Crea un account di servizio per rappresentare l'identità della sottoscrizione Pub/Sub.
- Concede all'account di servizio l'autorizzazione per richiamare il servizio
TranslateWorker
. Crea un argomento e una sottoscrizione Pub/Sub.
Informazioni sul servizio TranslateUI
Il servizio TranslateUI
esegue il rendering di una pagina web che mostra traduzioni recenti e accetta richieste di nuove traduzioni.
La classe
StartUp
configura un'app ASP.NET e crea client Pub/Sub e Firestore.Il gestore di indice
Index
riceve tutte le traduzioni esistenti da Firestore e compila unViewModel
con l'elenco:Le nuove traduzioni vengono inviate inviando un modulo HTML. Il gestore di traduzione della richiesta convalida la richiesta e pubblica un messaggio in Pub/Sub:
Deployment del servizio TranslateUI
in corso...
Nella directory
BackgroundProcessing
, esegui lo script di PowerShell per creare ed eseguire il deployment del servizio in Cloud Run:./PublishTo-CloudRun.ps1
Informazioni sullo script PublishTo-CloudRun.ps1
Lo script PublishTo-CloudRun.ps1
pubblica l'app su Cloud Run.
Lo script esegue le seguenti operazioni:
- Crea l'app localmente utilizzando l'
dotnet publish
. - Crea un container che esegue l'app utilizzando Cloud Build.
Esegue il deployment dell'app in Cloud Run.
Test dell'app
Dopo aver eseguito correttamente lo script PublishTo-CloudRun.ps1
, prova a richiedere una traduzione.
Il comando finale nello script
PublishTo-CloudRun.ps1
indica l'URL del servizio UI. Nella finestra del terminale, individua l'URL del servizioTranslateUI
:gcloud beta run services describe translate-ui --region $region --format="get(status.address.hostname)"
Nel browser, vai all'URL visualizzato nel passaggio precedente.
C'è una pagina con un elenco di traduzioni vuote e un modulo per richiedere nuove traduzioni.
Nel campo Testo da tradurre, inserisci del testo da tradurre, ad esempio
Hello, World.
Fai clic su Invia.
Per aggiornare la pagina, fai clic su Aggiorna refresh. C'è una nuova riga nell'elenco delle traduzioni. Se non vedi una traduzione, attendi qualche secondo e riprova. Se la traduzione non viene ancora visualizzata, consulta la sezione successiva sul debug dell'app.
Debug dell'app
Se non riesci a connetterti al servizio Cloud Run o non vedi nuove traduzioni, controlla quanto segue:
Controlla che lo script
PublishTo-CloudRun.ps1
sia stato completato correttamente e non abbia restituito errori. Se si sono verificati errori (ad esempio,message=Build failed
), correggili e prova a ripetere l'esecuzione.Verifica la presenza di errori nei log:
Nella console Google Cloud, vai alla pagina Cloud Run.
Fai clic sul nome del servizio,
translate-ui
.Fai clic su Log.
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.
Eliminare i servizi Cloud Run.
Elimina i servizi Cloud Run creati in questo tutorial:
gcloud beta run services delete --region=$region translate-ui
gcloud beta run services delete --region=$region translate-worker