如何在AWS CloudFormation中为SNS Topic配置逗号分隔多邮箱参数
在AWS CloudFormation中用单个逗号分隔参数配置SNS多邮箱订阅
你可以通过CloudFormation内置函数的组合,实现用单个逗号分隔字符串参数生成多个SNS邮箱订阅,具体方案如下:
核心实现思路
利用Split函数将逗号分隔的邮箱字符串拆分为独立邮箱列表,再通过ForEach(CloudFormation新版本推荐用法)遍历列表,动态生成每个邮箱对应的订阅配置项。
完整模板示例
Parameters: OperatorEMail: Type: String Description: 输入逗号分隔的多个邮箱地址,示例:user1@example.com,user2@example.com,user3@example.com Resources: SendNotification: Type: AWS::SNS::Topic Properties: Subscription: !ForEach [email, !Split [",", !Ref OperatorEMail], [ { "Endpoint": !Trim [!Ref email], "Protocol": "email" } ]]
代码说明
- 参数拆分:
!Split [",", !Ref OperatorEMail]将输入的字符串按逗号分割成邮箱数组 - 遍历生成订阅:
!ForEach循环处理每个邮箱,为每个邮箱创建一个包含Endpoint和Protocol的订阅对象 - 空格处理:
!Trim用于清除每个邮箱前后可能存在的空格,避免因输入格式问题导致订阅失败
旧版本CloudFormation兼容方案
如果你的环境不支持ForEach,可以用Map函数替代:
Resources: SendNotification: Type: AWS::SNS::Topic Properties: Subscription: !Map - !Split [",", !Ref OperatorEMail] - !Sub - '{"Endpoint": "${TrimmedEmail}", "Protocol": "email"}' - TrimmedEmail: !Trim [!Ref AWS::MapItemValue]
注意事项
- 确保输入的邮箱格式正确,CloudFormation不会校验邮箱有效性,错误格式的邮箱会导致订阅请求发出但用户收不到确认邮件
- 若输入时习惯在逗号后加空格,
!Trim会自动处理,无需额外调整输入格式
内容的提问来源于stack exchange,提问作者Ardhi
相关产品推荐
相关产品推荐

