Pra*_*ris 6 logging google-cloud-platform google-cloud-pubsub terraform stackdriver
我想创建一个日志接收器来侦听 Stack Driver 中的特定消息并将事件推送到 Cloud Pub/Sub,这将触发 Cloud Function。
这是我的 Terraform 模板的一部分。
resource "google_pubsub_topic" "dataflow_events" {
name = join("-", concat(["dataflow-events", var.environment, terraform.workspace]))
}
resource "google_logging_project_sink" "dataflow_job_completion_sink" {
name = join("-", concat(["dataflow-job-completion-sink", var.environment, terraform.workspace]))
destination = "pubsub.googleapis.com/projects/${var.project}/topics/${google_pubsub_topic.dataflow_events.name}"
filter = "resource.type=dataflow_step AND textPayload=\"Worker pool stopped.\""
}
Run Code Online (Sandbox Code Playgroud)
地形版本 = 0.13.3
这将在没有任何错误的情况下部署。但是,不会将任何事件推送到 Pub/Sub 主题。
但是,当我手动(从 Cloud Web 控制台)创建接收器时,它会将消息推送到(相同的)Pub/Sub 主题。
这是两个接收器的两个屏幕截图。
注意:更改它们两个上的unique_writer_identity参数(true或false)不会改变其行为。我们在创建手动接收器时使用unique_writer_identityas true,这就是它具有全局服务帐户的原因。但是true在 Terraform 中将此设置为不会将消息推送到 Pub/Sub。
非常感谢您的专业知识。
让我在这里回答我自己的问题。谢谢@milindu-sanoj-kumage的提示。
当我们创建Log Sink时,它会提供一个与其绑定的服务帐户。
如果您已标记unique_writer_identity为true,则它将看起来像,如果设置为 ,则它将[GENERATED_ID_1]@[GENERATED_ID_2].iam.gserviceaccount.com是。serviceAccount:cloud-logs@system.gserviceaccount.comfalse
如果您尚未将这些 SA 添加到您的项目中,那么这些 SA 是全局的(位于您的项目之外)。
您需要将此服务帐户添加(派生)到您的 GCP 项目中,并授予写入目标的权限。
cloud-logs@system.gserviceaccount.com。更新:
如果您的组织限制添加cloud-logs@system.gserviceaccount.com,您应该在 terraform 中添加unique_writer_identity = true,然后添加在 IAM 窗口中生成的唯一 IAM。您可以从“日志记录”部分的 Cloud Sink(日志路由器)窗口中提取此 IAM。
现在,接收器有权将事件推送到 Pub/Sub。因此,每当它在日志上获取过滤文本时,它都会将其推送到给定的 Pub/Sub 主题。
| 归档时间: |
|
| 查看次数: |
487 次 |
| 最近记录: |