メニュー
Amazon Elastic Compute Cloud
Linux インスタンス用ユーザーガイド

Amazon EBS 用の Amazon CloudWatch Events

Amazon EBS は、Amazon CloudWatch Events での様々なスナップショットや暗号化ステータスの変更に基づいて通知を出力します。CloudWatch イベント では、スナップショットや暗号化キーの状態の変化に応じてプログラムによるアクションをトリガーするルールを設定できます。たとえば、スナップショットが作成された場合、AWS Lambda 関数をトリガーして、完成したスナップショットを他のアカウントと共有したり、それを災害対策の目的で別のリージョンにコピーしたりできます。

詳細については、Amazon CloudWatch ユーザーガイド の「イベントの使用」を参照してください。

イベントの定義と例

このセクションでは、サポートされている Amazon EBS イベントを定義し、特定のシナリオで出力されるイベントの例を示します。CloudWatch でのイベントは、JSON オブジェクトとして表されます。イベントオブジェクトの形式と内容の詳細については、「イベントとイベントパターン」 (Amazon CloudWatch Events ユーザーガイド) を参照してください。

EBS イベント固有のフィールドは、以下に示す JSON オブジェクトの "detail" セクションに表示されます。"event" フィールドにはイベント名が入ります。"result" フィールドには、イベントをトリガーしたアクションの完了したステータスが入ります。

スナップショットを作成 (createSnapshot)

createSnapshot イベントは、スナップショットを作成するアクションが完了したときに、AWS アカウントに送信されます。このイベントの結果は、succeeded または failed のいずれかです。

イベントデータ

以下に示すのは、createSnapshot イベントが正常に完了したときに EBS から出力される JSON オブジェクトの例です。sourceフィールドにはソースボリュームの ARN が入ります。StartTime フィールドと EndTime フィールドは、スナップショット作成の開始時間と終了時間を示します。

Copy
{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "EBS Snapshot Notification", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2::us-west-2:snapshot/snap-01234567" ], "detail": { "event": "createSnapshot", "result": "succeeded", "cause": "", "request-id": "", "snapshot_id": "arn:aws:ec2::us-west-2:snapshot/snap-01234567", "source": "arn:aws:ec2::us-west-2:volume/vol-01234567", "StartTime": "yyyy-mm-ddThh:mm:ssZ", "EndTime": "yyyy-mm-ddThh:mm:ssZ" } }

スナップショット のコピー (copySnapshot)

copySnapshot イベントは、スナップショットをコピーするアクションが完了したときに、AWS アカウントに送信されます。このイベントの結果は、succeeded または failed のいずれかです。

イベントデータ

以下に示すのは、copySnapshot が失敗したときに EBS から出力される JSON オブジェクトの例です。失敗の原因は無効なソーススナップショット ID です。snapshot_id の値は、失敗したスナップショットの ARN です。source の値は、ソーススナップショットの ARN です。StartTimeEndTime は、スナップショットをコピーするアクションの開始時間と終了時間を示します。

Copy
{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "EBS Snapshot Notification", "source": "aws.ec2", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2::us-west-2:snapshot/snap-01234567" ], "detail": { "event": "copySnapshot", "result": "failed", "cause": "Source snapshot ID is not valid", "request-id": "", "snapshot_id": "arn:aws:ec2::us-west-2:snapshot/snap-01234567", "source": "arn:aws:ec2::eu-west-1:snapshot/snap-76543210", "StartTime": "yyyy-mm-ddThh:mm:ssZ", "EndTime": "yyyy-mm-ddThh:mm:ssZ" } }

スナップショットの共有 (shareSnapshot)

shareSnapshot イベントは、別のアカウントがスナップショットを共有したときに AWS アカウントに送信されます。結果は常に succeeded です。

イベントデータ

以下に示すのは、shareSnapshot イベントが完了したときに EBS から出力される JSON オブジェクトの例です。source の値は、スナップショットを共有したユーザーの AWS アカウント番号です。StartTimeEndTime は、スナップショットを共有するアクションの開始時間と終了時間を示します。shareSnapshot イベントは、プライベートスナップショットが別のユーザーと共有された場合にのみ出力されます。パブリックスナップショットを共有しても、イベントはトリガーされません。

Copy
{ "version": "0", "id": "01234567-01234-0123-0123-012345678901", "detail-type": "EBS Snapshot Notification", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2::us-west-2:snapshot/snap-01234567" ], "detail": { "event": "shareSnapshot", "result": "succeeded", "cause": "", "request-id": "", "snapshot_id": "arn:aws:ec2::us-west-2:snapshot/snap-01234567", "source": 012345678901, "StartTime": "yyyy-mm-ddThh:mm:ssZ", "EndTime": ""yyyy-mm-ddThh:mm:ssZ"" } }

ボリュームのアタッチ時または再アタッチ時の無効な暗号化キー (attachVolume, reattachVolume)

attachVolume イベントは、無効な KMS キーのせいでインスタンスにボリュームをアタッチまたは再アタッチできない場合に、AWS アカウントに送信されます。

注記

KMS キーを使用して EBS ボリュームを暗号化できます。ボリュームを暗号化するために使用されたキーが無効になると、そのキーが後でボリュームの作成、アタッチ、または再アタッチに使用されたときに、EBS からイベントが出力されます。

イベントデータ

以下に示すのは、attachVolume が失敗したときに EBS から出力される JSON オブジェクトの例です。失敗の原因は、KMS キーの保留中の削除です。

注記

AWS は、サーバーの定期メンテナンスの後でボリュームに再アタッチを試みる場合があります。

Copy
{ "version": "0", "id": "01234567-0123-0123-0123-0123456789ab", "detail-type": "EBS Volume Notification", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:0123456789ab:volume/vol-01234567", "arn:aws:kms:us-east-1:0123456789ab:key/01234567-0123-0123-0123-0123456789ab" ], "detail": { "event": "attachVolume", "result": "failed", "cause": "arn:aws:kms:us-east-1:0123456789ab:key/01234567-0123-0123-0123-0123456789ab is pending deletion.", "request-id": "" } }

以下に示すのは、reattachVolume が失敗したときに EBS から出力される JSON オブジェクトの例です。失敗の原因は、KMS キーの保留中の削除です。

Copy
{ "version": "0", "id": "01234567-0123-0123-0123-0123456789ab", "detail-type": "EBS Volume Notification", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:0123456789ab:volume/vol-01234567", "arn:aws:kms:us-east-1:0123456789ab:key/01234567-0123-0123-0123-0123456789ab" ], "detail": { "event": "reattachVolume", "result": "failed", "cause": "arn:aws:kms:us-east-1:0123456789ab:key/01234567-0123-0123-0123-0123456789ab is pending deletion.", "request-id": "" } }

ボリューム作成時の無効な暗号化キー (createVolume)

createVolume イベントは、無効な KMS キーのせいでボリュームを作成できないときに AWS アカウントに送信されます。

KMS キーを使用して EBS ボリュームを暗号化できます。ボリュームを暗号化するために使用されたキーが無効になると、そのキーが後でボリュームの作成、アタッチ、または再アタッチに使用されたときに、EBS からイベントが出力されます。

イベントデータ

以下に示すのは、createVolume が失敗したときに EBS から出力される JSON オブジェクトの例です。失敗の原因は無効な KMS キーです。

Copy
{ "version": "0", "id": "01234567-0123-0123-0123-0123456789ab", "detail-type": "EBS Volume Notification", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "sa-east-1", "resources": [ "arn:aws:ec2:sa-east-1:0123456789ab:volume/vol-01234567", ], "detail": { "event": "createVolume", "result": "failed", "cause": "arn:aws:kms:sa-east-1:0123456789ab:key/01234567-0123-0123-0123-0123456789ab is disabled.", "request-id": "01234567-0123-0123-0123-0123456789ab", } }

以下に示すのは、createVolume イベントが失敗した後で EBS から出力される JSON オブジェクトの例です。失敗の原因は、KMS キーの保留中のインポートです。

Copy
{ "version": "0", "id": "01234567-0123-0123-0123-0123456789ab", "detail-type": "EBS Volume Notification", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "sa-east-1", "resources": [ "arn:aws:ec2:sa-east-1:0123456789ab:volume/vol-01234567", ], "detail": { "event": "createVolume", "result": "failed", "cause": "arn:aws:kms:sa-east-1:0123456789ab:key/01234567-0123-0123-0123-0123456789ab is pending import.", "request-id": "01234567-0123-0123-0123-0123456789ab", } }

Amazon Lambda による CloudWatch イベント の処理

Amazon EBS と CloudWatch イベント 使用して、データのバックアップのワークフローを自動化できます。そのためには、IAM ポリシー、イベントを処理する AWS Lambda 関数、および受信イベントを照合して Lambda 関数にルーティングする Amazon CloudWatch Events ルールを作成する必要があります。

次の手順では、createSnapshot イベントを使用して完成したスナップショットを災害対策の目的で自動的に別のリージョンにコピーします。

To copy a completed snapshot to another region

  1. Create an IAM policy, such as the one shown in the following example, to provide permissions to execute a CopySnapshot action and write to the CloudWatch イベント log. Assign the policy to the IAM user that will handle the CloudWatch event.

    Copy
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "ec2:CopySnapshot" ], "Resource": "*" } ] }
  2. Define a function in Lambda that will be available from the CloudWatch console. The sample Lambda function below, written in Node.js, is invoked by CloudWatch when a matching createSnapshot event is emitted by Amazon EBS (signifying that a snapshot was completed). When invoked, the function copies the snapshot from us-east-2 to us-east-1.

    Copy
    // Sample Lambda function to copy an EBS snapshot to a different region var AWS = require('aws-sdk'); var ec2 = new AWS.EC2(); // define variables var destinationRegion = 'us-east-1'; var sourceRegion = 'us-east-2'; console.log ('Loading function'); //main function exports.handler = (event, context, callback) => { // Get the EBS snapshot ID from the CloudWatch event details var snapshotArn = event.detail.snapshot_id.split('/'); const snapshotId = snapshotArn[1]; const description = `Snapshot copy from ${snapshotId} in ${sourceRegion}.`; console.log ("snapshotId:", snapshotId); // Load EC2 class and update the configuration to use destination region to initiate the snapshot. AWS.config.update({region: destinationRegion}); var ec2 = new AWS.EC2(); // Prepare variables for ec2.modifySnapshotAttribute call const copySnapshotParams = { Description: description, DestinationRegion: destinationRegion, SourceRegion: sourceRegion, SourceSnapshotId: snapshotId }; // Execute the copy snapshot and log any errors ec2.copySnapshot(copySnapshotParams, (err, data) => { if (err) { const errorMessage = `Error copying snapshot ${snapshotId} to region ${destinationRegion}.`; console.log(errorMessage); console.log(err); callback(errorMessage); } else { const successMessage = `Successfully started copy of snapshot ${snapshotId} to region ${destinationRegion}.`; console.log(successMessage); console.log(data); callback(null, successMessage); } }); };

    To ensure that your Lambda function is available from the CloudWatch console, create it in the region where the CloudWatch event will occur. For more information, see the AWS Lambda Developer Guide.

  3. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。

  4. Choose Events, Create rule, Select event source, and Amazon EBS Snapshots.

  5. For Specific Event(s), choose createSnapshot and for Specific Result(s), choose succeeded.

  6. For Rule target, find and choose the sample function that you previously created.

  7. Choose Target, Add Target.

  8. For Lambda function, select the Lambda function that you previously created and choose Configure details.

  9. On the Configure rule details page, type values for Name and Description. Select the State check box to activate the function (setting it to Enabled).

  10. Choose Create rule.

作成したルールが、[Rules] タブに表示されます。上の例で、設定したイベントは次回にスナップショットをコピーすると EBS から出力されます。