Neste documento, descrevemos como usar os recursos do Google Cloud no Terraform para
criar gatilhos do Eventarc usando os recursos google_eventarc_trigger
para os seguintes destinos:
- Cloud Run: use o recurso
google_cloud_run_v2_service
do Terraform. - Google Kubernetes Engine: use o recurso
google_container_cluster
do Terraform. - Workflows: use o recurso do Terraform
google_workflows_workflow
.
Os exemplos neste tutorial usam eventos diretos do Cloud Storage, mas podem ser adaptados para qualquer provedor de eventos. Para os fins deste tutorial, novos recursos são criados para ser a origem dos eventos.
Para recursos e orientações sobre como usar o Terraform, consulte a documentação do Terraform no Google Cloud.
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 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 Cloud Shell é um ambiente shell com o Terraform já integrado.
Criar gatilhos do Eventarc
É possível criar gatilhos do Eventarc usando o Terraform para destinos diferentes.
Este exemplo usa interpolação para substituições, como variáveis de referência, atributos de recursos e funções de chamada.
Cloud Run
Usando o Cloud Shell, implante seus recursos com o Terraform para criar acionadores do Eventarc.
1. Ativar as APIs
Use o código a seguir para ativar as APIs necessárias:
2. Criar uma conta de serviço e configurar o IAM
Use o código a seguir para criar uma conta de serviço dedicada e papéis do IAM:
Se você ativou o agente de serviço do Pub/Sub até 8 de abril
de 2021, conceda o papel iam.serviceAccountTokenCreator
a ele:
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"
}
3. Criar um bucket do Cloud Storage como um provedor de eventos
Use o código a seguir para criar um bucket do Cloud Storage com permissões relacionadas ao Eventarc:
4. Definir um serviço do Cloud Run como destino de evento
Criar um serviço do Cloud Run como destino do evento para o gatilho. Use o recurso google_cloud_run_v2_service
para definir um serviço do Cloud Run:
5. Definir um gatilho do Eventarc
Um gatilho do Eventarc conecta o provedor de eventos a um destino
de evento. Use o recurso google_eventarc_trigger
para
definir o provedor de eventos diretos do Cloud Storage, enviando para um
destino do Cloud Run.
É possível definir vários matching_criteria
com atributos do CloudEvents
compatíveis com o Eventarc que agem como o
event-filters
especificado ao criar um gatilho. Para mais informações, siga as instruções ao criar um gatilho para um provedor, tipo de evento e destino do Cloud Run específico.
Eventos que correspondam a todos os filtros são enviados para o destino.
6. Aplicar as alterações
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Para aplicar a configuração do Terraform em um projeto do Google Cloud, conclua as etapas nas seções a seguir.
Preparar o Cloud Shell
- Inicie o 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
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 dentro dele. O nome do arquivo precisa ter a extensão
.tf
, por exemplo,main.tf
. Neste tutorial, o arquivo é chamado demain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.
Copie o exemplo de código no
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.
- Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
- Salve as alterações.
-
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
Aplique as alterações
-
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!".
- Abra seu projeto do Google Cloud para ver os resultados. No console do Google Cloud, navegue até seus recursos na IU para verificar se foram criados ou atualizados pelo Terraform.
7. Verificar a criação de recursos
Para confirmar se o serviço foi criado:
gcloud run services list --region us-central1
Para confirmar 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
Usando o Cloud Shell, implante seus recursos com o Terraform para criar acionadores do Eventarc.
O gatilho do Eventarc requer um serviço do Google Kubernetes Engine. Para simplificar este tutorial, você vai configurar esse serviço fora do Terraform, entre a aplicação das configurações do Terraform.
1. Criar um cluster do GKE
Use o código a seguir para ativar as APIs necessárias:
Use o código a seguir para criar um cluster do GKE:
2. Aplicar as alterações
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Para aplicar a configuração do Terraform em um projeto do Google Cloud, conclua as etapas nas seções a seguir.
Preparar o Cloud Shell
- Inicie o 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
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 dentro dele. O nome do arquivo precisa ter a extensão
.tf
, por exemplo,main.tf
. Neste tutorial, o arquivo é chamado demain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.
Copie o exemplo de código no
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.
- Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
- Salve as alterações.
-
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
Aplique as alterações
-
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!".
- Abra seu projeto do Google Cloud para ver os resultados. No console do Google Cloud, navegue até seus recursos na IU para verificar se foram criados ou atualizados pelo Terraform.
3. Configurar o 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:x
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 hello-gke-df6469d4b-5vv22 1/1 Running
Se
STATUS
forPending
, 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.226.144 <none> 80/TCP kubernetes ClusterIP 34.118.224.1 <none> 443/TCP
4. Criar e configurar o Eventarc
Use a configuração a seguir para definir uma conta de serviço e conceder a ela papéis específicos para que o Eventarc gerencie eventos do GKE.
Use o código a seguir para criar um bucket do Cloud Storage com permissões relacionadas ao Eventarc:
Use a configuração a seguir para ativar as APIs necessárias e inicializar os serviços de destino do GKE do Eventarc:
Criar um gatilho do Eventarc que direcione eventos
do Pub/Sub para o serviço hello-gke
do GKE
É possível definir vários matching_criteria
com atributos do CloudEvents
compatíveis com o Eventarc que agem como o
event-filters
especificado ao criar um gatilho. Para mais informações, siga as instruções ao criar um gatilho para um provedor, tipo de evento e destino do GKE específico.
Eventos que correspondam a todos os filtros são enviados para o destino.
5. Aplicar as mudanças adicionais
Para aplicar a configuração extra do Terraform a um projeto do Google Cloud, siga estas etapas:
Crie a conta de identidade do Eventarc:
gcloud beta services identity create --service eventarc.googleapis.com
Adicione o novo código do Terraform da etapa anterior ao arquivo
main.tf
.Aplique as configurações atualizadas do Terraform:
terraform plan terraform apply
Aguarde até que o Terraform exiba a mensagem "Apply complete!".
Abra seu projeto do Google Cloud para verificar os resultados. No console do Google Cloud, navegue até seus recursos na IU para verificar se foram criados ou atualizados pelo Terraform.
Fluxos de trabalho
Usando o Cloud Shell, implante recursos com o Terraform para criar um fluxo de trabalho e um gatilho do Eventarc.
1. Ativar as APIs
Use o código a seguir para ativar as APIs necessárias:
2. Criar uma conta de serviço e configurar o IAM
Use o código a seguir para criar uma conta de serviço dedicada e adicionar papéis do IAM:
Se você ativou o agente de serviço do Pub/Sub até 8 de abril
de 2021, conceda o papel iam.serviceAccountTokenCreator
a ele:
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"
}
3. Criar um bucket do Cloud Storage como um provedor de eventos
Use o código a seguir para criar um bucket do Cloud Storage com permissões relacionadas ao Eventarc:
4. Criar e implantar um fluxo de trabalho
Defina e implante um fluxo de trabalho que seja executado quando um objeto é atualizado no bucket criado:
5. Criar um gatilho do Eventarc
Criar um gatilho do Eventarc que encaminha eventos diretos no
bucket criado para o Workflows. Use o recurso google_eventarc_trigger
para definir o recurso de gatilho do Eventarc.
É possível definir vários matching_criteria
com atributos do CloudEvents
compatíveis com o Eventarc que agem como o
event-filters
especificado ao criar um gatilho. Para mais informações, siga as instruções ao criar um gatilho para um provedor, tipo de evento e destino do Workflows específico.
Eventos que correspondam a todos os filtros são enviados para o destino.
6. Aplicar as alterações
Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.
Para aplicar a configuração do Terraform em um projeto do Google Cloud, conclua as etapas nas seções a seguir.
Preparar o Cloud Shell
- Inicie o 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
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 dentro dele. O nome do arquivo precisa ter a extensão
.tf
, por exemplo,main.tf
. Neste tutorial, o arquivo é chamado demain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.
Copie o exemplo de código no
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.
- Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
- Salve as alterações.
-
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
Aplique as alterações
-
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!".
- Abra seu projeto do Google Cloud para ver os resultados. No console do Google Cloud, navegue até seus recursos na IU para verificar se foram criados ou atualizados pelo Terraform.
7. Verificar a criação do fluxo de trabalho
Para verificar se o fluxo de trabalho foi criado, execute:
gcloud workflows list --location us-central1
8. Verificar a criação do gatilho do Eventarc
Para verificar se o gatilho do Eventarc foi criado, execute:
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.
Cloud Run
Para gerar um evento:
Faça upload de um arquivo de texto para o Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://trigger-cloudrun-PROJECT_ID/random.txt
O upload gera um evento e o serviço do Cloud Run registra a mensagem do evento.
Para verificar se um evento foi recebido:
- Para ver as entradas de registro relacionadas a eventos criadas pelo seu serviço:
gcloud logging read "resource.type=cloud_run_revision \ AND resource.labels.service_name=hello-events"
Como alternativa, abra o console do Google Cloud, navegue até o recurso do Cloud Run e confira os registros.
- 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-PROJECT_ID/random.txt", ...}
GKE
Para gerar um evento:
Faça upload de um arquivo de texto para o Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://trigger-gke-PROJECT_ID/random.txt
O upload gera um evento e o serviço do Cloud Run registra a mensagem do evento.
Para verificar se um evento foi recebido:
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.pubsub.topic.v1.messagePublished", "message":"Received event of type google.cloud.pubsub.topic.v1.messagePublished.", [...]}
Fluxos de trabalho
Para gerar um evento:
Faça upload de um arquivo de texto para o Cloud Storage:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://trigger-workflows-PROJECT_ID/random.txt
O upload gera um evento e o serviço do Cloud Run registra a mensagem do evento.
Para verificar se um evento foi recebido:
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
,START_TIME
,END_TIME
eSTATUS
.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 que o resultado é parecido com este:
... result: '"Received event google.cloud.storage.object.v1.finalized - trigger-workflows-PROJECT_ID, random.txt"' state: SUCCEEDED ...
Procure
state: SUCCEEDED
eresult: "Received event"
na saída dos fluxos de trabalho.
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 no projeto.
- 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.
A seguir
- Para acionar um fluxo de trabalho com eventos usando a gcloud CLI ou o console, consulte Como acionar um fluxo de trabalho com eventos ou mensagens do Pub/Sub.