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

Amazon EBS での Amazon CloudWatch Events

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

CloudWatch でのイベントは、JSON オブジェクトとして表されます。イベント固有のフィールドは、JSON オブジェクトの「detail (詳細)」セクションに表示されます。"event" フィールドにはイベント名が入ります。"result" フィールドには、イベントをトリガーしたアクションの完了したステータスが入ります。詳細については、『Amazon CloudWatch Events ユーザーガイド』の「CloudWatch イベント のイベントパターン」を参照してください。

詳細については、『Amazon CloudWatch ユーザーガイド』の「イベントの使用」を参照してください。完全な API リファレンスについては、「EC2 API リファレンス」を参照してください。

EBS ボリュームイベント

Amazon EBS は、次のボリュームイベントが発生したときに、CloudWatch イベント にイベントを送信します。

ボリュームを作成 (createVolume)

createVolume イベントは、ボリュームを作成するアクションが完了したときに、AWS アカウントに送信されます。ただし、保存、ログ作成、アーカイブはされません。このイベントの結果は、available または failed のいずれかです。次の例に示すように無効な KMS キーが指定された場合、作成は失敗します。

イベントデータ

以下に示すのは、createVolume イベントが正常に完了したときに EBS から出力される JSON オブジェクトの例です。

{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "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:012345678901:volume/vol-01234567" ], "detail": { "result": "available", "cause": "", "event": "createVolume", "request-id": "01234567-0123-0123-0123-0123456789ab" } }

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

{ "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 キーの保留中のインポートです。

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

ボリュームを削除 (deleteVolume)

deleteVolume イベントは、ボリュームを削除するアクションが完了したときに、AWS アカウントに送信されます。ただし、保存、ログ作成、アーカイブはされません。このイベントの結果は deleted です。削除が完了しない場合、イベントは送信されません。

イベントデータ

以下に示すのは、deleteVolume イベントが正常に完了したときに EBS から出力される JSON オブジェクトの例です。

{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "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:012345678901:volume/vol-01234567" ], "detail": { "result": "deleted", "cause": "", "event": "deleteVolume", "request-id": "01234567-0123-0123-0123-0123456789ab" } }

ボリュームのアタッチまたは再アタッチ (attachVolumereattachVolume)

インスタンスにボリュームをアタッチまたは再アタッチできない場合、attachVolume または reattachVolume イベントが AWS アカウントに送信されます。ただし、保存、ログ作成、アーカイブはされません。次の例に示すように、KMS キーを使用して EBS ボリュームを暗号化し、キーが無効になった場合、インスタンスへのアタッチまたは再アタッチにそのキーが後で使用されると、EBS はイベントを出力します。

イベントデータ

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

注記

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

{ "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 キーの保留中の削除です。

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

EBS スナップショットイベント

Amazon EBS は、次のボリュームイベントが発生したときに、CloudWatch イベント にイベントを送信します。

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

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

イベントデータ

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

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

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

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

イベントデータ

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

{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "EBS Multi-Volume Snapshots Completion Status", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2::us-east-1:snapshot/snap-01234567", "arn:aws:ec2::us-east-1:snapshot/snap-012345678" ], "detail": { "event": "createSnapshots", "result": "succeeded", "cause": "", "request-id": "", "startTime": "yyyy-mm-ddThh:mm:ssZ", "endTime": "yyyy-mm-ddThh:mm:ssZ", "snapshots": [ { "snapshot_id": "arn:aws:ec2::us-east-1:snapshot/snap-01234567", "source": "arn:aws:ec2::us-east-1:volume/vol-01234567", "status": "completed" }, { "snapshot_id": "arn:aws:ec2::us-east-1:snapshot/snap-012345678", "source": "arn:aws:ec2::us-east-1:volume/vol-012345678", "status": "completed" } ] } }

以下に示すのは、createSnapshots が失敗したときに EBS から出力される JSON オブジェクトの例です。失敗の原因は,1 つ以上のスナップショットが完了できなかったことです。snapshot_id の値は、失敗したスナップショットの ARN です。StartTimeEndTime は、スナップショットを作成するアクションの開始時間と終了時間を表します。

{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "EBS Multi-Volume Snapshots Completion Status", "source": "aws.ec2", "account": "012345678901", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2::us-east-1:snapshot/snap-01234567", "arn:aws:ec2::us-east-1:snapshot/snap-012345678" ], "detail": { "event": "createSnapshots", "result": "failed", "cause": "Snapshot snap-01234567 is in status deleted", "request-id": "", "startTime": "yyyy-mm-ddThh:mm:ssZ", "endTime": "yyyy-mm-ddThh:mm:ssZ", "snapshots": [ { "snapshot_id": "arn:aws:ec2::us-east-1:snapshot/snap-01234567", "source": "arn:aws:ec2::us-east-1:volume/vol-01234567", "status": "error" }, { "snapshot_id": "arn:aws:ec2::us-east-1:snapshot/snap-012345678", "source": "arn:aws:ec2::us-east-1:volume/vol-012345678", "status": "deleted" } ] } }

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

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

イベントデータ

以下に示すのは、copySnapshot イベントが成功したときに EBS から出力される JSON オブジェクトの例です。snapshot_id の値は、新しく作成されたスナップショットの ARN です。detail セクションで、source の値は、ソーススナップショットの ARN です。StartTimeEndTime は、スナップショットをコピーするアクションの開始時間と終了時間を示します。

{ "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": "succeeded", "cause": "", "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", "Incremental": "True" } }

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

{ "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 オブジェクトの例を以下に示します。detail セクションの source の値は、スナップショットを共有したユーザーの AWS アカウント番号です。StartTimeEndTime は、スナップショットを共有するアクションの開始時間と終了時間を示します。shareSnapshot イベントは、プライベートスナップショットが別のユーザーと共有された場合にのみ出力されます。パブリックスナップショットを共有しても、イベントはトリガーされません。

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

EBS ボリュームの変更イベント

Amazon EBS は、ボリュームが変更されると、CloudWatch イベント に modifyVolume イベントを送信します。ただし、保存、ログ作成、アーカイブはされません。

{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "EBS Volume Notification", "source": "aws.ec2", "account": "012345678901", "time": "2017-01-12T21:09:07Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:012345678901:volume/vol-03a55cf56513fa1b6" ], "detail": { "result": "optimizing", "cause": "", "event": "modifyVolume", "request-id": "01234567-0123-0123-0123-0123456789ab" } }

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

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

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

完了したスナップショットを別のリージョンにコピーするには

  1. 次の例に示すような IAM ポリシーを作成し、CopySnapshot アクションを実行して CloudWatch イベント ログに書き込むためのアクセス許可を提供します。このポリシーを CloudWatch イベントを処理する IAM ユーザーに割り当てます。

    { "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. CloudWatch コンソールから利用できる関数を Lambda で定義します。以下の Lambda 関数は、Node.js で記述したサンプルであり、該当する createSnapshot イベント (スナップショットの完成を示す) が Amazon EBS から出力されたときに CloudWatch から呼び出されます。この関数は、呼び出されると、スナップショットを us-east-2 から us-east-1 にコピーします。

    // 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); } }); };

    Lambda 関数は、CloudWatch コンソールから確実に利用できるように、CloudWatch イベントが発生するリージョンで作成します。詳細については、「AWS Lambda 開発者ガイド」を参照してください。

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

  4. [Events]、[Create rule]、[Select event source]、[Amazon EBS Snapshots] の順に選択します。

  5. [Specific Event(s)] で [createSnapshot] を選択し、[Specific Result(s)] で [succeeded] を選択します。

  6. [Rule target] で、前に作成したサンプル関数を見つけて選択します。

  7. [Target]、[Add Target] の順に選択します。

  8. [Lambda function] で、前に作成した Lambda 関数を選択し、[Configure details] を選択します。

  9. [Configure rule details] ページで、[Name] と [Description] の値を入力します。[State] チェックボックスをオンにして、関数をアクティブにします ([Enabled] に設定します)。

  10. [Create rule] を選択します。

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