É possível usar o Workflows para executar um Job do Cloud Run como parte de um fluxo de trabalho que executa um processamento de dados mais complexo ou que orquestra um sistema de jobs atuais.
Neste tutorial, demonstramos como usar o Workflows para executar uma Um job do Cloud Run que processa dados de eventos armazenados em um do bucket do Cloud Storage. Armazenamento do payload do evento em um você pode criptografar os dados usando chaves de criptografia gerenciadas pelo cliente o que não é possível Como transmitir os dados do evento como variáveis de ambiente para o job do Cloud Run.
Confira no diagrama a seguir uma visão geral:
Objetivos
Neste tutorial, você aprenderá a:
- Criar um job do Cloud Run que processe dados de eventos armazenados em um bucket do Cloud Storage.
- Implante um fluxo de trabalho que faça o seguinte:
- Recebe um evento como argumento.
- Grava os dados do payload do evento no bucket do Cloud Storage.
- Usa o conector da API Cloud Run Admin. para executar o job do Cloud Run.
- Criar um tópico do Pub/Sub para publicar uma mensagem nele Neste tutorial, usamos um evento do Pub/Sub como exemplo de como rotear eventos usando o Workflows, salvando o evento em o Cloud Storage para que um job do Cloud Run possa processar os dados do evento.
- Crie um gatilho do Eventarc que execute o fluxo de trabalho quando um é gravada no tópico do Pub/Sub.
- Acione o fluxo de trabalho escrevendo uma mensagem no Pub/Sub tópico.
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.
Antes de iniciar este tutorial, você deve ativar APIs específicas e criar uma conta de serviço gerenciado pelo usuário. Você precisa conceder à conta de serviço os papéis e as permissões necessárias para rotear eventos usando uma O Eventarc aciona e executa um fluxo de trabalho.
Console
- Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the following roles to the service account: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, Storage Object Creator, Workflows Invoker.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click
Add another role and add each additional role. - Click Continue.
-
Click Done to finish creating the service account.
-
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows.
-
Create a service account:
-
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the following roles to the service account: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, Storage Object Creator, Workflows Invoker.
To grant a role, find the Select a role list, then select the role.
To grant additional roles, click
Add another role and add each additional role. - Click Continue.
-
Click Done to finish creating the service account.
-
- Se você ativou o agente de serviço do Cloud Pub/Sub na
antes de 8 de abril de 2021, para aceitar push do Pub/Sub autenticado
solicitações, conceda
Serviço
Papel Criador de token da conta (
roles/iam.serviceAccountTokenCreator
) ao agente de serviço. Caso contrário, o papel é concedido por padrão:- No console do Google Cloud, acesse
IAM.
- Marque a caixa de seleção Incluir concessões de papel fornecidas pelo Google.
- Na coluna Nome, encontre o Conta de serviço do Cloud Pub/Sub e clique em Editar principal na linha correspondente.
- Clique em Adicionar papel. ou Adicionar outro papel.
- Na lista Selecionar um papel, filtre por: Criador de token de conta de serviço e, em seguida, selecione o papel.
- Clique em Salvar.
- No console do Google Cloud, acesse
IAM.
-
No Console do Google Cloud, ative o Cloud Shell.
Na parte inferior do Console do Google Cloud, uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.
O Cloud Shell é compatível com as etapas de linha de comando deste tutorial.
gcloud
- Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
- Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Crie ou selecione um projeto do Google Cloud.
-
Crie um projeto do Google Cloud:
gcloud projects create PROJECT_ID
Substitua
PROJECT_ID
por um nome para o projeto do Google Cloud que você está criando. -
Selecione o projeto do Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_ID
pelo nome do projeto do Google Cloud.
-
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows:
gcloud services enable cloudbuild.googleapis.com
run.googleapis.com storage.googleapis.com eventarc.googleapis.com workflows.googleapis.com -
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant roles to the service account. Run the following command once for each of the following IAM roles:
roles/eventarc.eventReceiver, roles/logging.logWriter, roles/run.admin, roles/storage.objectCreator, roles/workflows.invoker
:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service accountROLE
: the role to grant
-
- Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Crie ou selecione um projeto do Google Cloud.
-
Crie um projeto do Google Cloud:
gcloud projects create PROJECT_ID
Substitua
PROJECT_ID
por um nome para o projeto do Google Cloud que você está criando. -
Selecione o projeto do Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_ID
pelo nome do projeto do Google Cloud.
-
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows:
gcloud services enable cloudbuild.googleapis.com
run.googleapis.com storage.googleapis.com eventarc.googleapis.com workflows.googleapis.com -
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant roles to the service account. Run the following command once for each of the following IAM roles:
roles/eventarc.eventReceiver, roles/logging.logWriter, roles/run.admin, roles/storage.objectCreator, roles/workflows.invoker
:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service accountROLE
: the role to grant
-
- Se você ativou o agente de serviço do Cloud Pub/Sub até 8 de abril
de 2021, para oferecer compatibilidade com solicitações push autenticadas do Pub/Sub, conceda
o papel de Criador de token da conta de serviço (
roles/iam.serviceAccountTokenCreator
) ao agente de serviço. Caso contrário, esse papel é concedido por padrão:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Substitua PROJECT_NUMBER
pelo número do projeto do
Google Cloud. Encontre o número do projeto na página Boas-vindas do console do Google Cloud ou executando o seguinte comando:
gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Criar um job do Cloud Run
Neste tutorial, usamos um exemplo de código que está disponível no GitHub. A implantação cria uma imagem de contêiner para criar um job do Cloud Run. O também cria um bucket do Cloud Storage. O O job do Cloud Run lê todos os dados de eventos armazenados no no bucket do Cloud Storage e imprime os dados do evento.
Clone o repositório do app de exemplo para o seu local máquina virtual:
git clone https://github.com/GoogleCloudPlatform/workflows-demos.git
Também é possível faça o download da amostra como um arquivo ZIP
Acesse o diretório que contém o exemplo de código:
cd workflows-demos/cloud-run-jobs-payload-gcs/message-payload-job
Execute o script de implantação para criar o job do Cloud Run:
./deploy-job.sh
O script cria um bucket do Cloud Storage com o nome
message-payload-PROJECT_ID
, em que
PROJECT_ID
é o ID do projeto do Google Cloud.
Um job do Cloud Run chamado message-payload-job
também é criado.
Implantar um fluxo de trabalho que executa o job do Cloud Run
Definir e implantar um fluxo de trabalho que executa o job do Cloud Run que você acabou de criar. Uma definição de fluxo de trabalho é composta de uma série de etapas descrito usando a Sintaxe de fluxos de trabalho.
O fluxo de trabalho recebe um evento e salva os dados dele em um Cloud Storage em um bucket e executa um job do Cloud Run para processar o evento dados.
Console
No console do Google Cloud, acesse Página Fluxos de trabalho:
Clique em
Criar.Insira um nome para o novo fluxo de trabalho, como
message-payload-workflow
.Escolha uma região apropriada. por exemplo,
us-central1
.No campo Conta de serviço, selecione a conta de serviço que criamos antes.
A conta de serviço serve como a identidade do fluxo de trabalho. É necessário ter já concedeu os seguintes papéis à conta de serviço:
- Administrador do Cloud Run: para executar jobs do Cloud Run
- Gravador de registros: para gravar entradas de registro
- Criador de objetos do Storage: usa para criar objetos no Cloud Storage.
Clique em Next.
No editor de fluxo de trabalho, insira a seguinte definição para seu fluxo de trabalho:
Clique em Implantar.
gcloud
Crie um arquivo de código-fonte para seu fluxo de trabalho:
touch message-payload-workflow.yaml
Copie a seguinte definição de fluxo de trabalho para
message-payload-workflow.yaml
:Implante o fluxo de trabalho digitando o seguinte comando:
gcloud workflows deploy message-payload-workflow \ --location=us-central1 \ --source=message-payload-workflow.yaml \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Substitua:
SERVICE_ACCOUNT_NAME
: o nome de a conta de serviço que você criou anteriormentePROJECT_ID
: o ID do Projeto do Google Cloud
A conta de serviço serve como a identidade do fluxo de trabalho. É necessário ter já concedeu os seguintes papéis à conta de serviço:
roles/logging.logWriter
: para gravar entradas de registroroles/run.admin
: para executar jobs do Cloud Run.roles/storage.objectCreator
: para criar objetos no Cloud Storage.
O fluxo de trabalho faz o seguinte:
Etapa
init
: aceita um evento como argumento e define as variáveis necessárias.Etapa
log_event
: cria uma entrada de registro no Cloud Logging usando a função. sys.log.Etapa
write_payload_to_gcs
: faz uma solicitação HTTPPOST
e grava o evento. dados de payload para um arquivo de bucket do Cloud Storage.run_job_to_process_payload
etapa: usa o conector da API Cloud Run Admin método,googleapis.run.v1.namespaces.jobs.run
, para executar o job. O bucket do Cloud Storage e o nome do arquivo de dados são passadas como variáveis de substituição do fluxo de trabalho para o job.Etapa
finish
: retorna informações sobre a execução do job como resultado de o fluxo de trabalho.
Criar um tópico do Pub/Sub
Criar um tópico do Pub/Sub para publicar uma mensagem nele Um evento do Pub/Sub é usado para demonstrar como rotear um evento usando o Workflows e salvar o evento no Cloud Storage. para que um job do Cloud Run processe os dados do evento.
Console
No console do Google Cloud, acesse a página Tópicos.
Clique em
Criar tópico.No campo ID do tópico, insira um ID para o tópico, como
message-payload-topic
Mantenha a opção Adicionar uma assinatura padrão.
Não selecione as outras opções.
Clique em Criar.
gcloud
Para criar um tópico com o ID message-payload-topic
, execute o
gcloud pubsub topics create
comando:
gcloud pubsub topics create message-payload-topic
Criar um gatilho do Eventarc para rotear eventos ao fluxo de trabalho
Para executar automaticamente o fluxo de trabalho e, por sua vez, o Cloud Run job, crie um gatilho do Eventarc que responda eventos do Pub/Sub e que os encaminha para o fluxo de trabalho. Sempre que uma mensagem é gravada no tópico do Pub/Sub, o evento aciona uma execução do fluxo de trabalho.
Console
No console do Google Cloud, acesse Página Fluxos de trabalho:
Clique no nome do seu fluxo de trabalho, como
message-payload-workflow
.Na página Detalhes do fluxo de trabalho, clique em
Editar.Na página Editar fluxo de trabalho, na seção Gatilhos, Clique em Adicionar novo gatilho > Eventarc.
O painel Gatilho do Eventarc é aberto.
No campo Nome do gatilho, digite um nome para o gatilho, como
message-payload-trigger
Na lista Provedor de eventos, selecione Cloud Pub/Sub.
Na lista Evento, selecione google.cloud.pubsub.topic.v1.messagePublished.
Na lista Selecionar um tópico do Cloud Pub/Sub, escolha o do Pub/Sub que você criou anteriormente.
No campo Conta de serviço, selecione a conta de serviço que criamos antes.
A conta de serviço serve como a identidade do gatilho. É necessário ter já concedeu os seguintes papéis à conta de serviço:
- Receptor de evento do Eventarc: recebe eventos
- Invocador de fluxos de trabalho: para executar fluxos de trabalho
Clique em Salvar acionador.
O gatilho do Eventarc agora aparece na seção Gatilhos. na página Editar fluxo de trabalho.
Clique em Next.
Clique em Implantar.
gcloud
Crie um gatilho do Eventarc executando o seguinte comando:
gcloud eventarc triggers create message-payload-trigger \ --location=us-central1 \ --destination-workflow=message-payload-workflow \ --destination-workflow-location=us-central1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_ID/topics/message-payload-topic \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Substitua:
PROJECT_ID
: o ID do seu projeto do Google Cloud;SERVICE_ACCOUNT_NAME
: o nome do serviço. conta criada anteriormente.
A conta de serviço serve como a identidade do gatilho. É necessário ter já concedeu os seguintes papéis à conta de serviço:
roles/eventarc.eventReceiver
: para receber eventos.roles/workflows.invoker
: executar fluxos de trabalho
Acione o fluxo de trabalho
Testar o sistema completo publicando uma mensagem no Pub/Sub e gerar um evento. Para mais informações, consulte acionar um fluxo de trabalho com eventos ou mensagens do Pub/Sub.
Publique uma mensagem para o tópico do Pub/Sub a fim de gerar um evento:
gcloud pubsub topics publish message-payload-topic --message="Hello World"
O evento é encaminhado para o fluxo de trabalho que registra a mensagem do evento, salva o dados de eventos para o bucket do Cloud Storage e executa Job do Cloud Run para processar os dados salvos Cloud Storage. Isso pode levar um minuto.
Confirme se o job do Cloud Run foi executado conforme esperado visualizando as execuções do job:
gcloud run jobs executions list --job=message-payload-job
Uma nova execução do job será mostrada na saída.
Para visualizar as entradas de registro relacionadas a eventos criadas ao acionar o fluxo de trabalho, execute o seguinte comando:
gcloud logging read "resource.type=cloud_run_job AND textPayload:Payload"
Procure uma entrada de registro semelhante a esta:
textPayload: "Payload: {'message': {'data': 'SGVsbG8gV29ybGQ=', 'messageId': '8834108235224238',\ \ 'publishTime': '2023-09-20T17:07:52.921Z'}, 'subscription': 'projects/MY_PROJECT/subscriptions/eventarc-us-central1-message-payload-trigger-sub-741'}" ... resource: labels: job_name: message-payload-job location: us-central1 project_id: MY_PROJECT type: cloud_run_job textPayload: Processing message payload gs://message-payload-MY_PROJECT/8254002311197919.data.json
Você pode confirmar se os resultados estão conforme o esperado visualizando os dados do evento em o objeto do bucket do Cloud Storage.
Recupere o nome do bucket:
gsutil ls
O resultado será assim:
gs://message-payload-PROJECT_ID/
Liste os objetos no bucket:
gsutil ls -r gs://message-payload-PROJECT_ID/**
A saída será semelhante a esta:
gs://message-payload-PROJECT_ID/OBJECT_ID.data.json
Observe o
OBJECT_ID
a ser usado na próxima etapa.Faça o download do objeto no bucket como um arquivo:
gcloud storage cp gs://message-payload-PROJECT_ID/OBJECT_ID.data.json message-event.txt
Substitua
OBJECT_ID
pelo ID retornado no etapa anterior.Em um editor de texto, abra o arquivo
message-event.txt
. O corpo do evento gravado para O arquivo será semelhante a este:{ "message": { "data": "SGVsbG8gV29ybGQ=", "messageId": "8254002311197919", "publishTime": "2023-09-20T16:54:29.312Z" }, "subscription": "projects/MY_PROJECT/subscriptions/eventarc-us-central1-message-payload-trigger-sub-741" }
Se você decodificar o valor de dados de
SGVsbG8gV29ybGQ=
da Formato Base64, "Hello World" é retornado.
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:
- No Console do Google Cloud, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
Excluir recursos do tutorial
Exclua os recursos criados neste tutorial: