在创建新的AWS EC2实例时运行AWS Lambda代码

时间:2016-02-19 14:16:45

标签: amazon-web-services aws-lambda

我想在创建新EC2实例的事件上使用Lambda运行一些代码。查看蓝图config-rule-change-triggered我可以根据各种配置更改运行代码,但不能创建一个。有办法做我想要的吗?或者我误解了Lambda的用例?

4 个答案:

答案 0 :(得分:3)

您可以通过在EC2实例启动用户数据中插入代码并使该代码显式调用Lambda函数来实现此目的,但这不是最好的方法。

更好的方法是使用CloudTrail和Lambda的组合。如果您启用CloudTrail日志记录(每个a / c应始终启用此功能,则在所有区域中),然后CloudTrail将记录您帐户中进行的所有API调用。然后,通过配置S3将事件发布到Lambda,将其连接到Lambda。您的Lambda函数将收到一个S3事件,然后可以检索API日志,查找RunInstances API调用,然后执行所需的任何工作,因为新实例正在启动。

一些有用的参考资料herehere

答案 1 :(得分:2)

我没有看到实例启动的通知触发器,但是你可以做的是写一个启动脚本并通过userdata传递它。该启动脚本需要下载并安装AWS CLI,然后向SNS进行身份验证并将消息发布到预先配置的主题。启动脚本将通过您的IAM角色向SNS和任何其他AWS服务进行身份验证,因此您需要授予IAM Role权限以执行您希望脚本执行的任何操作。这可以在IAM控制台中完成。

然后,该主题将使您的Lambda函数订阅它,它将执行。类似于下面的文章(虽然作者正在做类似的关闭,而不是启动)。

http://rogueleaderr.com/post/48795010760/how-to-notifyemail-yourself-when-an-ec2-instance

如果您将EC2实例放入自动缩放组,我相信当自动缩放组启动新实例时会触发一个触发器,因此您可以利用它。

我希望有所帮助。

答案 2 :(得分:2)

如果您启用了CloudTrail,则可以让S3 PutObject / TrailBucket触发Lambda函数。 Lambda函数解析传递给它的对象,如果找到RunInstances事件,则运行代码。

我做同样的事情,在启动新实例时通知某些用户。使用Lambda / Python,它有大约20行代码。

答案 3 :(得分:1)

几天前我们有类似的要求(用户应该在新实例启动时收到电子邮件)

1)转到cloudwatch,然后选择规则
2)选择服务名称(根据您的情况选择其ec2),然后选择“Ec2实例状态更改通知” 3)然后在“特定状态”下拉列表中选择待处理 4)单击Add target选项并选择lambda函数。

就是这样,每当启动一个新实例时,Cloudwatch都会触发你的lambda函数。

希望它有所帮助!!