AWS Beanstalk - 创建新环境时向 Lambda 发送 SNS 通知
Posted
技术标签:
【中文标题】AWS Beanstalk - 创建新环境时向 Lambda 发送 SNS 通知【英文标题】:AWS Beanstalk - SNS notification to Lambda when new environment gets created 【发布时间】:2015-12-05 23:35:53 【问题描述】:我使用 CF 模板来创建 Beanstalk 环境。我想在创建环境时通过 SNS 触发 Lambda 代码,这样我就可以使用 lambda 来触发 jenkins 作业以及新环境的集成测试。
在 Beanstalk 中成功创建环境后,有没有办法发送 SNS 消息?我已经定义了一个订阅 lambda 代码的主题。
beantalk API 允许您定义通知端点。 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.sns.html
但是,如果我只能指定一个电子邮件地址并且我必须确认订阅,这是为了什么?如何使用它来自动触发 SNS 消息?
"OptionName": "Notification Endpoint",
"Namespace": "aws:elasticbeanstalk:sns:topics",
"Value": "no-reply@example.com"
,
"OptionName": "Notification Protocol",
"Namespace": "aws:elasticbeanstalk:sns:topics",
"Value": "email"
,
我发现的解决方法有点老套。我在堆栈创建过程结束时创建了一个 EC2 实例,并运行一些 AWS 命令以通过 UserData shell 发送 SNS 通知。这是唯一的方法吗?
【问题讨论】:
请注意,本文中出现的 JSON 语法与最新的 Amazon 参考文档 (docs.aws.amazon.com/elasticbeanstalk/latest/dg/…) 上的语法不一致。你有 ("OptionName", "Namespace", "Value");他们有(“option_name”、“namespace”、“value”)。这似乎是一张通向精神错乱的门票。 【参考方案1】:我正在回答我自己的问题。在创建新的 Beanstalk 环境后,我设法弄清楚如何使用 SNS 触发 lambda 代码。
我创建了一个 sns 主题 service-configurator
并将其 ARN 和名称添加到模板中。
"OptionName": "通知主题 ARN", "命名空间": "aws:elasticbeanstalk:sns:topics", “价值”:“arn:aws:sns:us-east-1:273218181234:service-configurator” , "OptionName": "通知主题名称", "命名空间": "aws:elasticbeanstalk:sns:topics", “价值”:“服务配置器”接下来,我将 sns 主题设置为我的 lambda 代码的事件源。
现在,每当环境发生某些事情(添加/删除实例、创建环境等)时,都会触发 lambda
【讨论】:
您不需要通知主题名称,通知主题 ARN 选项就足够了。 嗨,我在使用 SNS 时遇到了一些问题。只有部分事件是通过 SNS 报告的。一些重要的消息,如“服务器重新启动”永远不会出现。 @across 我不记得细节了。一般来说,整体结构是EBeanstalk to sns to lambda。 EBeanstalk 允许您设置一个电子邮件地址来接收某些事件,您只需输入您的 sns 主题而不是电子邮件。 @ChenLin 是的,问题是它工作正常。但我没有得到所有的事件,而只是其中的一部分。正如你提到的“服务器重新启动”不起作用【参考方案2】:虽然Configuring Notifications with Elastic Beanstalk 没有提供发送Amazon SNS 通知的具体示例,但email
只是相应的默认设置。 AWS Elastic Beanstalk 选项设置,您还可以为大多数/所有其他协议创建订阅,请参阅选项 aws:elasticbeanstalk:sns:topics:
http
https
email
email-json
sqs
显然AWS Lambda 还没有被引用,但它只是另一个SNS protocol,所以我假设/希望该表还没有更新,类似下面的内容应该可以相应地工作(还没有不过我自己试过了):
"OptionName": "Notification Endpoint",
"Namespace": "aws:elasticbeanstalk:sns:topics",
"Value": "<Your Lambda function ARN>"
,
"OptionName": "Notification Protocol",
"Namespace": "aws:elasticbeanstalk:sns:topics",
"Value": "lambda"
,
【讨论】:
不怕!无论如何,使用 Terraform:ConfigurationValidationException: Configuration validation exception: Invalid option value: 'lambda' (Namespace: 'aws:elasticbeanstalk:sns:topics', OptionName: 'Notification Protocol'): Value is not one of the allowed values: [http, https, email, email-json, sqs]
以上是关于AWS Beanstalk - 创建新环境时向 Lambda 发送 SNS 通知的主要内容,如果未能解决你的问题,请参考以下文章
无法在 AWS Elastic Beanstalk 上创建新的 RDS 数据库
Amazon Elastic Beanstalk 在创建新环境时创建服务器实例
AWS Elastic beanstalk - 更改解决方案堆栈名称
将应用程序部署到 AWS Elastic Beanstalk 环境