Este tutorial mostra-lhe como criar um fluxo de trabalho de tradução que aguarda a sua entrada, ou seja, a intervenção humana, e que liga uma base de dados do Firestore, duas funções do Cloud Run, a API Cloud Translation e uma página Web que usa o SDK do Firebase para atualizar em tempo real.
Com os fluxos de trabalho, pode suportar um ponto final de retorno de chamada (ou webhook) que aguarda que os pedidos HTTP cheguem a esse ponto final, retomando a execução do fluxo de trabalho num momento posterior. Neste caso, o fluxo de trabalho aguarda a sua entrada para rejeitar ou validar a tradução de algum texto, mas também pode aguardar um processo externo. Para mais informações, consulte a secção Aguarde através de callbacks.
Arquitetura
Este tutorial cria uma app Web que lhe permite fazer o seguinte:
- Na página Web de tradução, introduza o texto que quer traduzir de inglês para francês. Clique em Traduzir.
- A partir da página Web, é chamada uma função do Cloud Run que inicia a execução do fluxo de trabalho. O texto a traduzir é transmitido como um parâmetro tanto à função como ao fluxo de trabalho.
- O texto é guardado numa base de dados do Cloud Firestore. A Cloud Translation API é invocada. A tradução devolvida é armazenada na base de dados. A app Web é implementada através do Firebase Hosting e é atualizada em tempo real para apresentar o texto traduzido.
- O passo
create_callback
no fluxo de trabalho cria um URL do ponto final de retorno de chamada que também é guardado na base de dados do Firestore. A página Web apresenta agora um botão Validar e um botão Rejeitar. - O fluxo de trabalho está agora pausado e aguarda um pedido HTTP POST explícito para o URL do ponto final de retorno de chamada.
- Pode decidir se quer validar ou rejeitar a tradução. Quando um utilizador clica num botão, é chamada uma segunda função do Cloud Run que, por sua vez, chama o ponto final de retorno de chamada criado pelo fluxo de trabalho, transmitindo o estado de aprovação.
O fluxo de trabalho retoma a execução e guarda um estado de aprovação de
true
oufalse
na base de dados do Firestore.
Este diagrama oferece uma vista geral do processo:
Objetivos
- Implemente uma app Web.
- Crie uma base de dados do Firestore para armazenar pedidos de tradução.
- Implemente funções do Cloud Run para executar o fluxo de trabalho.
- Implemente e execute um fluxo de trabalho para orquestrar todo o processo.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Antes de começar
As restrições de segurança definidas pela sua organização podem impedir a conclusão dos seguintes passos. Para informações de resolução de problemas, consulte o artigo Desenvolva aplicações num ambiente Google Cloud restrito.
- 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.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
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.
-
-
Verify 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.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro, tem de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
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.
-
-
Verify 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
- Inicie sessão com a sua conta:
gcloud auth login
- Defina o ID do projeto e a localização predefinida usados neste tutorial:
export GOOGLE_CLOUD_PROJECT=PROJECT_ID export REGION=REGION gcloud config set workflows/location ${REGION}
Substitua o seguinte:
PROJECT_ID
: o ID do seu Google Cloud projeto. Pode encontrar o ID do projeto na página Boas-vindas da consola Google Cloud .REGION
: a localização dos fluxos de trabalho suportados à sua escolha.
Crie um diretório denominado
callback-translation
e com subdiretórios denominadosinvokeTranslationWorkflow
,translationCallbackCall
epublic
:mkdir -p ~/callback-translation/{invokeTranslationWorkflow,translationCallbackCall,public}
Altere para o diretório
invokeTranslationWorkflow
:cd ~/callback-translation/invokeTranslationWorkflow
Crie um ficheiro de texto com o nome de ficheiro
index.js
que contenha o seguinte código Node.js:Crie um ficheiro de texto com o nome
package.json
que contenha os seguintes metadadosnpm
:Implemente a função com um acionador HTTP e permita o 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 implementação da função pode demorar alguns minutos. Em alternativa, pode usar a interface de funções do Cloud Run na Google Cloud consola para implementar a função.
Depois de implementar a função, pode confirmar a propriedade
httpsTrigger.url
:gcloud functions describe invokeTranslationWorkflow
Anote o URL devolvido para o poder usar num passo posterior.
Altere para o diretório
translationCallbackCall
:cd ../translationCallbackCall
Crie um ficheiro de texto com o nome de ficheiro
index.js
que contenha o seguinte código Node.js:Crie um ficheiro de texto com o nome
package.json
que contenha os seguintes metadadosnpm
:Implemente a função com um acionador HTTP e permita o acesso não autenticado:
gcloud functions deploy translationCallbackCall \ --region=${REGION} \ --runtime nodejs14 \ --entry-point=translationCallbackCall \ --trigger-http \ --allow-unauthenticated
A implementação da função pode demorar alguns minutos. Em alternativa, pode usar a interface de funções do Cloud Run na Google Cloud consola para implementar a função.
Depois de implementar a função, pode confirmar a propriedade
httpsTrigger.url
:gcloud functions describe translationCallbackCall
Anote o URL devolvido para o poder usar num passo posterior.
Altere para o diretório
callback-translation
:cd ..
Crie um ficheiro de texto com o nome de ficheiro
translation-validation.yaml
e com o seguinte conteúdo:Depois de criar o fluxo de trabalho, pode implementá-lo, mas não execute o fluxo de trabalho:
gcloud workflows deploy translation_validation --source=translation-validation.yaml
Altere para o diretório
public
:cd public
Crie um ficheiro de texto com o nome de ficheiro
index.html
que contenha a seguinte marcação HTML. (Num passo posterior, vai modificar o ficheiroindex.html
e adicionar os scripts do SDK Firebase.)Crie um ficheiro de texto com o nome de ficheiro
script.js
que contenha o seguinte código JavaScript:Edite o ficheiro
script.js
, substituindo os marcadores de posiçãoUPDATE_ME
pelos URLs das funções do Cloud Run que 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 ficheiro de texto com o nome de ficheiro
style.css
que contenha os seguintes estilos em cascata:-
Na consola do Firebase, clique em Criar um projeto e, de seguida, selecione o seu Google Cloud projeto existente no menu pendente para adicionar recursos do Firebase a esse projeto.
-
Clique em Continuar até ver a opção para adicionar o Firebase.
-
Ignorar a configuração do Google Analytics para o seu projeto.
-
Clique em Adicionar Firebase.
No centro da página de vista geral do projeto, clique no ícone Web (</>) para iniciar o fluxo de trabalho de configuração.
Introduza uma alcunha para a sua app.
Isto só é visível para si na consola do Firebase.
Ignore a configuração do Firebase Hosting por agora.
Clique em Registar app e continue para a consola.
Na secção Compilar da consola do Firebase, clique em Base de dados do Firestore.
(Pode ter de expandir primeiro o painel de navegação do lado esquerdo para ver a secção Criar.)
No painel do Cloud Firestore, clique em Criar base 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 Seguinte depois de ler a exclusão de responsabilidade acerca das regras de segurança.
Defina a localização onde os seus dados do Cloud Firestore são armazenados. Pode aceitar a predefinição ou escolher uma região perto de si.
Clique em Ativar para aprovisionar o Firestore.
- Para inicializar o Firebase na sua app, tem de fornecer a configuração do projeto do Firebase da app.
- Na consola do Firebase, aceda às Definições do projeto .
- No painel As suas apps, selecione a sua app.
- No painel Configuração e configuração do SDK, para carregar bibliotecas do SDK do Firebase a partir da RFC, selecione RFC.
- Copie o fragmento para o ficheiro
index.html
na parte inferior da etiqueta<body>
, substituindo os valores dos marcadores de posiçãoXXXX
.
Instale o SDK Firebase JavaScript.
Se ainda não tiver um ficheiro
package.json
, crie um executando o seguinte comando a partir do diretóriocallback-translation
:npm init
Instale o pacote npm
firebase
e guarde-o no ficheiropackage.json
executando:npm install firebase
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
.Opte por usar um projeto existente e introduza o ID do projeto.
Aceite
public
como o diretório raiz público predefinido.Opte por configurar uma app de página única.
Evite a configuração de compilações e implementações automáticas com o GitHub.
Na mensagem
File public/index.html already exists. Overwrite?
, escreva Não.Altere para o diretório
public
:cd public
No diretório
public
, execute o seguinte comando para implementar o seu projeto no site:firebase deploy --only hosting
No diretório
public
, execute o seguinte comando:firebase serve
Abra a sua app Web no URL local devolvido (normalmente,
http://localhost:5000
).Introduza algum texto em inglês e, de seguida, clique em Traduzir.
Deve ser apresentada uma tradução do texto em francês.
Agora, pode clicar em Validar ou Rejeitar.
Na base de dados do Firestore, pode verificar o conteúdo. Deve ser semelhante ao seguinte:
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 estado
approved
étrue
oufalse
, consoante valide ou rejeite a tradução.- 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.
Remova a configuração predefinida da CLI gcloud que adicionou durante a configuração do tutorial:
gcloud config unset workflows/location
Elimine o fluxo de trabalho criado neste tutorial:
gcloud workflows delete WORKFLOW_NAME
Elimine as funções do Cloud Run que criou neste tutorial:
gcloud functions delete FUNCTION_NAME
Também pode eliminar funções do Cloud Run a partir da Google Cloud consola.
Implemente a primeira função do Cloud Run
Esta função do Cloud Run inicia a execução do fluxo de trabalho. O texto a traduzir é transmitido como um parâmetro tanto para a função como para o fluxo de trabalho.
Implemente a segunda função do Cloud Run
Esta função do Cloud Run faz um pedido HTTP POST ao ponto final de retorno de chamada criado pelo fluxo de trabalho, transmitindo um estado de aprovação que reflete se a tradução é validada ou rejeitada.
Implemente o fluxo de trabalho
Um fluxo de trabalho é composto por uma série de passos descritos através da sintaxe Workflows, que pode ser escrita no formato YAML ou JSON. Esta é a definição do fluxo de trabalho. Depois de criar um fluxo de trabalho, implementa-o para o disponibilizar para execução.
Crie a sua app Web
Crie uma app Web que chame uma função da nuvem que inicie a execução do fluxo de trabalho. A página Web é atualizada em tempo real para apresentar o resultado do pedido de tradução.
Adicione o Firebase à sua app Web
Neste tutorial, a página HTML, o script JavaScript e a folha de estilos CSS são implementados como recursos estáticos através do Firebase Hosting, mas podem ser alojados em qualquer lugar e publicados localmente na sua própria máquina para fins de teste.
Crie um projeto do Firebase
Antes de poder adicionar o Firebase à sua app, tem de criar um projeto do Firebase para associar à sua app.
O Firebase aprovisiona automaticamente recursos para o seu projeto do Firebase. Quando o processo estiver concluído, acede à página de vista geral do seu projeto na consola do Firebase.
Registe a sua app no Firebase
Depois de ter um projeto do Firebase, pode adicionar a sua app para a Web ao projeto.
Ative o Cloud Firestore
A app Web usa o Cloud Firestore para receber e guardar dados. Tem de ativar o Cloud Firestore.
Adicione o SDK do Firebase e inicialize o Firebase
O Firebase fornece bibliotecas JavaScript para a maioria dos produtos do Firebase. Antes de usar o Firebase Hosting, tem de adicionar os SDKs do Firebase à sua app Web.
Inicialize e implemente o seu projeto
Para associar os ficheiros do projeto local ao projeto do Firebase, tem de inicializar o projeto. Em seguida, pode implementar a sua app Web.
Teste a app Web localmente
O Firebase Hosting permite-lhe ver e testar alterações localmente
e interagir com recursos de projetos de back-end emulados. Quando usa firebase serve
,
a sua app interage com um back-end emulado para o conteúdo e a configuração de alojamento,
mas com o seu back-end real para todos os outros recursos do projeto. Para este tutorial, pode usar firebase serve
, mas não é recomendado quando faz testes mais extensivos.
Parabéns! Criou um fluxo de trabalho de tradução com intervenção humana que usa callbacks dos fluxos de trabalho.
Limpar
Se criou um novo projeto para este tutorial, elimine o projeto. Se usou um projeto existente e quer mantê-lo sem as alterações adicionadas neste tutorial, elimine os recursos criados para o tutorial.
Elimine o projeto
A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.
Para eliminar o projeto: