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

Amazon EBS 用の Amazon CloudWatch Events

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

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

EBS ボリュームイベント

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

注記

CloudWatch によってキャプチャされない、EBS ボリュームに関する追加情報は、

DescribeVolumes API および describe-volumes CLI コマンドを通じて入手できます。

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

ボリュームを作成 (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 スナップショットイベント

スナップショットを作成 (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" } }

スナップショット のコピー (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" } }

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

    CloudWatch コンソールから Lambda 関数を確実に利用可能にするには、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 から出力されます。