

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Lambda 函數處理 Amazon EC2 生命週期事件
<a name="services-ec2"></a>

您可以使用 AWS Lambda 處理來自 Amazon Elastic Compute Cloud 的生命週期事件，並管理 Amazon EC2 資源。Amazon EC2 就[生命週期事件](https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-lifecycle.html)向 [Amazon EventBridge (CloudWatch Events)](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) 傳送事件，例如執行個體狀態變更、Amazon Elastic Block Store 磁碟區快照完成，或排定 Spot 執行個體將終止。您可以設定 EventBridge (CloudWatch Events)，將這些事件轉遞至 Lambda 函數以進行處理。

EventBridge (CloudWatch Events) 會非同步地叫用您的 Lambda 函數與來自 Amazon EC2 的事件文件。

**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 快照通知的範例函數，請參閱[適用於 Amazon EBS 的 EventBridge 排程器](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-cloud-watch-events.html)。

您也可以使用 AWS 開發套件，搭配 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"
  },
  "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 許可新增到函數的[執行角色](lambda-intro-execution-role.md)。