将 Amazon Lambda 与 Amazon EC2 结合使用 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

将 Amazon Lambda 与 Amazon EC2 结合使用

您可以使用 Amazon Lambda 处理来自 Amazon Elastic Compute Cloud 的生命周期事件并管理 Amazon EC2 资源。Amazon EC2 向 Amazon EventBridge (CloudWatch Events) 发送生命周期事件(例如,在实例更改状态时、在 Amazon Elastic Block Store 卷快照完成时或在计划终止 Spot 实例时)。您可以配置 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": "123456798012", "time": "2019-10-02T17:59:30Z", "region": "us-east-2", "resources": [ "arn:aws:ec2:us-east-2:123456798012:instance/i-0c314xmplcd5b8173" ], "detail": { "instance-id": "i-0c314xmplcd5b8173", "state": "running" } }

有关在 EventBridge (CloudWatch Events) 中配置事件的详细信息,请参阅 通过 Amazon EventBridge (CloudWatch Events) 使用 Amazon Lambda。有关处理 Amazon EBS 快照通知的示例函数,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的适用于 Amazon EBS 的 Amazon EventBridge (CloudWatch Events)

您还可以使用Amazon开发工具包,通过 Amazon EC2 API 管理实例和其他资源。有关用 C# 编写的示例应用程序的教程,请参阅 教程:使用 Amazon SDK for .NET 管理 Amazon EC2 Spot 实例

Permissions

要处理来自 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-2:12456789012:function:my-function", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:events:us-east-2:12456789012:rule/*" } } }

要添加语句,请使用 add-permission Amazon 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-2:12456789012:rule/*'

如果函数使用Amazon开发工具包来管理 Amazon EC2 资源,请向函数的执行角色添加 Amazon EC2 权限。