Neste tutorial, mostramos como criar um fluxo de trabalho de tradução que aguarda sua entrada (human-in-the-loop) e conecta um banco de dados do Firestore, duas funções do Cloud Run, a API Cloud Translation e uma página da Web que usa o SDK do Firebase para atualizar em tempo real.
Com o Workflows, é possível oferecer suporte a um endpoint de callback (ou webhook) que aguarda a chegada de solicitações HTTP nesse endpoint, retomando a execução do fluxo de trabalho posteriormente. Nesse caso, o fluxo de trabalho aguarda a rejeição da entrada ou a validação da tradução de algum texto, mas também pode aguardar um processo externo. Para mais informações, consulte Aguardar usando callbacks.
Arquitetura
Neste tutorial, criamos um app da Web que permite fazer o seguinte:
- Na página de tradução da Web, digite o texto que você quer traduzir do inglês para o francês. Clique em Traduzir.
- Na página da Web, uma função do Cloud Run é chamada para iniciar a execução do fluxo de trabalho. O texto a ser traduzido é transmitido como um parâmetro para a função e o fluxo de trabalho.
- O texto é salvo em um banco de dados do Cloud Firestore. A API Cloud Translation é chamada. A tradução retornada é armazenada no banco de dados. O app da Web é implantado usando o Firebase Hosting e as atualizações em tempo real para exibir o texto traduzido.
- A etapa
create_callback
no fluxo de trabalho cria um URL de endpoint de callback que também é salvo no banco de dados do Firestore. A página da Web exibe os botões Validar e Rejeitar. - O fluxo de trabalho está pausado e aguarda uma solicitação HTTP POST explícita para o URL do endpoint de callback.
- É possível validar ou rejeitar a tradução. Clicando em um
chama uma segunda função do Cloud Run que, por sua vez, chama o
de retorno de chamada criado pelo fluxo de trabalho, transmitindo o status de aprovação.
O fluxo de trabalho retoma a execução e salva um status de aprovação de
true
oufalse
no banco de dados do Firestore.
Este diagrama apresenta uma visão geral do processo:
Objetivos
- Implantar um app da Web.
- Criar um banco de dados do Firestore para armazenar solicitações de tradução.
- Implantar funções do Cloud Run para executar o fluxo de trabalho.
- Implantar e executar um fluxo de trabalho para orquestrar todo o processo.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
As restrições de segurança definidas pela sua organização podem impedir que você conclua as etapas a seguir. Para informações sobre solução de problemas, consulte Desenvolver aplicativos em um ambiente restrito do Google Cloud.
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the App Engine, Cloud Build, Cloud Run functions, Firestore, Translation, and Workflows APIs:
gcloud services enable appengine.googleapis.com
cloudbuild.googleapis.com cloudfunctions.googleapis.com firestore.googleapis.com translate.googleapis.com workflows.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the App Engine, Cloud Build, Cloud Run functions, Firestore, Translation, and Workflows APIs:
gcloud services enable appengine.googleapis.com
cloudbuild.googleapis.com cloudfunctions.googleapis.com firestore.googleapis.com translate.googleapis.com workflows.googleapis.com - Atualize os componentes da CLI do Google Cloud:
gcloud components update
- Faça login usando sua conta:
gcloud auth login
- Defina o ID do projeto e o local padrão usados neste tutorial:
export GOOGLE_CLOUD_PROJECT=PROJECT_ID export REGION=REGION gcloud config set workflows/location ${REGION}
Substitua:
implante a primeira função do Cloud Run
Essa função do Cloud Run inicia a execução do fluxo de trabalho. O texto a ser traduzido é transmitido como um parâmetro para a função e o fluxo de trabalho.
Crie um diretório chamado
callback-translation
com subdiretórios chamadosinvokeTranslationWorkflow
,translationCallbackCall
epublic
:mkdir -p ~/callback-translation/{invokeTranslationWorkflow,translationCallbackCall,public}
Altere para o diretório
invokeTranslationWorkflow
:cd ~/callback-translation/invokeTranslationWorkflow
Crie um arquivo de texto com o nome
index.js
e o seguinte código Node.js:Crie um arquivo de texto com o nome
package.json
e os seguintes metadadosnpm
:Implante a função com um gatilho HTTP e permita acesso não autenticado:
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
A função pode levar alguns minutos para ser implantada. Se preferir, use a interface de funções do Cloud Run no Console do Google Cloud para implantar a função.
Depois que a função for implantada, confirme a propriedade
httpsTrigger.url
:gcloud functions describe invokeTranslationWorkflow
Anote o URL retornado para usá-lo em uma etapa posterior.
implante a segunda função do Cloud Run
Esta função do Cloud Run faz uma solicitação HTTP POST ao callback de destino criado pelo fluxo de trabalho, transmitindo um status de aprovação que reflete se a tradução é validada ou rejeitada.
Altere para o diretório
translationCallbackCall
:cd ../translationCallbackCall
Crie um arquivo de texto com o nome
index.js
e o seguinte código Node.js:Crie um arquivo de texto com o nome
package.json
e os seguintes metadadosnpm
:Implante a função com um gatilho HTTP e permita acesso não autenticado:
gcloud functions deploy translationCallbackCall \ --region=${REGION} \ --runtime nodejs14 \ --entry-point=translationCallbackCall \ --trigger-http \ --allow-unauthenticated
A função pode levar alguns minutos para ser implantada. Se preferir, use a interface de funções do Cloud Run no Console do Google Cloud para implantar a função.
Depois que a função for implantada, confirme a propriedade
httpsTrigger.url
:gcloud functions describe translationCallbackCall
Anote o URL retornado para usá-lo em uma etapa posterior.
Implantar o fluxo de trabalho
Um fluxo de trabalho é composto por uma série de etapas descritas usando a sintaxe dos fluxos de trabalho, que pode ser escrita em formato YAML ou JSON. Essa é a definição do fluxo de trabalho. Depois de criar um fluxo de trabalho, implante-o para que ele fique disponível para execução.
Altere para o diretório
callback-translation
:cd ..
Crie um arquivo de texto com o nome de arquivo
translation-validation.yaml
com o seguinte conteúdo:Depois de criar o fluxo de trabalho, implante-o, mas não execute-o:
gcloud workflows deploy translation_validation --source=translation-validation.yaml
Criar seu app da Web
Crie um app da Web que chame uma função do Cloud que inicie a execução do fluxo de trabalho. A página da Web é atualizada em tempo real para exibir o resultado da solicitação de tradução.
Altere para o diretório
public
:cd public
Crie um arquivo de texto com o nome
index.html
e a seguinte marcação HTML. Em uma etapa posterior, você modificará o arquivoindex.html
e adicionará os scripts do SDK do Firebase.Crie um arquivo de texto com o nome de arquivo
script.js
que contém o seguinte código JavaScript:Edite o arquivo
script.js
, substituindo os marcadoresUPDATE_ME
pelo URLs de função do Cloud Run que você anotou anteriormente.No método
translateBtn.addEventListener
, substituaconst fnUrl = UPDATE_ME;
por:
const fnUrl = "https://REGION-PROJECT_ID.cloudfunctions.net/invokeTranslationWorkflow";
Na função
callCallbackUrl
, substituaconst fnUrl = UPDATE_ME;
por:
const fnUrl = "https://REGION-PROJECT_ID.cloudfunctions.net/translationCallbackCall";
Crie um arquivo de texto com o nome
style.css
e os seguintes estilos em cascata:
Adicionar o Firebase ao seu app da Web
Neste tutorial, a página HTML, o script JavaScript e a folha de estilo CSS são implantados como recursos estáticos usando o Firebase Hosting, mas podem ser hospedados em qualquer lugar e exibidos localmente na sua própria máquina para fins de teste.
Criar um projeto do Firebase
Antes de adicionar o Firebase ao seu projeto de app, é preciso criar um projeto do Firebase para ser conectado ao app.
-
No console do Firebase, clique em Criar um projeto e selecione seu projeto do Google Cloud no menu suspenso para adicionar recursos do Firebase a esse projeto.
-
Clique em Continuar até ver a opção de adicionar o Firebase.
-
Pule a configuração do Google Analytics para o projeto.
-
Clique em Adicionar Firebase:
O Firebase provisiona recursos automaticamente para seu projeto. Quando o processo for concluído, você será direcionado para a página de visão geral do seu projeto no Console do Firebase.
Registrar o app no Firebase
Depois de criar um projeto do Firebase, é possível adicionar seu app da Web a ele.
No centro da página de visão geral do projeto, clique no ícone Web (</>) para iniciar o fluxo de trabalho de configuração.
Dê um apelido para o app.
Ele só é visível para você no Console do Firebase.
Ignore a configuração do Firebase Hosting por enquanto.
Clique em Registrar app e passe para o Console.
Ativar o Cloud Firestore
O app da Web usa o Cloud Firestore para receber e salvar dados. Você precisa ativar o Cloud Firestore.
Na seção Build do Console do Firebase, clique em Firestore Database.
Talvez seja necessário expandir o painel de navegação à esquerda para ver a seção Build.
No painel do Cloud Firestore, clique em Criar banco de dados.
Selecione Iniciar no modo de teste usando uma regra de segurança, como a seguinte:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write; } } }
Clique em Próxima depois de ler o aviso sobre as regras de segurança.
Defina o local em que os dados do Cloud Firestore são armazenados. Aceite o padrão ou escolha uma região próxima a você.
Clique em Ativar para provisionar o Firestore.
Adicionar o SDK do Firebase e inicializar o Firebase
O Firebase fornece bibliotecas JavaScript para a maioria dos produtos do Firebase. Antes de usar o Firebase Hosting, você precisa adicionar os SDKs do Firebase ao seu app da Web.
- Para inicializar o Firebase no seu aplicativo, é preciso fornecer a configuração do projeto do Firebase do seu aplicativo.
- No Console do Firebase, acesse as Configurações do projeto .
- Selecione o app no painel Seus apps.
- No painel Configuração do SDK, selecione CDN para carregar as bibliotecas do SDK do Firebase no CDN.
- Copie o snippet para o arquivo
index.html
na parte inferior da tag<body>
, substituindo os valores do marcadorXXXX
.
Instale o SDK do Firebase para JavaScript.
Se você ainda não tiver um arquivo
package.json
, crie um executando o seguinte comando no diretóriocallback-translation
:npm init
Instale o pacote npm
firebase
e salve-o no arquivopackage.json
executando:npm install --save firebase
Inicializar e implantar o projeto
Para conectar os arquivos do projeto local ao seu projeto do Firebase, inicialize o projeto. Em seguida, implante o app da Web.
No diretório
callback-translation
, execute o seguinte comando:firebase init
Selecione a opção
Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys
.Escolha usar um projeto atual e insira o ID do projeto.
Aceite
public
como o diretório raiz público padrão.Escolha configurar um app de página única.
Pule a configuração de implantações automáticas com o GitHub.
No prompt
File public/index.html already exists. Overwrite?
, digite Não.Altere para o diretório
public
:cd public
No diretório
public
, execute o seguinte comando para implantar seu projeto no seu local:firebase deploy --only hosting
Testar o app da Web localmente
Com o Firebase Hosting, você confere e testa as mudanças localmente
e interage com os recursos do projeto de back-end emulado. Ao usar firebase serve
,
seu app interage com um back-end emulado para seu conteúdo de hospedagem e sua configuração,
mas interage com seu back-end real para todos os outros recursos do projeto. Neste tutorial, é possível
usar firebase serve
, mas isso não é recomendado para testes mais
abrangentes.
No diretório
public
, execute o seguinte comando:firebase serve
Abra seu app da Web no URL local retornado (geralmente
http://localhost:5000
).Digite um texto em inglês e clique em Traduzir.
Será exibida uma tradução do texto em francês.
Agora clique em Validar ou Rejeitar.
No banco de dados do Firestore, é possível verificar o conteúdo. A visualização será parecida com esta:
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."
O status
approved
étrue
oufalse
, dependendo de você ter validado ou rejeitado a tradução.
Parabéns! Você criou um fluxo de trabalho de tradução human-in-the-loop que usa callbacks do Workflows.
Limpar
Se você criou um novo projeto para este tutorial, exclua o projeto. Se você usou um projeto atual e quer mantê-lo sem as alterações incluídas neste tutorial, exclua os recursos criados para o tutorial.
Exclua o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- 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.
Excluir recursos do tutorial
Remova a configuração padrão da CLI do gcloud que você adicionou durante a configuração do tutorial:
gcloud config unset workflows/location
Exclua o fluxo de trabalho criado neste tutorial:
gcloud workflows delete WORKFLOW_NAME
Exclua as funções do Cloud Run criadas neste tutorial:
gcloud functions delete FUNCTION_NAME
Também é possível excluir funções do Cloud Run pelo Console do Google Cloud.