Neste documento, descrevemos como usar o Terraform e o recurso
google_eventarc_trigger
para criar gatilhos do Eventarc para os seguintes Google Cloud
destinos:
Para mais informações sobre como usar o Terraform, consulte a documentação Terraform no Google Cloud.
Os exemplos de código neste guia encaminham eventos diretos do Cloud Storage, mas podem ser adaptados para qualquer provedor de eventos. Por exemplo, para saber como rotear eventos diretos do Pub/Sub para o Cloud Run, consulte o guia de início rápido do Terraform.
Antes de começar
- 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Resource Manager and Identity and Access Management (IAM) APIs.
-
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.
Antes de criar a conta de serviço, ative o Eventarc para gerenciar clusters do GKE:
Crie a conta de serviço:
Se você ainda não criou um gatilho neste projeto Google Cloud , execute o comando a seguir para criar o agente de serviço do Eventarc:
gcloud beta services identity create --service eventarc.googleapis.com
Crie um cluster do GKE:
Implante um serviço do Kubernetes no GKE que receberá solicitações HTTP e eventos de registro usando uma imagem pré-criada do Cloud Run,
us-docker.pkg.dev/cloudrun/container/hello
:Consiga as credenciais de autenticação para interagir com o cluster:
gcloud container clusters get-credentials eventarc-cluster \ --region=us-central1
Crie uma implantação chamada
hello-gke
:kubectl create deployment hello-gke \ --image=us-docker.pkg.dev/cloudrun/container/hello
Exponha a implantação como um serviço do Kubernetes:
kubectl expose deployment hello-gke \ --type ClusterIP --port 80 --target-port 8080
Verifique se o pod está em execução:
kubectl get pods
A saída será semelhante a esta:
NAME READY STATUS RESTARTS AGE hello-gke-5b6574b4db-rzzcr 1/1 Running 0 2m45s
Se
STATUS
forPending
ouContainerCreating
, o pod está sendo implantado. Aguarde um minuto até que a implantação seja concluída e verifique o status novamente.Verifique se o serviço está em execução:
kubectl get svc
A saída será semelhante a esta:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-gke ClusterIP 34.118.230.123 <none> 80/TCP 4m46s kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 14m
Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
terraform init
Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção
-upgrade
:terraform init -upgrade
Revise a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expectativas:
terraform plan
Faça as correções necessárias na configuração.
Para aplicar a configuração do Terraform, execute o comando a seguir e digite
yes
no prompt:terraform apply
Aguarde até que o Terraform exiba a mensagem "Apply complete!".
Confirme se o serviço foi criado:
gcloud run services list --region us-central1
Confirme se o gatilho foi criado:
gcloud eventarc triggers list --location us-central1
A saída será semelhante a esta:
NAME: trigger-storage-cloudrun-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Cloud Run service: hello-events ACTIVE: Yes LOCATION: us-central1
Confirme se o serviço foi criado:
kubectl get service hello-gke
Confirme se o gatilho foi criado:
gcloud eventarc triggers list --location us-central1
A saída será semelhante a esta:
NAME: trigger-storage-gke-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: GKE: hello-gke ACTIVE: Yes LOCATION: us-central1
Confirme se o fluxo de trabalho foi criado:
gcloud workflows list --location us-central1
Confirme se o gatilho do Eventarc foi criado:
gcloud eventarc triggers list --location us-central1
A saída será semelhante a esta:
NAME: trigger-storage-workflows-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Workflows: storage-workflow-tf ACTIVE: Yes LOCATION: us-central1
Recupere o nome do bucket do Cloud Storage criado anteriormente:
gcloud storage ls
Faça upload de um arquivo de texto para o bucket do Cloud Storage:
echo "Hello Wo>rld" random.txt gcloud storage cp random.txt gs://BUCKET_NAME/r
andom.txtSubstitua
BUCKET_NAME
pelo nome do bucket do Cloud Storage recuperado na etapa anterior. Exemplo:gcloud storage cp random.txt gs://BUCKET_NAME/random.txt
O upload gera um evento, e o serviço de receptor de eventos registra a mensagem do evento.
Verifique se um evento foi recebido:
Cloud Run
Filtre as entradas de registro criadas pelo seu serviço:
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.storage.object.v1.fina
lized."'Procure uma entrada de registro semelhante a esta:
Received event of type google.cloud.storage.object.v1.finalized. Event data: { "kind": "storage#object", "id": "trigger-clou
drun-BUCKET_NAME/random.txt", ...}
GKE
Encontre o ID do pod:
POD_NAME=$(kubectl get pods -o custom-columns=":metadata.name" --no
-headers)Esse comando usa a saída formatada de
kubectl
.Verifique os registros do pod:
kubectl logs $POD_NAME
Procure uma entrada de registro semelhante a esta:
{"severity":"INFO","eventType":"google.cloud.storage.object.v1.finalized","message": "Received event of type goog
le.cloud.storage.object.v1.finalized. Event data: ...}
Fluxos de trabalho
Liste as últimas cinco execuções para verificar se uma execução de fluxos de trabalho foi acionada:
gcloud workflows executions list storage-workflow-tf --limit=5
A saída precisa incluir uma lista de execuções com
NAME
,STATE
,START_TIME
eEND_TIME
.Consulte os resultados da execução mais recente:
EXECUTION_NAME=$(gcloud workflows executions list storage-workflow-tf --limit=1 --format "value(name)") gcloud workflows executions describe $EXECU
TION_NAMEConfirme se a saída é semelhante a esta:
... result: '"Received event google.cloud.storage.object.v1.finalized - BUCKET_NAME, random.txt"' startTime: '2024-12-13T17:23:50.451316533Z&
#39; state: SUCCEEDED ...
- 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.
O Terraform está integrado ao ambiente do Cloud Shell, e você pode usar o Cloud Shell para implantar seus recursos do Terraform sem precisar instalar o Terraform.
Preparar a implantação do Terraform
Antes de implantar qualquer recurso do Terraform, crie um arquivo de configuração do Terraform. Um arquivo de configuração do Terraform permite definir o estado final preferido para sua infraestrutura usando a sintaxe do Terraform.
Preparar o Cloud Shell
No Cloud Shell, defina o projeto Google Cloud padrão em que você quer aplicar as configurações do Terraform. Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório:
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Substitua PROJECT_ID
pelo ID do seu projeto Google Cloud .
As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.
Preparar o diretório
Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz. No Cloud Shell, crie um diretório e um novo arquivo nele:
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
O nome do arquivo precisa ter a extensão .tf
. Por exemplo, neste documento, o arquivo é chamado de main.tf
.
Definir sua configuração do Terraform
Copie os exemplos de código do Terraform aplicáveis para o arquivo
main.tf
recém-criado. Se preferir, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução de ponta a ponta.
Normalmente, você aplica toda a configuração de uma só vez. No entanto, também é possível segmentar um recurso específico. Exemplo:
terraform apply -target="google_eventarc_trigger.default"
Os exemplos de código do Terraform usam interpolação para substituições, como variáveis de referência, atributos de recursos e funções de chamada.
Ativar APIs
As amostras do Terraform geralmente presumem que as APIs necessárias estejam ativadas no seu projeto do Google Cloud . Use o código a seguir para ativar as APIs:
Cloud Run
GKE
Fluxos de trabalho
Criar uma conta de serviço e configurar o acesso dela
Cada gatilho do Eventarc é associado a uma conta de serviço do IAM no momento da criação. Use o código a seguir para criar uma conta de serviço dedicada e conceder à conta de serviço gerenciado pelo usuário papéis específicos do Identity and Access Management para gerenciar eventos:
Cloud Run
O agente de serviço do Pub/Sub é criado automaticamente quando a
API Pub/Sub é ativada. Se o agente de serviço do Pub/Sub foi
criado até 8 de abril de 2021 e a conta de serviço não tem
o papel de agente de serviço do Cloud Pub/Sub
(roles/pubsub.serviceAgent
), conceda o
papel de criador de tokens da conta de serviço (roles/iam.serviceAccountTokenCreator
)
ao agente de serviço. Para mais informações, consulte
Criar e conceder papéis a agentes de serviço.
resource "google_project_iam_member" "tokencreator" { project = data.google_project.project.id role = "roles/iam.serviceAccountTokenCreator" member = "serviceAccount:service-${data.google_proiam.gserviceaccount.comject.project.number}@gcp-sa-pubsub." }
GKE
Fluxos de trabalho
O agente de serviço do Pub/Sub é criado automaticamente quando a
API Pub/Sub é ativada. Se o agente de serviço do Pub/Sub foi
criado até 8 de abril de 2021 e a conta de serviço não tem o
papel Agente de serviço do Cloud Pub/Sub
(roles/pubsub.serviceAgent
), conceda o
papel Criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator
)
ao agente de serviço. Para mais informações, consulte
Criar e conceder papéis a agentes de serviço.
resource "google_project_iam_member" "tokencreator" { project = data.google_project.project.id role = "roles/iam.serviceAccountTokenCreator" member = "serviceAccount:service-${data.google_proiam.gserviceaccount.comject.project.number}@gcp-sa-pubsub." }
Criar um bucket do Cloud Storage como um provedor de eventos
Use o código a seguir para criar um bucket do Cloud Storage e conceder o
papel de publisher do
Pub/Sub (roles/pubsub.publisher
) ao
agente de serviço do Cloud Storage.
Cloud Run
GKE
Fluxos de trabalho
Crie um receptor de eventos para ser o destino do evento
Crie um receptor de eventos usando um dos seguintes recursos do Terraform:
Cloud Run
Crie um serviço do Cloud Run como destino do evento para o gatilho do Eventarc:
GKE
Para simplificar este guia, crie um serviço do Google Kubernetes Engine como um destino de eventos fora do Terraform, entre a aplicação das configurações do Terraform.
Fluxos de trabalho
Implante um fluxo de trabalho que seja executado quando um objeto for atualizado no bucket do Cloud Storage:
Definir um gatilho do Eventarc
Um gatilho do Eventarc encaminha eventos de um provedor para um
destino de evento. Use o recurso
google_eventarc_trigger
para especificar atributos do CloudEvents em matching_criteria
e filtrar os eventos. Para mais informações, siga as instruções ao
criar um gatilho para um provedor, tipo de evento e destino específico.
Eventos que correspondam a todos os filtros são enviados para o destino.
Cloud Run
Crie um gatilho do Eventarc que encaminhe eventos do Cloud Storage para o serviço do Cloud Run hello-event
.
GKE
Criar um gatilho do Eventarc que direcione eventos do Cloud Storage
para o serviço hello-gke
do GKE.
Fluxos de trabalho
Crie um gatilho do Eventarc que encaminha eventos do Cloud Storage
para o fluxo de trabalho chamado storage-workflow-tf
.
Aplicar o Terraform
Use a CLI do Terraform para provisionar a infraestrutura com base no arquivo de configuração.
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Verificar a criação de recursos
Cloud Run
GKE
Fluxos de trabalho
Gerar e visualizar um evento
É possível gerar um evento e confirmar se o gatilho do Eventarc está funcionando conforme o esperado.
Limpar
Remova os recursos aplicados anteriormente com a configuração do Terraform executando o seguinte comando e inserindo yes
no prompt:
terraform destroy
Também é possível excluir seu projeto do Google Cloud para evitar cobranças. A exclusão do projeto Google Cloud interrompe o faturamento de todos os recursos usados nele.