1. Introdução
O Cloud Run permite 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 de forma totalmente gerenciada com o Cloud Run ou em um 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, Workfklows) com eventos de diversas fontes. Ele permite criar arquiteturas orientadas a eventos em que os microsserviços são acoplados com flexibilidade e distribuídos. Ele também cuida da ingestão, da entrega, da segurança, da autorização e do tratamento de erros de eventos para você, o que melhora a agilidade do desenvolvedor e a resiliência de aplicativos.
Neste codelab, você vai aprender sobre o Eventarc. Mais especificamente, você vai detectar eventos do Pub/Sub, Cloud Storage e 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
- Crie um coletor do Cloud Run
- Criar um gatilho para o Pub/Sub
- Criar um gatilho para o Cloud Storage
- Criar um gatilho para os Registros de auditoria do Cloud
- Conhecer a interface do Eventarc
2. Visão do Eventarc
O objetivo do Eventarc é entregar eventos de várias origens de eventos do Google, do Google Cloud e de terceiros para destinos do Google Cloud.
Origens do Google Cloud | Origens de eventos que são produtos do Google Cloud |
Fontes do Google | Origens de eventos que são produtos do Google, como Gmail, Hangouts, Gerenciamento do Android e muito mais |
Origens personalizadas | Origens de eventos que não são produtos do Google e são criadas pelos próprios usuários finais |
Fontes de terceiros | Origens 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 pertencem e são mantidos 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ê 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. É possível abrir o URL do serviço em qualquer janela do navegador para verificar se o serviço foi implantado.
5. Descoberta de eventos
Antes de criar gatilhos no Eventarc, você pode descobrir quais são as origens, os tipos de eventos que podem emitir e como configurar gatilhos para consumi-los.
Para ver a lista com 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 conferir 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 ver a lista de nomes de método (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 maneira de receber eventos é pelo Cloud Pub/Sub. Qualquer aplicativo pode publicar mensagens no Pub/Sub, e essas mensagens podem ser entregues ao Cloud Run pelo 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 pelos 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 no serviço implantado do Cloud Run:
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. É possível conferir isso na seção "Registros" da instância do Cloud Run:
Criar com um tópico existente do Pub/Sub
Por padrão, quando você cria um gatilho do Pub/Sub, o Eventarc cria um tópico subjacente para você usar como um tópico de transporte entre seu aplicativo e um serviço do Cloud Run. Isso é útil para criar de maneira fácil e rápida um gatilho com suporte do Pub/Sub, mas às vezes você quer usar um tópico atual. O Eventarc permite especificar um tópico do Pub/Sub atual no mesmo projeto com a sinalização --transport-topic
da gcloud.
Para conferir 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 de:
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 o papel 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 acionadores para confirmar que eles foram criados:
gcloud eventarc triggers list
Faça upload de um arquivo no 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 do registro de auditoria do Cloud para fazer o mesmo.
Configuração
Para receber eventos de um serviço, você precisa 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, verifique 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 demoram um pouco para serem inicializados. Para verificar se o gatilho foi criado, liste todos os gatilhos:
gcloud eventarc triggers list
O campo ACTIVE
vai aparecer como 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 no bucket do Cloud Storage que você fez anteriormente:
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 e criar novos gatilhos no console do Google Cloud.
Acesse a seção do Eventarc no Google Cloud:
Você verá a lista de acionadores criados anteriormente:
Se clicar em um acionador, você poderá ver os detalhes dele, editá-lo ou excluí-lo:
Também é possível criar um novo 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
- Crie um coletor do Cloud Run
- Criar um gatilho para o Pub/Sub
- Criar um gatilho para o Cloud Storage
- Criar um gatilho para os Registros de auditoria do Cloud
- Conhecer a interface do Eventarc