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

将 AWS Lambda 与 Amazon EC2 结合使用

您可以使用 AWS Lambda 处理来自 Amazon Elastic Compute Cloud 的生命周期事件并管理 Amazon EC2 资源。Amazon EC2 针对生命周期事件(例如,在实例更改状态时、在 Amazon Elastic Block Store 卷快照完成时或在计划终止 Spot 实例时)向 Amazon CloudWatch Events 发送事件。配置 CloudWatch Events 以将这些事件转发到 Lambda 函数来进行处理。

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" } }

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

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

权限

要处理来自 Amazon EC2 的生命周期事件,CloudWatch Events 需要有权调用您的函数。此权限来自函数的基于资源的策略。如果您使用 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 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-2:12456789012:rule/*'

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