如何通过Serverless Framework为CloudFormation栈传递SNS Topic ARN
使用Serverless Framework配置CloudFormation栈的SNS通知
1. 配置serverless.yml核心文件
Serverless Framework靠serverless.yml管理配置,要实现你用AWS CLI指定--notification-arns的效果,有两种简单方式:
方式一:直接在provider块定义
在provider节点下添加notificationArns属性,推荐用环境变量灵活传入SNS Topic的ARN,和CLI里的${SNS_TOPIC_ARN}逻辑一致:
service: my-cloudformation-service provider: name: aws region: us-east-1 notificationArns: - ${env:SNS_TOPIC_ARN} resources: # 这里粘贴你原test.yaml里的CloudFormation资源,比如示例S3桶: Resources: MyStackBucket: Type: AWS::S3::Bucket Properties: BucketName: my-notification-test-bucket
方式二:引入外部模板并配置通知
如果你的资源定义还是单独的test.yaml文件,直接在resources块里引入该文件,同时添加通知配置:
service: my-cloudformation-service provider: name: aws region: us-east-1 resources: # 引入外部CloudFormation模板,对应CLI的--template-body file://test.yaml - ${file(test.yaml)} # 配置通知ARN NotificationARNs: - ${env:SNS_TOPIC_ARN}
2. 传入SNS Topic ARN
和CLI的变量逻辑对应,你可以用两种方式传值:
- 终端临时设置:运行
export SNS_TOPIC_ARN=arn:aws:sns:us-east-1:123456789012:your-topic-arn - 用.env文件(需安装
serverless-dotenv-plugin插件):在项目根目录创建.env文件,写入:SNS_TOPIC_ARN=arn:aws:sns:us-east-1:123456789012:your-topic-arn
3. 部署栈
执行部署命令,效果和AWS CLI的create-stack完全一致:
serverless deploy --stack-name my-cloudformation
后续更新栈直接运行serverless deploy即可,Serverless会自动处理更新逻辑,通知配置也会同步保留。
验证配置
部署完成后,登录AWS控制台打开对应CloudFormation栈,查看「通知」标签,确认SNS Topic ARN已正确配置。之后栈的创建、更新、删除操作都会触发邮件通知到该Topic的订阅邮箱。
内容的提问来源于stack exchange,提问作者Franz
相关产品推荐
相关产品推荐

