Neste documento, descrevemos como usar o Terraform e o recurso
google_eventarc_trigger
para criar gatilhos do Eventarc para os seguintes destinos Google Cloud:
Para mais informações sobre como usar o 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 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.
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 para implantar o Terraform
Antes de implantar recursos do Terraform, você precisa criar um arquivo de configuração do Terraform. Um arquivo de configuração do Terraform permite definir o estado final de sua preferência para a infraestrutura usando a sintaxe do Terraform.
Preparar o Cloud Shell
No Cloud Shell, defina o projeto padrão do Google Cloud 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 projeto Google Cloud .
As variáveis de ambiente sã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 a 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 vez. No entanto, é 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 doGoogle 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
Cada gatilho do Eventarc é associado a uma conta de serviço do IAM no momento da criação. Use o código abaixo 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 em ou antes de 8 de abril de 2021 e a conta de serviço não tem
a função de agente de serviço do Cloud Pub/Sub
(roles/pubsub.serviceAgent
), conceda a
função 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_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" }
GKE;
Antes de criar a conta de serviço, ative o Eventarc para gerenciar clusters do GKE:
Crie a conta de serviço:
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 em ou antes de 8 de abril de 2021 e a conta de serviço não tem a
função de agente de serviço do Cloud Pub/Sub
(roles/pubsub.serviceAgent
), conceda a
função 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_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" }
Criar um bucket do Cloud Storage como um provedor de eventos
Use o código abaixo para criar um bucket do Cloud Storage e conceder o papel de editor do
Pub/Sub (roles/pubsub.publisher
) ao agente de serviço do Cloud Storage.
Cloud Run
GKE;
Fluxos de trabalho
Criar 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 destino de evento fora do Terraform, entre a aplicação das configurações do Terraform.
Se você ainda não criou um acionador 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
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 de eventos para um
destino de evento. Use o recurso
google_eventarc_trigger
para especificar atributos do CloudEvents no 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íficos.
Eventos que correspondam a todos os filtros são enviados para o destino.
Cloud Run
Crie um gatilho do Eventarc que roteie eventos do Cloud Storage
para o serviço hello-event
do Cloud Run.
GKE;
Crie 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.
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!".
Verificar a criação de recursos
Cloud Run
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
GKE;
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
Fluxos de trabalho
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
Gerar e visualizar um evento
É possível gerar um evento e confirmar se o gatilho do Eventarc está funcionando conforme o esperado.
Extraia o nome do bucket do Cloud Storage que você criou:
gcloud storage ls
Faça upload de um arquivo de texto para o bucket do Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://BUCKET_NAME/random.txt
Substitua
BUCKET_NAME
pelo nome do bucket do Cloud Storage que você extraiu 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.finalized."'
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-cloudrun-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 google.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 $EXECUTION_NAME
Confirme 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' state: SUCCEEDED ...
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 do Google Cloud interrompe o faturamento de todos os recursos usados nele.
- 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.