Criar gatilhos com o Terraform

Neste documento, descrevemos como usar recursos do Google Cloud no Terraform para criar gatilhos do Eventarc.

Neste documento, você precisará usar o Terraform para:

  1. Ativar as APIs Cloud Run e Eventarc.
  2. Implantar um serviço do Cloud Run acessível publicamente como um destino de evento.
  3. Crie um gatilho do Eventarc no Pub/Sub para enviar eventos ao serviço de receptor de eventos no serviço do Cloud Run.
  4. Criar um gatilho do Eventarc para filtrar registros de auditoria e enviar eventos do Cloud Storage para o serviço do Cloud Run.

Para recursos e orientações sobre como usar o Terraform, consulte Como usar o Terraform com o Google Cloud.

Antes de começar

  1. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho dos 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. 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.
  3. 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

  4. Verifique se a cobrança está ativada para o seu projeto do Google Cloud. Saiba como verificar se o faturamento está ativado em um projeto.

  5. Instale a CLI do Google Cloud.
  6. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  7. 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

  8. Verifique se a cobrança está ativada para o seu projeto do Google Cloud. Saiba como verificar se o faturamento está ativado em um projeto.

  9. Instale a CLI do Google Cloud.
  10. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  11. 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.

  12. O Cloud Shell é um ambiente shell com o Terraform já integrado.

  13. Faça o download e instale a ferramenta de gerenciamento de código-fonte Git.

Criar gatilhos do Eventarc

Usando o Cloud Shell, implante seus recursos com o Terraform para criar acionadores do Eventarc.

Ative as APIs Eventarc e Cloud Run

Use o código a seguir para ativar a API Eventarc e as APIs Cloud Run:

# Used to retrieve project_number later
data "google_project" "project" {
  provider = google-beta
}

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

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

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_service para definir um serviço do Cloud Run:


# Deploy Cloud Run service
resource "google_cloud_run_service" "default" {
  provider = google-beta
  name     = "cloudrun-hello-tf"
  location = "us-east1"

  template {
    spec {
      containers {
        image = "gcr.io/cloudrun/hello"
      }
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }

  depends_on = [google_project_service.run]
}

# Make Cloud Run service publicly accessible
resource "google_cloud_run_service_iam_member" "allUsers" {
  provider = google-beta
  service  = google_cloud_run_service.default.name
  location = google_cloud_run_service.default.location
  role     = "roles/run.invoker"
  member   = "allUsers"
}

Definir um gatilho do Pub/Sub

Um gatilho do Pub/Sub conecta um tópico do Pub/Sub a um serviço do Cloud Run. Use o recurso google_eventarc_trigger para definir o recurso do gatilho do Pub/Sub:


# Create a Pub/Sub trigger
resource "google_eventarc_trigger" "trigger-pubsub-tf" {
  provider = google-beta
  name     = "trigger-pubsub-tf"
  location = google_cloud_run_service.default.location
  matching_criteria {
    attribute = "type"
    value     = "google.cloud.pubsub.topic.v1.messagePublished"
  }
  destination {
    cloud_run_service {
      service = google_cloud_run_service.default.name
      region  = google_cloud_run_service.default.location
    }
  }

  depends_on = [google_project_service.eventarc]
}

Definir um gatilho do Cloud Audit Logging

Um gatilho de registros de auditoria do Cloud conecta um serviço do Google Cloud aos registros de auditoria. Conceda o papel eventarc.eventReceiver à conta de serviço padrão do Compute Engine e use o recurso google_eventarc_trigger para definir o gatilho de registros de auditoria do Cloud para eventos do Cloud Storage:


# Give default Compute service account eventarc.eventReceiver role
resource "google_project_iam_binding" "project" {
  provider = google-beta
  project = data.google_project.project.id
  role    = "roles/eventarc.eventReceiver"

  members = [
    "serviceAccount:${data.google_project.project.number}-compute@developer.gserviceaccount.com"
  ]
}

# Create an AuditLog for Cloud Storage trigger
resource "google_eventarc_trigger" "trigger-auditlog-tf" {
  provider = google-beta
  name     = "trigger-auditlog-tf"
  location = google_cloud_run_service.default.location
  project  = data.google_project.project.id
  matching_criteria {
    attribute = "type"
    value     = "google.cloud.audit.log.v1.written"
  }
  matching_criteria {
    attribute = "serviceName"
    value     = "storage.googleapis.com"
  }
  matching_criteria {
    attribute = "methodName"
    value     = "storage.objects.create"
  }
  destination {
    cloud_run_service {
      service = google_cloud_run_service.default.name
      region  = google_cloud_run_service.default.location
    }
  }
  service_account = "${data.google_project.project.number}-compute@developer.gserviceaccount.com"

  depends_on = [google_project_service.eventarc]
}

Verificar a criação de acionadores

Para confirmar se um serviço do Cloud Run e dois gatilhos foram criados, execute:

gcloud eventarc triggers list --location DESTINATION-RUN-REGION

A saída será semelhante a:

NAME: trigger-auditlog-tf
TYPE: google.cloud.audit.log.v1.written
DESTINATION: Cloud Run service: cloudrun-hello-tf
ACTIVE: By 16:29:08

NAME: trigger-pubsub-tf
TYPE: google.cloud.pubsub.topic.v1.messagePublished
DESTINATION: Cloud Run service: cloudrun-hello-tf
ACTIVE: Yes

Limpar

É possível excluir todos os recursos criados com o Terraform usando

terraform destroy -var="project_id=PROJECT-ID" -var="region=DESTINATION-RUN-REGION"

Também é possível excluir seu projeto do Google Cloud para evitar cobranças. A exclusão do projeto do Cloud interrompe o faturamento de todos os recursos usados nele.

  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