使用Terraform部署GCP带死信功能的Pub/Sub订阅告警找不到对应服务账号
GCP Pub/Sub死信订阅告警与缺失服务账号问题解决步骤
1. 确认服务账号存在性
Pub/Sub专属服务账号属于Google托管服务账号,默认不会在IAM服务账号列表的「用户自定义」分类下展示,你需要先调整IAM页面的显示配置:
- 进入IAM页面,点击右上角「查看选项」
- 勾选「包含Google提供的角色授予」、「显示Google托管的服务账号」后刷新页面,再搜索对应格式的账号
也可以通过gcloud命令直接验证账号是否存在:gcloud projects get-iam-policy <你的项目ID> --filter="bindings.members:serviceAccount:<你的项目编号>@gcp-sa-pubsub.iam.gserviceaccount.com"
如果命令无返回结果,说明服务账号尚未创建。
2. 手动创建Pub/Sub托管服务账号
该服务账号会在Pub/Sub API首次启用时自动生成,执行以下命令启用API即可触发账号创建:gcloud services enable pubsub.googleapis.com --project <你的项目ID>
命令执行完成后等待2-3分钟,再按步骤1的方法即可查看到对应服务账号。
3. 配置服务账号所需权限
死信投递功能要求Pub/Sub托管服务账号具备两项权限,你可以直接在Terraform中补充对应IAM绑定配置即可:
variable "project_number" { type = string description = "GCP项目的数字编号,可在项目首页获取" } # 授予服务账号死信主题的发布权限,用于投递无法消费的消息 resource "google_pubsub_topic_iam_binding" "dlq_publisher" { topic = google_pubsub_topic.your_dlq_topic.name # 替换为你的死信主题资源名 role = "roles/pubsub.publisher" members = [ "serviceAccount:${var.project_number}@gcp-sa-pubsub.iam.gserviceaccount.com" ] } # 授予服务账号原订阅的消费权限,用于确认需要转死信的消息 resource "google_pubsub_subscription_iam_binding" "origin_sub_subscriber" { subscription = google_pubsub_subscription.your_subscription.name # 替换为你的原订阅资源名 role = "roles/pubsub.subscriber" members = [ "serviceAccount:${var.project_number}@gcp-sa-pubsub.iam.gserviceaccount.com" ] }
配置执行后等待5-10分钟,告警会自动消除。
4. 功能验证
你可以向原主题推送一条测试消息,手动触发消费失败,验证消息是否能正常投递到死信主题,确认功能正常。
内容的提问来源于stack exchange,提问作者tmp dev
相关产品推荐
相关产品推荐

