Criar um gatilho usando o Terraform

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:

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

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  5. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  6. Ative as APIs Resource Manager and Identity and Access Management (IAM).

    Ative as APIs

  7. No Console do Google Cloud, ative o Cloud Shell.

    Ativar o Cloud Shell

    Na parte inferior do Console do Google Cloud, uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.

  8. 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:

# Enable Cloud Run API
resource "google_project_service" "run" {
  service            = "run.googleapis.com"
  disable_on_destroy = false
}

# Enable Eventarc API
resource "google_project_service" "eventarc" {
  service            = "eventarc.googleapis.com"
  disable_on_destroy = false
}

# Enable Pub/Sub API
resource "google_project_service" "pubsub" {
  service            = "pubsub.googleapis.com"
  disable_on_destroy = false
}

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:

# Used to retrieve project information later
data "google_project" "project" {}

# Create a dedicated service account
resource "google_service_account" "eventarc" {
  account_id   = "eventarc-trigger-sa"
  display_name = "Eventarc Trigger Service Account"
}

# Grant permission to receive Eventarc events
resource "google_project_iam_member" "eventreceiver" {
  project = data.google_project.project.id
  role    = "roles/eventarc.eventReceiver"
  member  = "serviceAccount:${google_service_account.eventarc.email}"
}

# Grant permission to invoke Cloud Run services
resource "google_project_iam_member" "runinvoker" {
  project = data.google_project.project.id
  role    = "roles/run.invoker"
  member  = "serviceAccount:${google_service_account.eventarc.email}"
}

Se você ativou o agente de serviço do Pub/Sub até 8 de abril de 2021, conceda o papel iam.serviceAccountTokenCreator à conta de serviço gerenciada pelo Google:

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:

# Cloud Storage bucket names must be globally unique
resource "random_id" "bucket_name_suffix" {
  byte_length = 4
}

# Create a Cloud Storage bucket
resource "google_storage_bucket" "default" {
  name          = "trigger-cloudrun-${data.google_project.project.name}-${random_id.bucket_name_suffix.hex}"
  location      = google_cloud_run_v2_service.default.location
  force_destroy = true

  uniform_bucket_level_access = true
}

# Grant the Cloud Storage service account permission to publish pub/sub topics
data "google_storage_project_service_account" "gcs_account" {}
resource "google_project_iam_member" "pubsubpublisher" {
  project = data.google_project.project.id
  role    = "roles/pubsub.publisher"
  member  = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}"
}

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:

# Deploy Cloud Run service
resource "google_cloud_run_v2_service" "default" {
  name     = "hello-events"
  location = "us-central1"

  template {
    containers {
      # This container will log received events
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    service_account = google_service_account.eventarc.email
  }

  depends_on = [google_project_service.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.

# Create an Eventarc trigger, routing Cloud Storage events to Cloud Run
resource "google_eventarc_trigger" "default" {
  name     = "trigger-storage-cloudrun-tf"
  location = google_cloud_run_v2_service.default.location

  # Capture objects changed in the bucket
  matching_criteria {
    attribute = "type"
    value     = "google.cloud.storage.object.v1.finalized"
  }
  matching_criteria {
    attribute = "bucket"
    value     = google_storage_bucket.default.name
  }

  # Send events to Cloud Run
  destination {
    cloud_run_service {
      service = google_cloud_run_v2_service.default.name
      region  = google_cloud_run_v2_service.default.location
    }
  }

  service_account = google_service_account.eventarc.email
  depends_on = [
    google_project_service.eventarc,
    google_project_iam_member.pubsubpublisher
  ]
}

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

  1. Inicie o Cloud Shell.
  2. 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.

  1. 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 de main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.

  3. Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
  4. Salve as alterações.
  5. 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

  1. 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.

  2. 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!".

  3. 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:

# Enable GKE API
resource "google_project_service" "container" {
  service            = "container.googleapis.com"
  disable_on_destroy = false
}

# Enable Eventarc API
resource "google_project_service" "eventarc" {
  service            = "eventarc.googleapis.com"
  disable_on_destroy = false
}

# Enable Pub/Sub API
resource "google_project_service" "pubsub" {
  service            = "pubsub.googleapis.com"
  disable_on_destroy = false
}

Use o código a seguir para criar um cluster do GKE:

# Create an auto-pilot GKE cluster
resource "google_container_cluster" "gke_cluster" {
  name     = "eventarc-cluster"
  location = "us-central1"

  enable_autopilot = true

  depends_on = [
    google_project_service.container
  ]
}

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

  1. Inicie o Cloud Shell.
  2. 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.

  1. 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 de main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.

  3. Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
  4. Salve as alterações.
  5. 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

  1. 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.

  2. 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!".

  3. 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:

  1. Consiga as credenciais de autenticação para interagir com o cluster:

    gcloud container clusters get-credentials eventarc-cluster \
       --region=us-central1
    
  2. Crie uma implantação chamada hello-gke:

    kubectl create deployment hello-gke \
       --image=us-docker.pkg.dev/cloudrun/container/hello
    
  3. Exponha a implantação como um serviço do Kubernetes:x

    kubectl expose deployment hello-gke \
       --type ClusterIP --port 80 --target-port 8080
    
  4. 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 for Pending, o pod está sendo implantado. Aguarde um minuto até que a implantação seja concluída e verifique o status novamente.

  5. 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.

# Create a service account to be used by GKE trigger
resource "google_service_account" "eventarc_gke_trigger_sa" {
  account_id   = "eventarc-gke-trigger-sa"
  display_name = "Evenarc GKE Trigger Service Account"
}

# Grant permission to receive Eventarc events
resource "google_project_iam_member" "eventreceiver" {
  project = data.google_project.project.id
  role    = "roles/eventarc.eventReceiver"
  member  = "serviceAccount:${google_service_account.eventarc_gke_trigger_sa.email}"
}

# Grant permission to subscribe to Pub/Sub topics
resource "google_project_iam_member" "pubsubscriber" {
  project = data.google_project.project.id
  role    = "roles/pubsub.subscriber"
  member  = "serviceAccount:${google_service_account.eventarc_gke_trigger_sa.email}"
}

Use o código a seguir para criar um bucket do Cloud Storage com permissões relacionadas ao Eventarc:

# Cloud Storage bucket names must be globally unique
resource "random_id" "bucket_name_suffix" {
  byte_length = 4
}

# Create a Cloud Storage bucket
resource "google_storage_bucket" "default" {
  name          = "trigger-gke-${data.google_project.project.name}-${random_id.bucket_name_suffix.hex}"
  location      = "us-central1"
  force_destroy = true

  uniform_bucket_level_access = true
}

# Grant the Cloud Storage service account permission to publish pub/sub topics
data "google_storage_project_service_account" "gcs_account" {}
resource "google_project_iam_member" "pubsubpublisher" {
  project = data.google_project.project.id
  role    = "roles/pubsub.publisher"
  member  = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}"
}

Use a configuração a seguir para ativar as APIs necessárias e inicializar os serviços de destino do GKE do Eventarc:

# Used to retrieve project_number later
data "google_project" "project" {}

# Enable Eventarc to manage GKE clusters
# This is usually done with: gcloud eventarc gke-destinations init
#
# Eventarc creates a separate Event Forwarder pod for each trigger targeting a
# GKE service, and  requires explicit permissions to make changes to the
# cluster. This is done by granting permissions to a special service account
# (the Eventarc P4SA) to manage resources in the cluster. This needs to be done
# once per Google Cloud project.

# This identity is created with: gcloud beta services identity create --service eventarc.googleapis.com
# This local variable is used for convenience
locals {
  eventarc_sa = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-eventarc.iam.gserviceaccount.com"
}

resource "google_project_iam_member" "computeViewer" {
  project = data.google_project.project.id
  role    = "roles/compute.viewer"
  member  = local.eventarc_sa
}

resource "google_project_iam_member" "containerDeveloper" {
  project = data.google_project.project.id
  role    = "roles/container.developer"
  member  = local.eventarc_sa
}

resource "google_project_iam_member" "serviceAccountAdmin" {
  project = data.google_project.project.id
  role    = "roles/iam.serviceAccountAdmin"
  member  = local.eventarc_sa
}

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.

# Create an Eventarc trigger, routing Storage events to GKE
resource "google_eventarc_trigger" "default" {
  name     = "trigger-storage-gke-tf"
  location = "us-central1"

  # Capture objects changed in the bucket
  matching_criteria {
    attribute = "type"
    value     = "google.cloud.storage.object.v1.finalized"
  }
  matching_criteria {
    attribute = "bucket"
    value     = google_storage_bucket.default.name
  }

  # Send events to GKE service
  destination {
    gke {
      cluster   = "eventarc-cluster"
      location  = "us-central1"
      namespace = "default"
      path      = "/"
      service   = "hello-gke"
    }
  }

  service_account = google_service_account.eventarc_gke_trigger_sa.email
}

5. Aplicar as mudanças adicionais

Para aplicar a configuração extra do Terraform a um projeto do Google Cloud, siga estas etapas:

  1. Crie a conta de identidade do Eventarc:

    gcloud beta services identity create --service eventarc.googleapis.com
    
  2. Adicione o novo código do Terraform da etapa anterior ao arquivo main.tf.

  3. Aplique as configurações atualizadas do Terraform:

    terraform plan
    terraform apply
    

    Aguarde até que o Terraform exiba a mensagem "Apply complete!".

  4. 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:

# Enable Eventarc API
resource "google_project_service" "eventarc" {
  service            = "eventarc.googleapis.com"
  disable_on_destroy = false
}

# Enable Workflows API
resource "google_project_service" "workflows" {
  service            = "workflows.googleapis.com"
  disable_on_destroy = false
}

# Enable Pub/Sub API
resource "google_project_service" "pubsub" {
  service            = "pubsub.googleapis.com"
  disable_on_destroy = false
}

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:

# Used to retrieve project information later
data "google_project" "project" {}

# Create a service account for Eventarc trigger and Workflows
resource "google_service_account" "eventarc" {
  account_id   = "eventarc-workflows-sa"
  display_name = "Eventarc Workflows Service Account"
}

# Grant permission to invoke workflows
resource "google_project_iam_member" "workflowsinvoker" {
  project = data.google_project.project.id
  role    = "roles/workflows.invoker"
  member  = "serviceAccount:${google_service_account.eventarc.email}"
}

# Grant permission to receive events
resource "google_project_iam_member" "eventreceiver" {
  project = data.google_project.project.id
  role    = "roles/eventarc.eventReceiver"
  member  = "serviceAccount:${google_service_account.eventarc.email}"
}

Se você ativou o agente de serviço do Pub/Sub até 8 de abril de 2021, conceda o papel iam.serviceAccountTokenCreator à conta de serviço gerenciada pelo Google:

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:

# Cloud Storage bucket names must be globally unique
resource "random_id" "bucket_name_suffix" {
  byte_length = 4
}

# Create a Cloud Storage bucket
resource "google_storage_bucket" "default" {
  name          = "trigger-workflows-${data.google_project.project.name}-${random_id.bucket_name_suffix.hex}"
  location      = google_workflows_workflow.default.region
  force_destroy = true

  uniform_bucket_level_access = true
}

# Grant the Cloud Storage service account permission to publish Pub/Sub topics
data "google_storage_project_service_account" "gcs_account" {}
resource "google_project_iam_member" "pubsubpublisher" {
  project = data.google_project.project.id
  role    = "roles/pubsub.publisher"
  member  = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}"
}

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:

# Create a workflow
resource "google_workflows_workflow" "default" {
  name        = "storage-workflow-tf"
  region      = "us-central1"
  description = "Workflow that returns information about storage events"

  # Note that $$ is needed for Terraform
  source_contents = <<EOF
  main:
    params: [event]
    steps:
      - log_event:
          call: sys.log
          args:
            text: $${event}
            severity: INFO
      - gather_data:
          assign:
            - bucket: $${event.data.bucket}
            - name: $${event.data.name}
            - message: $${"Received event " + event.type + " - " + bucket + ", " + name}
      - return_data:
          return: $${message}
  EOF

  depends_on = [
    google_project_service.workflows
  ]
}

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.

# Create an Eventarc trigger, routing Cloud Storage events to Workflows
resource "google_eventarc_trigger" "default" {
  name     = "trigger-storage-workflows-tf"
  location = google_workflows_workflow.default.region

  # Capture objects changed in the bucket
  matching_criteria {
    attribute = "type"
    value     = "google.cloud.storage.object.v1.finalized"
  }
  matching_criteria {
    attribute = "bucket"
    value     = google_storage_bucket.default.name
  }

  # Send events to Workflows
  destination {
    workflow = google_workflows_workflow.default.id
  }

  service_account = google_service_account.eventarc.email

  depends_on = [
    google_project_service.eventarc,
    google_project_service.workflows,
  ]
}

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

  1. Inicie o Cloud Shell.
  2. 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.

  1. 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 de main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.

  3. Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
  4. Salve as alterações.
  5. 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

  1. 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.

  2. 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!".

  3. 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

  1. Para gerar um evento:

    Faça upload de um arquivo de texto para o Cloud Storage:

    echo "Hello World" > random.txt
    gsutil 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.

  2. Para verificar se um evento foi recebido:

    1. 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.

    1. 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;

  1. Para gerar um evento:

    Faça upload de um arquivo de texto para o Cloud Storage:

    echo "Hello World" > random.txt
    gsutil 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.

  2. Para verificar se um evento foi recebido:

    1. 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.

    2. Verifique os registros do pod:

      kubectl logs $POD_NAME
      
    3. 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

  1. Para gerar um evento:

    Faça upload de um arquivo de texto para o Cloud Storage:

    echo "Hello World" > random.txt
    gsutil 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.

  2. Para verificar se um evento foi recebido:

    1. 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 e STATUS.

    2. 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
      
    3. 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 e result: "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.

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir