在创建新的 AWS EC2 实例时运行 AWS Lambda 代码
Posted
技术标签:
【中文标题】在创建新的 AWS EC2 实例时运行 AWS Lambda 代码【英文标题】:Run AWS Lambda code when creating a new AWS EC2 instance 【发布时间】:2016-06-01 03:39:02 【问题描述】:我想在创建新 EC2 实例的事件上使用 Lambda 运行一些代码。查看蓝图config-rule-change-triggered
我能够根据各种配置更改运行代码,但不是在创建配置更改时运行代码。有没有办法做我想做的事?还是我误解了 Lambda 的用例?
【问题讨论】:
【参考方案1】:几天前我们有类似的要求(用户应该在新实例启动时收到电子邮件)
1) 转到 cloudwatch,然后选择规则 2)选择服务名称(它的ec2你的情况)然后选择“Ec2实例状态更改通知” 3) 然后在“特定状态”下拉列表中选择待处理 4) 点击添加目标选项并选择您的 lambda 函数。
就是这样,每当启动新实例时,Cloudwatch 都会触发您的 lambda 函数。
希望对你有帮助!!
【讨论】:
【参考方案2】:您可以通过将代码插入您的 EC2 实例启动用户数据并让该代码显式调用 Lambda 函数来做到这一点,但这不是最好的方法。
更好的方法是结合使用 CloudTrail 和 Lambda。如果您启用 CloudTrail 日志记录(所有区域的每个 a/c 都应始终启用此功能),则 CloudTrail 会将您帐户中进行的所有 API 调用记录到 S3。然后,您通过配置 S3 将事件发布到 Lambda 将其连接到 Lambda。您的 Lambda 函数将接收 S3 事件,然后可以检索 API 日志、查找 RunInstances API 调用,然后在启动新实例后执行您需要的任何工作。
一些有用的参考资料here 和here。
【讨论】:
谢谢,我从您提供的资源中自定义了代码来实现我想要的。【参考方案3】:如果您启用了 CloudTrail,则可以让 S3 PutObject/TrailBucket 触发 Lambda 函数。 Lambda 函数解析传递给它的对象,如果找到 RunInstances
事件,则运行您的代码。
当新实例启动时,我会做同样的事情来通知某些用户。使用 Lambda/Python,大约需要 20 行代码。
【讨论】:
如何为实例创建创建特定跟踪 @SoumyajitDutta 您不能将其限制为仅创建实例。记录所有操作,您必须仅过滤实例创建。【参考方案4】:我没有看到启动实例的通知触发器,但是您可以做的是编写一个启动脚本并通过 userdata 传递它。该启动脚本需要下载并安装 AWS CLI,然后向 SNS 进行身份验证并将消息发布到预配置的主题。启动脚本将通过您的 IAM 角色向 SNS 和所需的任何其他 AWS 服务进行身份验证,因此您需要授予 IAM 角色权限以执行您希望脚本执行的任何操作。这可以在 IAM 控制台中完成。
然后,您的 Lambda 函数将订阅该主题,该主题将执行。类似于下面的文章(尽管作者正在为关闭而不是启动做类似的事情)。
http://rogueleaderr.com/post/48795010760/how-to-notifyemail-yourself-when-an-ec2-instance
如果您将 EC2 实例放入自动缩放组,我相信当自动缩放组启动新实例时会触发一个触发器,因此您可以利用它。
希望对你有帮助。
【讨论】:
以上是关于在创建新的 AWS EC2 实例时运行 AWS Lambda 代码的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用Java AWS开发工具包创建AWS EC2时提供实例名称
启动 AWS EC2 实例时如何使用 bash 脚本运行 postgres?