您可以使用 AWS Lambda 处理来自 Amazon Elastic Compute Cloud 的生命周期事件并管理 Amazon EC2 资源。Amazon EC2 向 Amazon EventBridge(CloudWatch Events)发送生命周期事件,例如,当实例更改状态时、当 Amazon Elastic Block Store 卷快照完成时或当计划终止竞价型实例时。您可以配置 EventBridge (CloudWatch Events) 以将这些事件转发到 Lambda 函数来进行处理。
EventBridge (CloudWatch Events) 通过来自 Amazon EC2 的事件文档异步调用 Lambda 函数。
例 实例生命周期事件
{
"version": "0",
"id": "b6ba298a-7732-2226-xmpl-976312c1a050",
"detail-type": "EC2 Instance State-change Notification",
"source": "aws.ec2",
"account": "111122223333",
"time": "2019-10-02T17:59:30Z",
"region": "us-east-1",
"resources": [
"arn:aws:ec2:us-east-1:111122223333:instance/i-0c314xmplcd5b8173"
],
"detail": {
"instance-id": "i-0c314xmplcd5b8173",
"state": "running"
}
}
有关配置事件的详细信息,请参阅 按计划调用 Lambda 函数。有关处理 Amazon EBS 快照通知的示例函数,请参阅 EventBridge Scheduler for Amazon EBS。
您还可以使用 AWS 开发工具包,通过 Amazon EC2 API 管理实例和其他资源。
向 EventBridge(CloudWatch Events)授予权限
要处理来自 Amazon EC2 的生命周期事件,EventBridge(CloudWatch Events)需要权限以调用函数。此权限来自函数的基于资源的策略。如果您使用 EventBridge (CloudWatch Events) 控制台配置事件触发器,则该控制台将代表您更新基于资源的策略。否则,请添加如下所示的语句:
例 基于资源的策略语句,用于 Amazon EC2 生命周期通知
{
"Sid": "ec2-events",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:us-east-1:12456789012:function:my-function",
"Condition": {
"ArnLike": {
"AWS:SourceArn": "arn:aws:events:us-east-1:12456789012:rule/*"
}
}
}
要添加语句,请使用 add-permission
AWS CLI 命令。
aws lambda add-permission --action lambda:InvokeFunction --statement-id ec2-events \ --principal events.amazonaws.com --function-name
my-function
--source-arn 'arn:aws:events:us-east-1:12456789012
:rule/*'
如果函数使用 AWS 开发工具包来管理 Amazon EC2 资源,请向函数的执行角色添加 Amazon EC2 权限。