Pode usar fluxos de trabalho para executar uma tarefa do Cloud Run como parte de um fluxo de trabalho que realiza um processamento de dados mais complexo ou que orquestra um sistema de tarefas existentes.
Este tutorial demonstra como usar os fluxos de trabalho para executar uma tarefa do Cloud Run que processa dados de eventos armazenados num contentor do Cloud Storage. O armazenamento da carga útil do evento num contentor do Cloud Storage permite encriptar os dados através de chaves de encriptação geridas pelo cliente, o que não é possível se estiver a transmitir os dados do evento como variáveis de ambiente para a tarefa do Cloud Run.
O diagrama seguinte oferece uma vista geral de nível superior:
Objetivos
Neste tutorial, vai:
- Crie uma tarefa do Cloud Run que processe dados de eventos armazenados num contentor do Cloud Storage.
- Implemente um fluxo de trabalho que faça o seguinte:
- Recebe um evento como argumento.
- Escreve os dados de payload do evento no contentor do Cloud Storage.
- Usa o conetor da API Cloud Run Admin para executar a tarefa do Cloud Run.
- Crie um tópico do Pub/Sub para poder publicar uma mensagem no mesmo. Este tutorial usa um evento Pub/Sub como exemplo de como encaminhar eventos usando fluxos de trabalho, guardando o evento no Cloud Storage para que uma tarefa do Cloud Run possa processar os dados do evento.
- Crie um acionador do Eventarc que execute o fluxo de trabalho quando uma mensagem for escrita no tópico do Pub/Sub.
- Acione o fluxo de trabalho escrevendo uma mensagem no tópico do Pub/Sub.
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.
Antes de começar este tutorial, tem de ativar APIs específicas e criar uma conta de serviço gerida pelo utilizador. Tem de conceder à conta de serviço as funções e as autorizações necessárias para poder encaminhar eventos através de um acionador do Eventarc e executar um fluxo de trabalho.
Tenha em atenção que, se estiver a usar a Cloud Shell para experimentar este tutorial, pode ter de conceder funções adicionais à conta de serviço predefinida do Compute Engine. Para ver detalhes, consulte a secção Crie uma tarefa do Cloud Run neste documento.
Consola
- 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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Compute Engine, Eventarc, and Workflows APIs.
-
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.
-
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Compute Engine, Eventarc, and Workflows APIs.
-
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 ativou o agente de serviço do Cloud Pub/Sub a 8 de abril de 2021 ou antes, para suportar pedidos push autenticados do Pub/Sub, conceda a função de criador de tokens de conta de serviço (
roles/iam.serviceAccountTokenCreator
) ao agente de serviço. Caso contrário, esta função é concedida por predefinição:- Na Google Cloud consola, aceda à página
IAM.
- Selecione a caixa de verificação Incluir concessões de funções fornecidas pela Google.
- Na coluna Nome, encontre a conta de serviço do Cloud Pub/Sub e, de seguida, clique em Editar principal na linha correspondente.
- Clique em Adicionar função ou Adicionar outra função.
- Na lista Selecionar uma função, filtre por Criador de tokens de conta de serviço e, de seguida, selecione a função.
- Clique em Guardar.
- Na Google Cloud consola, aceda à página
IAM.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
O Cloud Shell suporta os passos da linha de comandos neste tutorial.
- 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.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Compute Engine, Eventarc, and Workflows APIs.
-
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: roles/eventarc.eventReceiver, roles/logging.logWriter, roles/run.admin, roles/storage.objectCreator, roles/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.
-
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Compute Engine, Eventarc, and Workflows APIs.
-
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: roles/eventarc.eventReceiver, roles/logging.logWriter, roles/run.admin, roles/storage.objectCreator, roles/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 ativou o agente do serviço Cloud Pub/Sub a 8 de abril de 2021 ou antes, para suportar pedidos de envio do Pub/Sub autenticados, conceda a função de criador de tokens de conta de serviço (
roles/iam.serviceAccountTokenCreator
) ao agente do serviço. Caso contrário, esta função é concedida por predefinição:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
gcloud
Substitua PROJECT_NUMBER
pelo seu Google Cloud
número do projeto. Pode encontrar o número do projeto na página
Boas-vindas
da Google Cloud consola ou executando o seguinte comando:
gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Crie uma tarefa do Cloud Run
Este tutorial usa código de exemplo que pode encontrar no GitHub. O script de implementação cria uma imagem de contentor para criar uma tarefa do Cloud Run. O script também cria um contentor do Cloud Storage. A tarefa do Cloud Run lê quaisquer dados de eventos armazenados no contentor do Cloud Storage e, em seguida, imprime os dados de eventos.
Se estiver a executar o script de implementação no Cloud Shell e se a conta de serviço predefinida do Compute Engine não tiver a função de Editor, conceda as seguintes funções no projeto à conta de serviço predefinida do Compute Engine. (Caso contrário, pode ignorar este passo e continuar com a clonagem do repositório da app de exemplo no passo seguinte.)
Conceda a função de escritor do Artifact Registry (
roles/artifactregistry.writer
):gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/artifactregistry.writer
Substitua
PROJECT_NUMBER
pelo seu Google Cloud número do projeto. Pode encontrar o número do projeto na página Boas-vindas da Google Cloud consola ou executando o seguinte comando:gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Conceda a função de utilizador do objeto de armazenamento (
roles/storage.objectUser
):gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/storage.objectUser
Conceda a função Logging Logs Writer (
roles/logging.logWriter
):gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/logging.logWriter
Obtenha o exemplo de código clonando o repositório da app de exemplo para o seu computador local:
git clone https://github.com/GoogleCloudPlatform/workflows-demos.git
Em alternativa, pode transferir o exemplo como um ficheiro ZIP
Altere para o diretório que contém o código de exemplo:
cd workflows-demos/cloud-run-jobs-payload-gcs/message-payload-job
Crie a tarefa do Cloud Run executando o script de implementação:
./deploy-job.sh
O script cria um contentor do Cloud Storage com o nome message-payload-PROJECT_ID
, em que PROJECT_ID
é o ID do seu Google Cloud projeto.
Também é criada uma tarefa do Cloud Run com o nome message-payload-job
.
Implemente um fluxo de trabalho que execute a tarefa do Cloud Run
Defina e implemente um fluxo de trabalho que execute a tarefa do Cloud Run que acabou de criar. Uma definição de fluxo de trabalho é composta por uma série de passos descritos através da sintaxe do Workflows.
O fluxo de trabalho recebe um evento, guarda os dados do evento num contentor do Cloud Storage e, em seguida, executa uma tarefa do Cloud Run para processar os dados do evento.
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho:
Clique em
Criar.Introduza um nome para o novo fluxo de trabalho, como
message-payload-workflow
.Escolha uma região adequada; por exemplo,
us-central1
.No campo Conta de serviço, selecione a conta de serviço que criou anteriormente.
A conta de serviço funciona como a identidade do fluxo de trabalho. Já deve ter concedido as seguintes funções à conta de serviço:
- Administrador do Cloud Run: para executar tarefas do Cloud Run
- Escritor de registos: para escrever entradas de registo
- Storage Object Creator: para criar objetos no Cloud Storage
Clicar em Seguinte.
No editor de fluxos de trabalho, introduza a seguinte definição para o seu fluxo de trabalho:
Clique em Implementar.
gcloud
Crie um ficheiro de código-fonte para o seu fluxo de trabalho:
touch message-payload-workflow.yaml
Copie a seguinte definição do fluxo de trabalho para
message-payload-workflow.yaml
:Implemente o fluxo de trabalho introduzindo 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 o seguinte:
SERVICE_ACCOUNT_NAME
: o nome da conta de serviço que criou anteriormentePROJECT_ID
: o ID do seu Google Cloud projeto
A conta de serviço funciona como a identidade do fluxo de trabalho. Já deve ter concedido as seguintes funções à conta de serviço:
roles/logging.logWriter
: para escrever entradas do registoroles/run.admin
: para executar tarefas do Cloud Runroles/storage.objectCreator
: para criar objetos no Cloud Storage
O fluxo de trabalho faz o seguinte:
init
step: aceita um evento como argumento e define as variáveis necessárias.log_event
passo: cria uma entrada de registo no Cloud Logging através da função sys.log.write_payload_to_gcs
passo: faz um pedido HTTPPOST
e escreve os dados de payload do evento num ficheiro do contentor do Cloud Storage.run_job_to_process_payload
passo: usa o método do conector da Cloud Run Admin APIgoogleapis.run.v1.namespaces.jobs.run
para executar a tarefa. O contentor do Cloud Storage e o nome do ficheiro de dados são transmitidos como variáveis de substituição do fluxo de trabalho para a tarefa.finish
step—Returns information about the job execution as the result of the workflow.
Crie um tópico do Pub/Sub
Crie um tópico do Pub/Sub para poder publicar uma mensagem no mesmo. Um evento do Pub/Sub é usado para demonstrar como encaminhar um evento usando fluxos de trabalho e guardar o evento no Cloud Storage para que uma tarefa do Cloud Run possa processar os dados do evento.
Consola
Na Google Cloud consola, aceda à página Tópicos.
Clique em
Criar tópico.No campo ID do tópico, introduza um ID para o tópico, como
message-payload-topic
.Mantenha a opção Adicionar uma subscrição predefinida.
Não selecione as outras opções.
Clique em Criar.
gcloud
Para criar um tópico com o ID message-payload-topic
, execute o comando
gcloud pubsub topics create
:
gcloud pubsub topics create message-payload-topic
Crie um acionador do Eventarc para encaminhar eventos para o fluxo de trabalho
Para executar automaticamente o fluxo de trabalho e, por sua vez, a tarefa do Cloud Run, crie um acionador do Eventarc que responda a eventos do Pub/Sub e que encaminhe os eventos para o fluxo de trabalho. Sempre que uma mensagem é escrita no tópico Pub/Sub, o evento aciona uma execução do fluxo de trabalho.
Consola
Na Google Cloud consola, aceda à página Fluxos de trabalho:
Clique no nome do 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 secção Acionadores, clique em Adicionar novo acionador > Eventarc.
É aberto o painel Acionador do Eventarc.
No campo Nome do acionador, introduza um nome para o acionador, como
message-payload-trigger
.Na lista Fornecedor 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, selecione o tópico do Pub/Sub que criou anteriormente.
No campo Conta de serviço, selecione a conta de serviço que criou anteriormente.
A conta de serviço funciona como a identidade do acionador. Já deve ter concedido as seguintes funções à conta de serviço:
- Eventarc Event Receiver: para receber eventos
- Workflows Invoker: para executar fluxos de trabalho
Clique em Guardar acionador.
O acionador do Eventarc aparece agora na secção Acionadores na página Editar fluxo de trabalho.
Clicar em Seguinte.
Clique em Implementar.
gcloud
Crie um acionador 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 o seguinte:
PROJECT_ID
: o ID do seu Google Cloud projetoSERVICE_ACCOUNT_NAME
: o nome da conta de serviço que criou anteriormente.
A conta de serviço funciona como a identidade do acionador. Já deve ter concedido as seguintes funções à conta de serviço:
roles/eventarc.eventReceiver
: para receber eventosroles/workflows.invoker
: para executar fluxos de trabalho
Acione o fluxo de trabalho
Teste o sistema ponto a ponto publicando uma mensagem no tópico do Pub/Sub e gerando um evento. Para mais informações, consulte o artigo sobre como acionar um fluxo de trabalho com eventos ou mensagens do Pub/Sub.
Publique uma mensagem no tópico Pub/Sub para gerar um evento:
gcloud pubsub topics publish message-payload-topic --message="Hello World"
O evento é encaminhado para o fluxo de trabalho que regista a mensagem do evento, guarda os dados do evento no contentor do Cloud Storage e executa a tarefa do Cloud Run para processar os dados guardados no Cloud Storage. Esta ação pode demorar um minuto.
Confirme que a tarefa do Cloud Run foi executada conforme esperado, vendo as execuções da tarefa:
gcloud run jobs executions list --job=message-payload-job
Deverá ver uma nova execução de tarefa no resultado.
Para ver as entradas do registo relacionadas com 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 registo semelhante a:
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
Pode confirmar que os resultados são os esperados ao ver os dados de eventos no objeto do contentor do Cloud Storage.
Recupere o nome do contentor:
gcloud storage ls
O resultado é semelhante ao seguinte:
gs://message-payload-PROJECT_ID/
Liste os objetos no seu contentor:
gcloud storage ls gs://message-payload-PROJECT_ID/** --recursive
O resultado deve ser semelhante ao seguinte:
gs://message-payload-PROJECT_ID/OBJECT_ID.data.json
Tome nota do
OBJECT_ID
para usar no passo seguinte.Transfira o objeto no seu contentor como um ficheiro:
gcloud storage cp gs://message-payload-PROJECT_ID/OBJECT_ID.data.json message-event.txt
Substitua
OBJECT_ID
pelo ID devolvido no passo anterior.Num editor de texto, abra o ficheiro
message-event.txt
. O corpo do evento escrito no ficheiro deve ser semelhante ao seguinte:{ "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" }
Tenha em atenção que, se descodificar o valor de dados de
SGVsbG8gV29ybGQ=
do respetivo formato Base64, é devolvido "Hello World".
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:
- 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.
Elimine recursos de tutoriais
Elimine os recursos que criou neste tutorial:
O que se segue?
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2025-08-20 UTC.