AWS Lambdaを使用して、Amazon Elastic Compute Cloud のライフサイクルイベントを処理し、Amazon EC2 リソースを管理します。Amazon EC2 は、インスタンスの状態が変化したとき、Amazon Elastic Block Store ボリュームのスナップショットが完了したとき、スポットインスタンスの終了が予定されているときなどのライフサイクルイベントにおいて、イベントを Amazon EventBridge (CloudWatch Events) に送信します。これらのイベントを Lambda 関数に転送して処理を行うように、Eventbridge (CloudWatch Events) を設定します。
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 SDK を使用して、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 SDK を使用して Amazon EC2 リソースを管理する場合は、関数の実行ロールに Amazon EC2 アクセス許可を追加します。