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.
Ecco la sequenza di eventi che descrive il funzionamento dell'app tutorial:
- Visita la pagina web per visualizzare un elenco delle traduzioni precedenti, archiviate in Firestore.
- Richiedi la traduzione di un testo inserendo un modulo HTML.
- La richiesta di traduzione viene pubblicata su 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 è rivolto a chiunque sia interessato a scoprire di più sull'elaborazione in background con Google Cloud. Non è richiesta alcuna esperienza pregressa con Pub/Sub, Firestore, App Engine o Cloud Run Functions. Tuttavia, per comprendere tutto il codice, è utile avere una certa esperienza con .NET, JavaScript e HTML.
Obiettivi
- Comprendere ed eseguire il deployment dei servizi Cloud Run.
- Prova 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 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 senza costi per l'esecuzione, il test e il deployment dei workload.
-
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, Pub/Sub, and Cloud Translation APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
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, Pub/Sub, and Cloud Translation APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Aggiorna i componenti di
gcloud:gcloud components update
- Prepara l'ambiente di sviluppo.
Preparazione dell'app
Nella finestra del terminale, clona il repository dell'app di esempio sulla tua 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 come Firestore e Translation.
I client Firestore e Translation vengono inizializzati in modo da poter essere riutilizzati tra le invocazioni del gestore. In questo modo, non devi inizializzare nuovi client per ogni chiamata, il che rallenterebbe l'esecuzione.
L'API Translation traduce la stringa nella lingua che hai selezionato.
Il costruttore del controller riceve i client Firestore e Pub/Sub.
Il metodo
Postanalizza il messaggio Pub/Sub per ottenere il testo da tradurre. Utilizza l'ID messaggio come nome univoco per la richiesta di traduzione per assicurarsi di non memorizzare traduzioni duplicate.
Deployment del servizio TranslateWorker
Nella directory
BackgroundProcessing, esegui lo script PowerShell per creare ed eseguire il deployment del servizio su Cloud Run:PublishTo-CloudRun.ps1
Comprendere lo script PublishTo-CloudRun.ps1
Lo script PublishTo-CloudRun.ps1 pubblica il servizio su Cloud Run e protegge il servizio TranslateWorker da abusi. Se il servizio consentisse tutte le connessioni in entrata, chiunque potrebbe pubblicare richieste di traduzione nel controller e quindi sostenere 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
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 al 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 le traduzioni recenti
e accetta richieste di nuove traduzioni.
La classe
StartUpconfigura un'app ASP.NET e crea client Pub/Sub e Firestore.Il gestore dell'indice
Indexrecupera tutte le traduzioni esistenti da Firestore e riempie unViewModelcon l'elenco:Le nuove traduzioni vengono richieste inviando un modulo HTML. Il gestore di traduzione delle richieste convalida la richiesta e pubblica un messaggio su Pub/Sub:
Deployment del servizio TranslateUI
Nella directory
BackgroundProcessing, esegui lo script PowerShell per creare ed eseguire il deployment del servizio su Cloud Run:./PublishTo-CloudRun.ps1
Comprendere lo 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
dotnet publish. - Crea un container che esegue l'app utilizzando Cloud Build.
Esegue il deployment dell'app in Cloud Run.
Testare l'app
Dopo aver eseguito correttamente lo script PublishTo-CloudRun.ps1, prova
a richiedere una traduzione.
L'ultimo comando nello script
PublishTo-CloudRun.ps1indica l'URL del servizio UI. Nella finestra del terminale, trova l'URL del servizioTranslateUI:gcloud beta run services describe translate-ui --region $region --format="get(status.address.hostname)"
Nel browser, vai all'URL che hai ottenuto nel passaggio precedente.
C'è una pagina con un elenco vuoto di traduzioni e un modulo per richiedere nuove traduzioni.
Nel campo Testo da tradurre, inserisci un testo da tradurre, ad esempio
Hello, World..Fai clic su Invia.
Per aggiornare la pagina, fai clic su Aggiorna refresh. Nella lista di traduzioni è presente una nuova riga. Se non vedi una traduzione, attendi qualche altro secondo e riprova. Se ancora non vedi una traduzione, consulta la sezione successiva sulla risoluzione dei problemi dell'app.
Esecuzione del debug dell'app
Se non riesci a connetterti al servizio Cloud Run o non vedi nuove traduzioni, controlla quanto segue:
Verifica che lo script
PublishTo-CloudRun.ps1sia stato completato correttamente e non abbia generato errori. Se sono stati rilevati errori (ad esempio,message=Build failed), correggili e riprova a eseguire il comando.Controlla 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
- Nella console Google Cloud , vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona quello 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 i servizi Cloud Run.
Elimina i servizi Cloud Run che hai creato in questo tutorial:
gcloud beta run services delete --region=$region translate-ui
gcloud beta run services delete --region=$region translate-worker