Este documento descreve como usar o Terraform e o recurso
google_eventarc_trigger
para criar acionadores do Eventarc para os seguintes destinos Google Cloud:
Para mais informações sobre a utilização do Terraform, consulte a documentação do Terraform no Google Cloud.
Os exemplos de código neste guia encaminham eventos diretos do Cloud Storage, mas podem ser adaptados para qualquer fornecedor de eventos. Por exemplo, para saber como encaminhar eventos diretos do Pub/Sub para o Cloud Run, consulte o 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Resource Manager and Identity and Access Management (IAM) APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
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 gerir clusters do GKE:
Crie a conta de serviço:
Se não tiver criado um acionador neste Google Cloud projeto anteriormente, execute o seguinte comando para criar o agente do serviço Eventarc:
gcloud beta services identity create --service eventarc.googleapis.com
Crie um cluster do GKE:
Implemente um serviço Kubernetes no GKE que receba pedidos HTTP e registe eventos através de uma imagem do Cloud Run pré-criada:
us-docker.pkg.dev/cloudrun/container/hello
Obtenha credenciais de autenticação para interagir com o cluster:
gcloud container clusters get-credentials eventarc-cluster \ --region=us-central1
Crie uma implementação com o nome
hello-gke
:kubectl create deployment hello-gke \ --image=us-docker.pkg.dev/cloudrun/container/hello
Exponha a implementação como um serviço do Kubernetes:
kubectl expose deployment hello-gke \ --type ClusterIP --port 80 --target-port 8080
Certifique-se de que o pod está em execução:
kubectl get pods
O resultado deve ser semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE hello-gke-5b6574b4db-rzzcr 1/1 Running 0 2m45s
Se o valor de
STATUS
forPending
ouContainerCreating
, o pod está a ser implementado. Aguarde um minuto para que a implementação seja concluída e verifique novamente o estado.Certifique-se de que o serviço está em execução:
kubectl get svc
O resultado deve ser semelhante ao seguinte:
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. Só tem de fazer isto uma vez por diretório.
terraform init
Opcionalmente, para usar a versão mais recente do fornecedor Google, inclua a opção
-upgrade
:terraform init -upgrade
Reveja a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expetativas:
terraform plan
Faça as correções necessárias à configuração.
Aplique a configuração do Terraform executando o seguinte comando e introduzindo
yes
no comando:terraform apply
Aguarde até que o Terraform apresente a mensagem "Apply complete!" (Aplicação concluída!).
Confirme que o serviço foi criado:
gcloud run services list --region us-central1
Confirme que o acionador foi criado:
gcloud eventarc triggers list --location us-central1
O resultado deve ser semelhante ao seguinte:
NAME: trigger-storage-cloudrun-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: Cloud Run service: hello-events ACTIVE: Yes LOCATION: us-central1
Confirme que o serviço foi criado:
kubectl get service hello-gke
Confirme que o acionador foi criado:
gcloud eventarc triggers list --location us-central1
O resultado deve ser semelhante ao seguinte:
NAME: trigger-storage-gke-tf TYPE: google.cloud.storage.object.v1.finalized DESTINATION: GKE: hello-gke ACTIVE: Yes LOCATION: us-central1
Confirme que o fluxo de trabalho foi criado:
gcloud workflows list --location us-central1
Confirme que o acionador do Eventarc foi criado:
gcloud eventarc triggers list --location us-central1
O resultado deve ser semelhante ao seguinte:
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 contentor do Cloud Storage que criou anteriormente:
gcloud storage ls
Carregue um ficheiro de texto para o contentor do Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://BUCKET_NAME/random.txt
Substitua
BUCKET_NAME
pelo nome do contentor do Cloud Storage que obteve no passo anterior. Por exemplo:gcloud storage cp random.txt gs://BUCKET_NAME/random.txt
O carregamento gera um evento e o serviço de receção de eventos regista a mensagem do evento.
Verifique se um evento é recebido:
Cloud Run
Filtre as entradas de registo criadas pelo seu serviço:
gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.storage.object.v1.finalized."'
Procure uma entrada de registo semelhante à seguinte:
Received event of type google.cloud.storage.object.v1.finalized. Event data: { "kind": "storage#object", "id": "trigger-cloudrun-BUCKET_NAME/random.txt", ...}
GKE
Encontre o ID do pod:
POD_NAME=$(kubectl get pods -o custom-columns=":metadata.name" --no-headers)
Este comando usa a saída formatada do
kubectl
.Verifique os registos do pod:
kubectl logs $POD_NAME
Procure uma entrada de registo semelhante à seguinte:
{"severity":"INFO","eventType":"google.cloud.storage.object.v1.finalized","message": "Received event of type google.cloud.storage.object.v1.finalized. Event data: ...}
Workflows
Verifique se a execução de fluxos de trabalho é acionada listando as últimas cinco execuções:
gcloud workflows executions list storage-workflow-tf --limit=5
O resultado deve incluir uma lista de execuções com um
NAME
,STATE
,START_TIME
eEND_TIME
.Obtenha 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 $EXECUTION_NAME
Confirme se o resultado é semelhante ao seguinte:
... result: '"Received event google.cloud.storage.object.v1.finalized - BUCKET_NAME, random.txt"' startTime: '2024-12-13T17:23:50.451316533Z' 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 no ambiente do Cloud Shell e pode usar o Cloud Shell para implementar os seus recursos do Terraform sem ter de instalar o Terraform.
Prepare-se para implementar o Terraform
Antes de implementar quaisquer recursos do Terraform, tem de criar um ficheiro de configuração do Terraform. Um ficheiro de configuração do Terraform permite-lhe definir o estado final preferido para a sua infraestrutura através da sintaxe do Terraform.
Prepare o Cloud Shell
No Cloud Shell, defina o projeto Google Cloud predefinido onde quer aplicar as configurações do Terraform. Só tem de executar este comando uma vez por projeto e pode executá-lo em qualquer diretório:
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Substitua PROJECT_ID
pelo ID do seu Google Cloud projeto.
Tenha em atenção que as variáveis de ambiente são substituídas se definir valores explícitos no ficheiro de configuração do Terraform.
Prepare o diretório
Cada ficheiro de configuração do Terraform tem de ter o seu próprio diretório (também denominado módulo raiz). No Cloud Shell, crie um diretório e um novo ficheiro nesse diretório:
mkdir DIRECTORY && cd DIRECTORY && touch main.tf
O nome do ficheiro tem de ter a extensão .tf
. Por exemplo, neste documento, o ficheiro é referido como main.tf
.
Defina a configuração do Terraform
Copie os exemplos de código do Terraform aplicáveis para o ficheiro main.tf
recém-criado. Opcionalmente, pode copiar o código do GitHub. Isto é recomendado quando o fragmento do Terraform faz parte de uma solução completa.
Normalmente, aplica toda a configuração de uma só vez. No entanto, também pode segmentar um recurso específico. Por exemplo:
terraform apply -target="google_eventarc_trigger.default"
Tenha em atenção que os exemplos de código do Terraform usam a interpolação para substituições, como variáveis de referência, atributos de recursos e funções de chamada.
Ativar APIs
Normalmente, os exemplos do Terraform partem do princípio de que as APIs necessárias estão ativadas no seu Google Cloud projeto. Use o seguinte código para ativar as APIs:
Cloud Run
GKE
Workflows
Crie uma conta de serviço e configure o respetivo acesso
Cada acionador do Eventarc está associado a uma conta de serviço do IAM no momento em que o acionador é criado. Use o seguinte código para criar uma conta de serviço dedicada e conceder à conta de serviço gerida pelo utilizador funções de gestão de identidade e de acesso específicas para gerir 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 a 8 de abril de 2021 ou antes, e a conta de serviço não tiver a função de agente de serviço do Cloud Pub/Sub (roles/pubsub.serviceAgent
), conceda a função de criador de tokens de conta de serviço (roles/iam.serviceAccountTokenCreator
) ao agente de serviço. Para mais informações, consulte o artigo
Crie e conceda funções 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_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" }
GKE
Workflows
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 a 8 de abril de 2021 ou antes, e a conta de serviço não tiver a função de agente de serviço do Cloud Pub/Sub (roles/pubsub.serviceAgent
), conceda a função de criador de tokens de conta de serviço (roles/iam.serviceAccountTokenCreator
) ao agente de serviço. Para mais informações, consulte o artigo
Crie e conceda funções 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_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" }
Crie um contentor do Cloud Storage como fornecedor de eventos
Use o seguinte código para criar um contentor do Cloud Storage e conceder a
função de publicador do Pub/Sub (roles/pubsub.publisher
) ao
agente de serviço do Cloud Storage.
Cloud Run
GKE
Workflows
Crie um recetor de eventos para ser o destino do evento
Crie um recetor de eventos com um dos seguintes recursos do Terraform:
Cloud Run
Crie um serviço do Cloud Run como um destino de eventos para o acionador 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 de configurações do Terraform.
Workflows
Implemente um fluxo de trabalho que é executado quando um objeto é atualizado no contentor do Cloud Storage:
Defina um acionador do Eventarc
Um acionador do Eventarc encaminha eventos de um fornecedor de eventos para um destino de eventos. Use o recurso
google_eventarc_trigger
para especificar atributos CloudEvents no matching_criteria
e filtrar os eventos. Para mais informações, siga as instruções quando criar um acionador para um fornecedor, um tipo de evento e um destino específicos.
Os eventos que correspondem a todos os filtros são enviados para o destino.
Cloud Run
Crie um acionador do Eventarc que encaminhe eventos do Cloud Storage para o serviço do Cloud Run.hello-event
GKE
Crie um acionador do Eventarc que encaminhe eventos do Cloud Storage para o serviço do GKE.hello-gke
Workflows
Crie um acionador do Eventarc que encaminhe eventos do Cloud Storage para o fluxo de trabalho denominado storage-workflow-tf
.
Aplique o Terraform
Use a CLI do Terraform para aprovisionar a infraestrutura com base no ficheiro de configuração.
Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
Valide a criação de recursos
Cloud Run
GKE
Workflows
Gere e veja um evento
Pode gerar um evento e confirmar se o acionador do Eventarc está a funcionar conforme esperado.
Limpar
Remova os recursos aplicados anteriormente com a sua configuração do Terraform executando o seguinte comando e introduzindo yes
no comando:
terraform destroy
Também pode eliminar o seu Google Cloud projeto para evitar incorrer em custos. A eliminação do seu Google Cloud projeto interrompe a faturação de todos os recursos usados nesse projeto.