Terraform aws_sns_topic_subscription如何配置多个邮箱订阅地址
Terraform aws_sns_topic_subscription 配置多邮箱订阅的正确方法
aws_sns_topic_subscription 单个资源块仅支持绑定一个订阅端点,不存在在同一个资源的endpoint参数里填多个邮箱的写法,你之前尝试的三种格式都不符合该资源的参数定义:
endpoint参数类型为字符串,只接受单个合法端点值,逗号拼接多邮箱、直接传列表、多参数传值都会触发参数类型校验错误。
AWS SNS的底层逻辑就是每个订阅端点对应一个独立的订阅关系,要批量配置多个邮箱订阅,正确做法是通过for_each遍历邮箱列表,为每个邮箱单独生成订阅资源,参考配置如下:
# 定义需要订阅的邮箱列表 locals { sns_subscribe_emails = [ "aaa@gmail.com", "bbb@gmail.com" ] } # 你的SNS主题资源 resource "aws_sns_topic" "some_sns_topic" { name = "some-sns-topic" } # 批量生成邮箱订阅 resource "aws_sns_topic_subscription" "email_target" { for_each = toset(local.sns_subscribe_emails) topic_arn = aws_sns_topic.some_sns_topic.arn protocol = "email" endpoint = each.value }
补充说明
- 上述配置执行后,Terraform会为列表里的每个邮箱创建独立的SNS订阅资源,和你手动逐个写单邮箱订阅资源的效果完全一致。
- 邮箱类型的订阅创建后,AWS会向每个邮箱地址发送订阅确认邮件,需要收件人点击邮件内的确认链接,订阅才会正式生效。
- 后续新增、删除订阅邮箱时,只需要修改
sns_subscribe_emails列表内的地址即可,Terraform会自动完成对应订阅资源的创建/销毁,不需要修改资源块本身的逻辑。
内容的提问来源于stack exchange,提问作者Roka
相关产品推荐
相关产品推荐

