

# 使用 Lambda 函数处理 Amazon EC2 生命周期事件
<a name="services-ec2"></a>

您可以使用 Amazon Lambda 处理来自 Amazon Elastic Compute Cloud 的生命周期事件并管理 Amazon EC2 资源。Amazon EC2 向 [Amazon EventBridge（CloudWatch Events）](https://docs.amazonaws.cn/eventbridge/latest/userguide/eb-what-is.html)发送[生命周期事件](https://docs.amazonaws.cn/autoscaling/ec2/userguide/ec2-auto-scaling-lifecycle.html)，例如，当实例更改状态时、当 Amazon Elastic Block Store 卷快照完成时或当计划终止竞价型实例时。您可以配置 EventBridge (CloudWatch Events) 以将这些事件转发到 Lambda 函数来进行处理。

EventBridge (CloudWatch Events) 通过来自 Amazon EC2 的事件文档异步调用 Lambda 函数。

**Example 实例生命周期事件**  

```
{
    "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 函数](with-eventbridge-scheduler.md)。有关处理 Amazon EBS 快照通知的示例函数，请参阅 [EventBridge Scheduler for Amazon EBS](https://docs.amazonaws.cn/ebs/latest/userguide/ebs-cloud-watch-events.html)。

您还可以使用 Amazon 开发工具包，通过 Amazon EC2 API 管理实例和其他资源。

## 向 EventBridge（CloudWatch Events）授予权限
<a name="services-ec2-permissions"></a>

要处理来自 Amazon EC2 的生命周期事件，EventBridge（CloudWatch Events）需要权限以调用函数。此权限来自函数的[基于资源的策略](access-control-resource-based.md)。如果您使用 EventBridge (CloudWatch Events) 控制台配置事件触发器，则该控制台将代表您更新基于资源的策略。否则，请添加如下所示的语句：

**Example 基于资源的策略语句，用于 Amazon EC2 生命周期通知**  

```
{
  "Sid": "ec2-events",
  "Effect": "Allow",
  "Principal": {
    "Service": "events.amazonaws.com.cn"
  },
  "Action": "lambda:InvokeFunction",
  "Resource": "arn:aws:lambda:cn-north-1:12456789012:function:my-function",
  "Condition": {
    "ArnLike": {
      "AWS:SourceArn": "arn:aws:events:cn-north-1:12456789012:rule/*"
    }
  }
}
```

要添加语句，请使用 `add-permission` Amazon CLI 命令。

```
aws lambda add-permission --action lambda:InvokeFunction --statement-id ec2-events \
--principal events.amazonaws.com.cn --function-name {{my-function}} --source-arn 'arn:aws:events:cn-north-1:{{12456789012}}:rule/*'
```

如果函数使用 Amazon 开发工具包来管理 Amazon EC2 资源，请向函数的[执行角色](lambda-intro-execution-role.md)添加 Amazon EC2 权限。