Acionar fluxos de trabalho com eventos diretos do Cloud Storage (CLI gcloud)
Neste guia de início rápido, mostramos como executar um fluxo de trabalho usando um gatilho do Eventarc que recebe eventos do Cloud Storage.
O gatilho executa o fluxo de trabalho ouvindo um evento de criação de objeto em um bucket do Cloud Storage e transmite o evento como um argumento de ambiente de execução para um fluxo de trabalho de destino.
Neste guia de início rápido, você fará as seguintes tarefas:
Criar um bucket do Cloud Storage como uma origem de eventos.
Usar o Workflows para criar e implantar um fluxo de trabalho que extrai e retorna os nomes do bucket de armazenamento e de um arquivo enviado.
Criar um gatilho do Eventarc que conecte o bucket do Cloud Storage ao receptor de eventos do Workflows.
Gerar um evento fazendo upload de um arquivo de texto para o bucket do Cloud Storage. Esse evento é transmitido como um argumento de ambiente de execução para o fluxo de trabalho de destino.
Visualizar os nomes do bucket e do arquivo de texto resultantes da execução do fluxo de trabalho.
Para seguir as instruções passo a passo desta tarefa diretamente no console do Google Cloud, clique em Orientação:
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.
- 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.
Ative as APIs Compute Engine, Eventarc, Pub/Sub e Workflows.
gcloud services enable \ compute.googleapis.com \ eventarc.googleapis.com \ pubsub.googleapis.com \ workflows.googleapis.com \ workflowexecutions.googleapis.com
- Atualize os componentes
gcloud
:gcloud components update
- Faça login usando sua conta:
gcloud auth login
Definir as variáveis de ambiente
Defina as variáveis de ambiente usadas neste guia de início rápido:
export PROJECT_ID=PROJECT_ID
export WORKFLOW_LOCATION=us-central1
export TRIGGER_LOCATION=us-central1
gcloud config set project ${PROJECT_ID}
gcloud config set workflows/location ${WORKFLOW_LOCATION}
gcloud config set eventarc/location ${TRIGGER_LOCATION}
Encontre o ID do projeto na página Boas-vindas do console do Google Cloud.
Configurar as contas de serviço
Conceda as permissões necessárias às contas de serviço usadas neste guia de início rápido.
-
Se você for o criador do projeto, receberá o papel de proprietário básico (
roles/owner
). Por padrão, esse papel do gerenciamento de identidade e acesso (IAM) inclui as permissões necessárias para acesso total à maioria dos recursos do Google Cloud, e você pode pular esta etapa.Se você não é o criador do projeto, as permissões necessárias precisam ser concedidas ao principal apropriado. Por exemplo, um principal pode ser uma Conta do Google (para usuários finais) ou uma conta de serviço (para aplicativos e cargas de trabalho de computação). Para mais informações, consulte a página Papéis e permissões do destino do evento.
Permissões necessárias
Para conseguir as permissões necessárias a fim de concluir o guia de início rápido, peça ao administrador para conceder a você os seguintes papéis do IAM no projeto:
-
Administrador do Eventarc (
roles/eventarc.admin
) -
Acessador de exibição de registros (
roles/logging.viewAccessor
) -
Administrador de projetos do IAM (
roles/resourcemanager.projectIamAdmin
) -
Administrador da conta de serviço (
roles/iam.serviceAccountAdmin
) -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) -
Administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin
) -
Administrador de armazenamento (
roles/storage.admin
) -
Administrador do Workflows (
roles/workflows.admin
)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
-
Administrador do Eventarc (
Anote as propriedades da conta de serviço padrão do Compute Engine, porque você vai anexá-la a um gatilho do Eventarc para representar a identidade do acionador para fins de teste. Essa conta de serviço é criada automaticamente depois de ativar ou usar um serviço do Google Cloud que usa o Compute Engine e com o seguinte formato de e-mail:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
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)'
Para ambientes de produção, é altamente recomendável criar uma nova conta de serviço, conceder a ela um ou mais papéis do IAM que contenham as permissões mínimas necessárias, bem como seguir o princípio de privilégio mínimo.
- Conceda o
papel de receptor de eventos
do Eventarc (
roles/eventarc.eventReceiver
) no projeto à conta de serviço padrão do Compute Engine para que o gatilho do Eventarc possa receber eventos de provedores de eventos.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/eventarc.eventReceiver
- Conceda o papel Invocador do fluxo de trabalho (
roles/workflows.invoker
) no projeto à conta de serviço padrão do Compute Engine para que ela tenha permissão para acionar a execução do seu fluxo de trabalho.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/workflows.invoker
- Conceda o papel Gravador de registros do Logging (
roles/logging.logWriter
) no projeto à conta de serviço padrão do Compute Engine para que o fluxo de trabalho possa enviar registros ao Cloud Logging.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/logging.logWriter
- Antes de criar um gatilho para eventos diretos do Cloud Storage,
conceda o papel de publisher do
Pub/Sub (
roles/pubsub.publisher
) ao agente de serviço do Cloud Storage:SERVICE_ACCOUNT="$(gcloud storage service-agent --project=PROJECT_ID)" gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:${SERVICE_ACCOUNT}" \ --role='roles/pubsub.publisher'
- 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
Crie um bucket do Cloud Storage
Crie um bucket do Cloud Storage para usar como origem do evento:
gsutil mb -l us-central1 gs://${PROJECT_ID}-bucket/
Criar e implantar um fluxo de trabalho
Crie e implante um fluxo de trabalho que seja executado quando um objeto criado no bucket do Cloud Storage acionará um fluxo de trabalho com uma solicitação HTTP.
No diretório inicial, crie um novo arquivo chamado
myEventWorkflow.yaml
oumyEventWorkflow.json
.Copie e cole o seguinte no novo arquivo e salve:
YAML
main: params: [event] steps: - log_event: call: sys.log args: text: ${event} severity: INFO - extract_bucket_object: assign: - bucket: ${event.data.bucket} - object: ${event.data.name} - return_bucket_object: return: bucket: ${bucket} object: ${object}
JSON
{ "main": { "params": [ "event" ], "steps": [ { "log_event": { "call": "sys.log", "args": { "text": "${event}", "severity": "INFO" } } }, { "extract_bucket_object": { "assign": [ { "bucket": "${event.data.bucket}" }, { "object": "${event.data.name}" } ] } }, { "return_bucket_object": { "return": { "bucket": "${bucket}", "object": "${object}" } } } ] } }
Implante o fluxo de trabalho:
export MY_WORKFLOW=myEventWorkflow gcloud workflows deploy ${MY_WORKFLOW} --source=myEventWorkflow.yaml
Substitua
.yaml
por.json
se você tiver copiado a versão JSON do fluxo de trabalho do exemplo.
Criar um gatilho do Eventarc
O gatilho do Eventarc envia eventos do bucket do Cloud Storage para o destino do Workflows.
Crie um gatilho que filtre eventos do Cloud Storage:
gcloud eventarc triggers create storage-events-trigger \ --destination-workflow=${MY_WORKFLOW} \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=${PROJECT_ID}-bucket" \ --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"
Isso gera um gatilho chamado
storage-events-trigger
.Ao criar um gatilho do Eventarc pela primeira vez em um projeto do Google Cloud, pode haver um atraso no provisionamento do agente de serviço do Eventarc. Esse problema geralmente pode ser resolvido ao tentar criar o acionador novamente. Para mais informações, consulte Erros de permissão negada.
Para confirmar se
storage-events-trigger
foi criado, execute:gcloud eventarc triggers describe storage-events-trigger --location=${TRIGGER_LOCATION}
A saída será semelhante à seguinte listando o horário de criação e o local do acionador:
createTime: '2021-10-14T15:15:43.872360951Z' [...] name: projects/PROJECT_ID/locations/us-central1/triggers/storage-events-trigger
Gerar e visualizar um evento
Para gerar um evento, faça upload de um arquivo de texto para o Cloud Storage.
echo "Hello World" > random.txt gsutil cp random.txt gs://${PROJECT_ID}-bucket/random.txt
O upload gera um evento que é passado como um argumento de ambiente de execução para o fluxo de trabalho, que retorna os nomes do bucket de armazenamento e do arquivo enviado.
Para verificar se uma execução de fluxos de trabalho foi acionada, liste as últimas cinco execuções:
gcloud workflows executions list ${MY_WORKFLOW} --limit=5
O resultado vai ser semelhante a este, listando um NOME e ESTADO igual a
SUCCEEDED
para cada execução de fluxo de trabalho:NAME: projects/606789101455/locations/us-central1/workflows/myFirstWorkflow/executions/8c02b8f1-8836-4a6d-99d9-fc321eb9668f STATE: SUCCEEDED START_TIME: 2021-10-13T03:38:03.019148617Z END_TIME: 2021-10-13T03:38:03.249705805Z NAME: projects/606789101455/locations/us-central1/workflows/myFirstWorkflow/executions/a6319d9d-36a6-4117-904e-3d1118bdc90a STATE: SUCCEEDED START_TIME: 2021-10-13T17:28:51.492864252Z END_TIME: 2021-10-13T17:28:52.227212414Z
Observe que, no campo
NAME
do exemplo anterior,a6319d9d-36a6-4117-904e-3d1118bdc90a
é o ID da execução do fluxo de trabalho. Copie o ID de execução usado na próxima etapa.Para ver o status da execução, execute o seguinte comando:
gcloud workflows executions describe WORKFLOW_EXECUTION_ID --workflow=${MY_WORKFLOW}
Substitua
WORKFLOW_EXECUTION_ID
pelo ID da execução do fluxo de trabalho que corresponde ao momento em que o arquivo foi enviado para o bucket.O resultado será assim:
argument: [...] name: projects/218898424763/locations/us-central1/workflows/myEventWorkflow/executions/86d2567b-0f1e-49b3-8b10-cdac5d0f6239 result: '{"bucket":"PROJECT_ID-bucket","object":"random.txt"}' startTime: '2021-10-13T03:38:03.019148617Z' state: SUCCEEDED
Verifique se o horário
"timeCreated": "2021-10-13T03:38"
em que o bucket do Cloud Storage foi atualizado e ostartTime
da execução do fluxo de trabalho correspondem entre si.
Parabéns! Você gerou um evento do Cloud Storage que acionou um receptor de eventos do Workflows usando o Eventarc.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados nesta página, exclua o projeto do Google Cloud com esses recursos.
Exclua o fluxo de trabalho que você criou:
gcloud workflows delete ${MY_WORKFLOW}
Quando perguntar se você quer continuar, digite
y
:Exclua o bucket de armazenamento:
gsutil rm -r gs://${PROJECT_ID}-bucket/
Exclua o fluxo de trabalho criado neste tutorial:
gcloud eventarc triggers delete storage-events-trigger
Se preferir, exclua o projeto do Google Cloud para evitar cobranças. A exclusão do projeto do Google Cloud interrompe o faturamento de todos os recursos usados nele.
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID