メニュー
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 ユーザーガイド) を参照してください。

注記

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

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

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

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

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

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

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

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

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

    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 から出力されます。