EventBridge for Amazon EBS - Amazon Elastic Compute Cloud

EventBridge for Amazon EBS

Amazon EBS は、ボリュームとスナップショットに対して実行されたアクションのイベントを Amazon EventBridge に送信します。EventBridge を使用することで、これらのイベントに対応するプログラム的なアクションをトリガーするルールを設定できます。例えば、スナップショットの高速復元が有効になったときに電子メールに通知を送信するルールを作成できます。

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

詳細については、「Amazon EventBridge ユーザーガイド」の「Amazon EventBridge とは」を参照してください。

EBS ボリュームイベント

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

ボリュームの作成 (createVolume)

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

イベントデータ

以下に示すのは、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" } }

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

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

{ "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-03a55cf56513fa1b6" ], "detail": { "result": "optimizing", "cause": "", "event": "modifyVolume", "request-id": "01234567-0123-0123-0123-0123456789ab" } }

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

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

スナップショットの作成 (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 error", "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": "error" } ] } }

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

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

スナップショットをリージョン間でコピーしている場合、イベントは送信先のリージョンで発生します。

イベントデータ

以下に示すのは、copySnapshot イベントが成功したときに EBS から出力される JSON オブジェクトの例です。snapshot_id の値は、新しく作成されたスナップショットの ARN です。detail セクションでの source の値はソーススナップショットの ARN です。startTime および endTime は、スナップショットのコピーアクションの開始時刻と終了時刻を表します。incremental は、そのスナップショットが、インクリメンタルスナップショット (true) とフルスナップショット (false) のどちらであるかを示します。

{ "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 は、スナップショットアーカイブアクションに関連するイベントを発行します。詳細については、「スナップショットのアーカイブをモニタリングする」を参照してください。

EBS 高速スナップショット復元イベント

スナップショットの高速スナップショット復元の状態が変わると、Amazon EBS はイベントを EventBridge に送信します。イベントは、ベストエフォートベースで出力されます。

以下はこのイベントのサンプルデータです。

{ "version": "0", "id": "01234567-0123-0123-0123-012345678901", "detail-type": "EBS Fast Snapshot Restore State-change Notification", "source": "aws.ec2", "account": "123456789012", "time": "yyyy-mm-ddThh:mm:ssZ", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1::snapshot/snap-03a55cf56513fa1b6" ], "detail": { "snapshot-id": "snap-1234567890abcdef0", "state": "optimizing", "zone": "us-east-1a", "message": "Client.UserInitiated - Lifecycle state transition", } }

state の想定される値は、enablingoptimizingenableddisabling、および disabled です。

message の有効な値は次のとおりです。

Client.InvalidSnapshot.InvalidState - The requested snapshot transitioned to an invalid state (Error)

高速スナップショット復元を有効にするリクエストが失敗し、状態は disabling または disabled に移行しました。このスナップショットに対しては、高速スナップショット復元を有効にすることができません。

Client.UserInitiated

状態は、正常に enabling または disabling に移行しました。

Client.UserInitiated - Lifecycle state transition

状態は、正常に optimizingenabled、または disabled に移行しました。

Server.InsufficientCapacity - There was insufficient capacity available to satisfy the request

高速スナップショット復元を有効にするリクエストが容量不足のために失敗し、状態は disabling または disabled に移行しました。しばらく待ってから、もう一度試してください。

Server.InternalError - An internal error caused the operation to fail

高速スナップショット復元を有効にするリクエストが内部エラーのために失敗し、状態は disabling または disabled に移行しました。しばらく待ってから、もう一度試してください。

Client.InvalidSnapshot.InvalidState - The requested snapshot was deleted or access permissions were revoked

スナップショットが削除されたか、スナップショット所有者によって共有解除されたため、スナップショットに対する高速スナップショット復元の状態が disabling または disabled に移行しました。削除されたか共有しなくなったスナップショットに対して、高速スナップショット復元を有効にすることはできません。

EventBridge イベントを処理するための AWS Lambda の使用

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

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

完了したスナップショットを別のリージョンにコピーするには
  1. 次の例に示すような IAM ポリシーを作成し、CopySnapshot アクションを使用して EventBridge ログに書き込むためのアクセス許可を提供します。このポリシーを EventBridge イベントを処理するユーザーに割り当てます。

    { "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. EventBridge コンソールから利用できる関数を Lambda で定義します。以下の Lambda 関数は、Node.js で記述したサンプルであり、該当する createSnapshot イベント (スナップショットの完成を示す) が Amazon EBS から出力されたときに EventBridge から呼び出されます。この関数は、呼び出されると、スナップショットを 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 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 関数が EventBridge コンソールから確実に利用できるようにするため、EventBridge イベントが発生するリージョンで作成します。詳細については、AWS Lambda デベロッパーガイドを参照してください。

  3. Amazon EventBridge コンソール (https://console.aws.amazon.com/events/) を開きます。

  4. ナビゲーションペインで、[Rules (ルール)] を選択し、[Create rule (ルールの作成)] を選択します。

  5. [Step 1: Define rule detail] (ステップ 1: ルールの詳細を定義する) で、次の操作を行います。

    1. [Name] (名前) と [Description] (説明) の値を入力します。

    2. [Event bus] (イベントバス) は [default] (デフォルト) のままにします。

    3. [Enable the rule on the selected event bus] (選択したイベントバスのルールを有効にする) がオンになっているようにします。

    4. [Event type] (イベントタイプ) で、[Rule with an event pattern] (イベントパターンを使用するルール) を選択します。

    5. [Next] (次へ) をクリックします。

  6. [Step 2: Build event pattern] (ステップ 2: イベントパターンを作成する) で、次の操作を行います。

    1. [イベントソース] で、[AWS イベントまたは EventBridge パートナーイベント] を選択します。

    2. [Event pattern] (イベントパターン) セクションにある [Event source] (イベントソース) で、[AWS service] が選択されていることを確認し、[AWS service][EC2] を選択します。

    3. [Event type] (イベントタイプ) で、[EBS Snapshot Notification] (EBS スナップショット通知) を選択し、[Specific event(s)] (特定のイベント) を選択してから、[createSnapshot] を選択します。

    4. [Specific result(s)] (特定の結果) を選択してから、[succeeded] (成功) を選択します。

    5. [Next] (次へ) をクリックします。

  7. [Step 3: Select targets] (ステップ 3: ターゲットを選択する) で、次を実行します。

    1. [ターゲットタイプ] では、AWS[サービス] を選択します。

    2. [Select target] (ターゲットを選択) で [Lambda function] (Lambda 関数) を選択し、前に作成した関数を [Function] (関数) で選択します。

    3. [Next] (次へ) を選択します。

  8. [Step 4: Configure tags] (ステップ 4: タグを設定する) で、必要に応じてルールのタグを指定し、[Next] (次へ) を選択します。

  9. [Step 5: Review and create] (ステップ 5: 確認および作成する) でルールを確認し、[Create rule] (ルールを作成) を選択します。

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