使用 Terraform 创建触发器

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

本文档介绍如何在 Terraform 中使用 Google Cloud 资源创建 Eventarc 触发器。

在本文档中,您将使用 Terraform 执行以下操作:

  1. 启用 Cloud Run 和 Eventarc API。
  2. 将可公开访问的 Cloud Run 服务部署为事件目标。
  3. 创建 Eventarc Pub/Sub 触发器以将事件发送到 Cloud Run 服务上的事件接收器服务。
  4. 创建 Eventarc 触发器以过滤审核日志并将 Cloud Storage 事件发送到 Cloud Run 服务。

如需了解有关使用 Terraform 的资源和指南,请参阅将 Terraform 与 Google Cloud 搭配使用

准备工作

  1. 如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  3. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  4. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  5. 安装初始化 Google Cloud CLI。
  6. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  7. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  8. 安装初始化 Google Cloud CLI。
  9. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  10. Cloud Shell 是一个已集成 Terraform 的 Shell 环境。

  11. 下载并安装 Git 源代码管理工具。

创建 Eventarc 触发器

通过 Cloud Shell,使用 Terraform 部署资源以创建 Eventarc 触发器。

启用 Eventarc 和 Cloud Run API

使用以下代码启用 Eventarc API 和 Cloud Run API:

# 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
}

将 Cloud Run 服务定义为事件目标

创建 Cloud Run 服务作为触发器的事件目标。使用 google_cloud_run_service 资源定义 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"
}

定义 Pub/Sub 触发器

Pub/Sub 触发器会将 Pub/Sub 主题连接到 Cloud Run 服务。使用 google_eventarc_trigger 资源定义 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]
}

定义 Cloud Audit Logs 触发器

Cloud Audit Logs 触发器会将具有审核日志的 Google Cloud 服务连接到 Cloud Run 服务。将 eventarc.eventReceiver 角色授予默认的 Compute Engine 服务帐号,并使用 google_eventarc_trigger 资源为 Cloud Storage 事件定义 Cloud Audit Logs 触发器:


# 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]
}

验证触发器已创建

要确认已创建 Cloud Run 服务和两个触发器,请运行以下命令:

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

输出应类似如下所示:

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

清理

您可以使用以下命令删除使用 Terraform 创建的所有资源:

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

您还可以删除 Google Cloud 项目,以避免产生费用。删除 Cloud 项目后,系统即会停止对该项目中使用的所有资源计费。

  1. 在 Google Cloud 控制台中,转到管理资源页面:

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

后续步骤