1. Introdução

Com o Cloud Run, é possível executar contêineres sem estado em um ambiente totalmente gerenciado. Ele foi criado com base no Knative de código aberto, permitindo que você execute seus contêineres totalmente gerenciados com o Cloud Run ou no cluster do Google Kubernetes Engine com o Cloud Run for Anthos.

O Eventarc facilita a conexão de vários serviços (Cloud Run, Cloud Functions, Workflows) com eventos de várias fontes. Ele permite criar arquiteturas orientadas a eventos em que os microsserviços são distribuídos e têm acoplamento flexível. Ele também cuida da ingestão, entrega, segurança, autorização e tratamento de erros de eventos, o que melhora a agilidade do desenvolvedor e a resiliência do aplicativo.
Neste codelab, você vai aprender sobre o Eventarc. Mais especificamente, você vai detectar eventos do Pub/Sub, do Cloud Storage e dos registros de auditoria do Cloud com o Eventarc e transmiti-los para um serviço do Cloud Run.
O que você vai aprender
- Visão do Eventarc
- Descobrir eventos no Eventarc
- Criar um coletor do Cloud Run
- Criar um gatilho para o Pub/Sub
- Criar um gatilho para o Cloud Storage
- Criar um gatilho para registros de auditoria do Cloud
- Conhecer a interface do Eventarc
2. Visão do Eventarc
O objetivo do Eventarc é entregar eventos de várias fontes do Google, do Google Cloud e de terceiros para destinos de eventos do Google Cloud.

Fontes do Google Cloud | Fontes de eventos que são produtos do Google Cloud |
Fontes do Google | Fontes de eventos que são produtos do Google, como Gmail, Hangouts, Gerenciamento do Android e muito mais |
Origens personalizadas | Fontes de eventos que não são produtos do Google e são criadas pelos próprios usuários finais |
Fontes de terceiros | Fontes de eventos que não são de propriedade do Google nem produzidas pelo cliente. Isso inclui fontes de eventos conhecidas, como Check Point CloudGuard, Datadog, ForgeRock, Lacework etc., que são de propriedade e mantidas por provedores e parceiros terceirizados. |
Os eventos são normalizados para o formato CloudEvents v1.0 para interoperabilidade entre serviços. O CloudEvents é uma especificação aberta independente de fornecedor que descreve dados de eventos em formatos comuns, permitindo a interoperabilidade entre serviços, plataformas e sistemas.
3. Configuração e requisitos
Configuração de ambiente autoguiada
- Faça login no Console do Google Cloud e crie um novo projeto ou reutilize um existente. Crie uma conta do Gmail ou do Google Workspace, se ainda não tiver uma.



- O Nome do projeto é o nome de exibição para os participantes do projeto. Ele é uma string de caracteres que não é usada pelas APIs do Google e pode ser atualizada a qualquer momento.
- O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud e não pode ser alterado após a definição. O Console do Cloud gera automaticamente uma string única, geralmente não importa o que seja. Na maioria dos codelabs, você precisará fazer referência ao ID do projeto, que geralmente é identificado como
PROJECT_ID. Então, se você não gostar dele, gere outro ID aleatório ou crie um próprio e veja se ele está disponível. Em seguida, ele fica "congelado" depois que o projeto é criado. - Há um terceiro valor, um Número de projeto, que algumas APIs usam. Saiba mais sobre esses três valores na documentação.
- Em seguida, você precisará ativar o faturamento no Console do Cloud para usar os recursos/APIs do Cloud. A execução deste codelab não será muito cara, se tiver algum custo. Para encerrar os recursos e não gerar cobranças além deste tutorial, siga as instruções de "limpeza" encontradas no final do codelab. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.
Inicie o Cloud Shell
Embora o Google Cloud e o Spanner possam ser operados remotamente do seu laptop, neste codelab usaremos o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.
No Console do GCP, clique no ícone do Cloud Shell na barra de ferramentas localizada no canto superior direito:

O provisionamento e a conexão com o ambiente levarão apenas alguns instantes para serem concluídos: Quando o processamento for concluído, você verá algo como:

Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Todo o trabalho neste laboratório pode ser feito apenas com um navegador.
Antes de começar
No Cloud Shell, verifique se o ID do projeto está configurado:
PROJECT_ID=your-project-id gcloud config set project $PROJECT_ID
4. Implantar um serviço do Cloud Run
Implante um serviço do Cloud Run para receber eventos. Você vai implantar o contêiner Hello do Cloud Run, que registra o conteúdo dos CloudEvents.
Primeiro, ative os serviços necessários para o Cloud Run:
gcloud services enable run.googleapis.com
Implante o contêiner hello no Cloud Run:
REGION=us-central1 SERVICE_NAME=hello gcloud run deploy $SERVICE_NAME \ --allow-unauthenticated \ --image=gcr.io/cloudrun/hello \ --region=$REGION
Em caso de sucesso, a linha de comando exibe o URL de serviço. Abra o URL do serviço em qualquer janela do navegador para verificar se ele foi implantado.
5. Descoberta de eventos
Antes de criar gatilhos no Eventarc, descubra quais são as origens de eventos, os tipos de eventos que elas podem emitir e como configurar gatilhos para consumi-los.
Para ver a lista de diferentes tipos de eventos:
gcloud beta eventarc attributes types list NAME DESCRIPTION google.cloud.audit.log.v1.written Cloud Audit Log written google.cloud.pubsub.topic.v1.messagePublished Cloud Pub/Sub message published google.cloud.storage.object.v1.archived Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted. google.cloud.storage.object.v1.deleted Cloud Storage: Sent when an object has been permanently deleted. google.cloud.storage.object.v1.finalized Cloud Storage: Sent when a new object (or a new generation of an existing object). google.cloud.storage.object.v1.metadataUpdated Cloud Storage: Sent when the metadata of an existing object changes.
Para mais informações sobre cada tipo de evento:
gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written attributes: type,serviceName,methodName,resourceName description: 'Cloud Audit Log: Sent when a log is written.' name: google.cloud.audit.log.v1.written
Para ver a lista de serviços que emitem um determinado tipo de evento:
gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written SERVICE_NAME DISPLAY_NAME accessapproval.googleapis.com Access Approval accesscontextmanager.googleapis.com Access Context Manager admin.googleapis.com Google Workspace Admin aiplatform.googleapis.com AI Platform (under Vertex AI) apigee.googleapis.com Apigee apigeeconnect.googleapis.com Apigee Connect ... workflows.googleapis.com Workflows
Para conferir a lista de nomes de métodos (subeventos) que cada serviço pode emitir:
gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com METHOD_NAME google.cloud.workflows.v1.Workflows.CreateWorkflow google.cloud.workflows.v1.Workflows.DeleteWorkflow google.cloud.workflows.v1.Workflows.GetWorkflow google.cloud.workflows.v1.Workflows.ListWorkflows google.cloud.workflows.v1.Workflows.UpdateWorkflow google.cloud.workflows.v1beta.Workflows.CreateWorkflow google.cloud.workflows.v1beta.Workflows.DeleteWorkflow google.cloud.workflows.v1beta.Workflows.GetWorkflow google.cloud.workflows.v1beta.Workflows.ListWorkflows google.cloud.workflows.v1beta.Workflows.UpdateWorkflow
6. Criar um gatilho do Pub/Sub
Uma forma de receber eventos é pelo Cloud Pub/Sub. Qualquer aplicativo pode publicar mensagens no Pub/Sub, e essas mensagens podem ser entregues ao Cloud Run via Eventarc.
Configuração
Antes de criar gatilhos, ative os serviços necessários para o Eventarc:
gcloud services enable eventarc.googleapis.com
Você também precisa de uma conta de serviço para ser usada por gatilhos. Crie uma conta de serviço:
SERVICE_ACCOUNT=eventarc-trigger-sa gcloud iam service-accounts create $SERVICE_ACCOUNT
Criar
Crie um gatilho para filtrar eventos publicados no tópico do Pub/Sub para o serviço do Cloud Run implantado:
TRIGGER_NAME=trigger-pubsub gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Teste
O gatilho do Pub/Sub cria um tópico nos bastidores. Vamos descobrir e atribuir a uma variável:
TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')
Use gcloud para publicar uma mensagem no tópico:
gcloud pubsub topics publish $TOPIC_ID --message="Hello World"
O serviço do Cloud Run registra o corpo da mensagem recebida. Você pode conferir isso na seção "Registros" da sua instância do Cloud Run:

Criar com um tópico do Pub/Sub
Por padrão, quando você cria um gatilho do Pub/Sub, o Eventarc cria um tópico em segundo plano para você usar como um tópico de transporte entre o aplicativo e um serviço do Cloud Run. Isso é útil para criar um gatilho com suporte do Pub/Sub de maneira fácil e rápida, mas às vezes você quer usar um tópico existente. O Eventarc permite especificar um tópico do Pub/Sub no mesmo projeto com a flag --transport-topic do gcloud.
Para entender como isso funciona, crie um tópico do Pub/Sub para usar como tópico de transporte:
TOPIC_ID=eventarc-topic gcloud pubsub topics create $TOPIC_ID
Crie um gatilho:
TRIGGER_NAME=trigger-pubsub-existing gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --location=$REGION \ --transport-topic=projects/$PROJECT_ID/topics/$TOPIC_ID \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Para testar o gatilho, envie uma mensagem para o tópico:
gcloud pubsub topics publish $TOPIC_ID --message="Hello again"
7. Criar um gatilho do Cloud Storage
Nesta etapa, você vai criar um gatilho para detectar eventos do Cloud Storage.
Configuração
Primeiro, crie um bucket para receber eventos:
BUCKET_NAME=eventarc-gcs-$PROJECT_ID gsutil mb -l $REGION gs://$BUCKET_NAME
Conceda o papel eventarc.eventReceiver para que a conta de serviço possa ser usada em um gatilho do Cloud Storage:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --role roles/eventarc.eventReceiver \ --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Também é necessário adicionar a função pubsub.publisher à conta de serviço do Cloud Storage para gatilhos do Cloud Storage:
SERVICE_ACCOUNT_STORAGE=$(gsutil kms serviceaccount -p $PROJECT_ID)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$SERVICE_ACCOUNT_STORAGE \
--role roles/pubsub.publisher
Criar
Crie um gatilho para rotear novos eventos de criação de arquivos do bucket para seu serviço:
TRIGGER_NAME=trigger-storage gcloud eventarc triggers create $TRIGGER_NAME \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=$BUCKET_NAME" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Teste
Liste todos os gatilhos para confirmar que o gatilho foi criado com sucesso:
gcloud eventarc triggers list
Faça upload de um arquivo para o bucket do Cloud Storage:
echo "Hello World" > random.txt gsutil cp random.txt gs://$BUCKET_NAME/random.txt
Se você verificar os registros do serviço do Cloud Run no Console do Cloud, verá o evento recebido:

8. Criar um gatilho dos Registros de auditoria do Cloud
Embora o gatilho do Cloud Storage seja a melhor maneira de detectar eventos do Cloud Storage, nesta etapa, você vai criar um gatilho de registro de auditoria do Cloud para fazer o mesmo.
Configuração
Para receber eventos de um serviço, é necessário ativar os registros de auditoria do Cloud. No Console do Cloud, selecione IAM & Admin e Audit Logs no menu superior esquerdo. Na lista de serviços, marque Google Cloud Storage:

No lado direito, verifique se Admin, Read e Write estão selecionados e clique em Save:

Criar
Crie um gatilho para rotear novos eventos de criação de arquivos do bucket para seu serviço:
TRIGGER_NAME=trigger-auditlog-storage gcloud eventarc triggers create $TRIGGER_NAME\ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \ --location=$REGION \ --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
Teste
Os gatilhos de registros de auditoria levam um pouco de tempo para serem inicializados. Para verificar se o gatilho foi criado, liste todos os gatilhos:
gcloud eventarc triggers list
Você vai ver que o campo ACTIVE é Yes:
NAME TYPE DESTINATION ACTIVE trigger-auditlog-storage google.cloud.audit.log.v1.written Cloud Run service: hello Yes
Faça upload do mesmo arquivo para o bucket do Cloud Storage como fez antes:
gsutil cp random.txt gs://$BUCKET_NAME/random.txt
Se você verificar os registros do serviço do Cloud Run no Console do Cloud, verá o evento recebido:

9. Conhecer a interface do Eventarc
Nesta etapa, você vai conhecer a interface do Eventarc no console do Google Cloud. Na interface do Eventarc, é possível ter uma visão geral de todos os gatilhos, editá-los e excluí-los, além de criar novos gatilhos no console do Google Cloud.
Acesse a seção Eventarc do Google Cloud:

Você vai ver a lista de gatilhos criados anteriormente:

Ao clicar em um gatilho, você pode conferir os detalhes dele, editar ou excluir:

Também é possível criar um acionador selecionando Create trigger e preenchendo os detalhes dele:

10. Parabéns!
Parabéns por concluir o codelab.
O que aprendemos
- Visão do Eventarc
- Descobrir eventos no Eventarc
- Criar um coletor do Cloud Run
- Criar um gatilho para o Pub/Sub
- Criar um gatilho para o Cloud Storage
- Criar um gatilho para registros de auditoria do Cloud
- Conhecer a interface do Eventarc