View a markdown version of this page

Image Builder パイプラインで EventBridge を使用する - EC2 イメージビルダー

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Image Builder パイプラインで EventBridge を使用する

AWS および パートナーサービスは、イベントをほぼリアルタイムで Amazon EventBridge イベントバスにストリーミングします。独自のカスタムイベントを送信することもできます。イベントバスはルールを使用して、各イベントを 1 つ以上のターゲットにルーティングします。

Image Builder は、2 つの独立した方向で EventBridge と連携します。

Image Builder が送信するイベントと各イベントのフィールドの詳細については、「」を参照してくださいImage Builder が送信するイベントメッセージ

注記

イベントバスはリージョン固有です。ルールと呼び出すリソースは通常、同じリージョンにあります。リージョン間でルーティングするには、送信先リージョンのイベントバスをターゲットにします。Image Builder は、ビルドが実行されるリージョンのデフォルトのイベントバスにイベントを発行します。

イベントブリッジの用語

以下の用語は、EventBridge が Image Builder パイプラインとどのように統合されるかを理解するのに役立ちます。

イベント

1 つまたは複数のアプリケーションリソースに影響を与える可能性のある環境の変更について記述します。環境は、 AWS 環境、SaaS パートナーサービスまたはアプリケーション、またはアプリケーションまたはサービスのいずれかです。タイムラインに予定されたイベントをセットアップすることもできます。

イベントバス

アプリケーションやサービスからイベントデータを受け取るパイプライン。

ソース

イベントをイベントバスに送信したサービスまたはアプリケーション。

ターゲット

EventBridge がルールに一致したときに呼び出し、イベントからターゲットにデータを配信するリソースまたはエンドポイント。

ルール

ルールは、受信したイベントをマッチングし、処理のためにターゲットに送信します。1 つのルールで複数のターゲットにイベントを送信し、それを並行して実行することができます。ルールは、イベントパターンまたはスケジュールに基づいて作成します。

パターン

イベントパターンは、ターゲットアクションを開始するために、ルールがマッチするイベント構造とフィールドを定義します。

スケジュール

スケジュールルールは、Image Builder パイプラインを実行して四半期ごとにイメージを更新するなど、スケジュールに基づいてアクションを実行します。スケジュール表現には次の 2 種類があります。

  • Cron 式 — 例えば、特定の日に毎週実行するなど、単純な基準を概説できる cron 構文を使用して、特定のスケジューリング条件を照合します。また、月の 5 日目の午前 2 時から午前 4 時の間に四半期ごとに実行するなど、より複雑な条件を設定することもできます。

  • レート表現 — 12 時間ごとなど、ターゲットを定期的に呼び出す間隔を指定します。

Image Builder パイプラインのEventBridge ルールを表示する

Image Builder の イメージパイプライン 詳細ページの EventBridge ルール タブには、アカウントがアクセスできる EventBridge イベントバスと、現在のパイプラインに適用される選択したイベントバスのルールが表示されます。このタブは、新しいリソースを作成するためのEventBridge コンソールにも直接リンクしています。

EventBridge コンソールにリンクするアクション
  • イベントバスを作成

  • ルールの作成

EventBridge の詳細については、Amazon EventBridge ユーザーガイドの以下のトピックを参照してください。

スケジュールに基づいてパイプラインビルドをトリガーする

Image Builder パイプラインを EventBridge スケジュールルールのターゲットとして設定し、定期的にイメージを更新します。次の例では、90 日ごとにパイプラインビルドを開始するルールを作成します。

注記

パイプラインは、独自の組み込みスケジュール (パイプラインに保存されている cron 式または rate 式) を実行することもできます。このスケジュールは Image Builder によって管理され、EventBridge ルールとは別のものです。

  • パイプラインスケジュールを使用して、簡単な定期的な再構築を行います。また、依存関係の更新に基づいてビルドをゲートし、失敗したパイプラインを自動的に無効にすることもできます。EC2 Image Builder API リファレンスScheduleの「」を参照してください。

  • EventBridge ルールを使用して、イベントパターンからビルドを開始するか、1 つのトリガーを複数のターゲットにファンアウトします。

AWS マネジメントコンソール
  1. https://console.aws.amazon.com/imagebuilder/ で、EC2 Image Builder コンソールを開きます。

  2. アカウントで作成されたイメージパイプラインのリストを表示するには、ナビゲーションペインから [Image pipelines] を選択します。

    注記

    イメージパイプラインのリストには、パイプラインによって作成される出力イメージのタイプを示すインジケータ - AMI または が含まれますDocker。

  3. 詳細を表示したりパイプラインを編集したりするには、[パイプライン名] のリンクを選択します。パイプラインの詳細ビューが開きます。

    注記

    また、パイプライン名の横にあるチェックボックスを選択し、詳細を表示を選択することもできます。

  4. EventBridge のルールタブを開きます。

  5. Event Bus パネルであらかじめ選択されているデフォルトのイベントバスはそのままにしておきます。

  6. ルールの作成を選択します。Amazon EventBridge コンソールのルールを作成ページに移動します。

  7. ルールの名前と説明を入力します。ルール名は、選択したリージョンのイベントバス内で一意である必要があります。

  8. パターンを定義パネルで、スケジュールオプションを選択します。これによりパネルが拡張され、すべての固定レートオプションが選択されます。

  9. 90 最初のボックスに入力し、ドロップダウンリストから Days を選択します。

  10. ターゲットの選択 パネルで以下のアクションを実行します。

    1. Target のドロップダウンリストから EC2 Image Builder を選択します。

    2. Image Builder パイプラインにルールを適用するには、Image Pipeline ドロップダウンリストからターゲットパイプラインを選択します。

    3. EventBridge には、選択したパイプラインのビルドを実行するためのアクセス許可が必要です。この例では、この特定のリソースに対して新しいロールを作成するをデフォルトのままにします。

    4. Add target を選択します。

  11. 作成を選択します。

注記

現在の EventBridge コンソールは EventBridge スケジューラを介してスケジュールを作成する場合があり、正確なラベルとステップは時間の経過とともに変更される可能性があります。リンクされた Amazon EventBridge ユーザーガイドは、現在のコンソールエクスペリエンスに対して権威があります。

AWS CLI

これらのステップでは、90 日ごとにパイプラインビルドを開始するスケジュールルールを作成します。EventBridge には、パイプラインimagebuilder:StartImagePipelineExecutionで を呼び出すために引き受けることができる IAM ロールが必要です。

  1. rate 式を使用してルールを作成します。

    aws events put-rule \ --name refresh-image-every-90-days \ --schedule-expression "rate(90 days)"
  2. EventBridge が引き受けることができる IAM ロールを、この信頼ポリシーで作成します。

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" }] }

    パイプラインの開始を許可するアクセス許可ポリシーをアタッチします。

    { "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "imagebuilder:StartImagePipelineExecution", "Resource": "arn:aws:imagebuilder:us-west-2:111122223333:image-pipeline/my-pipeline" }] }
  3. パイプラインをルールのターゲットとして追加し、前のステップのロールを参照します。

    aws events put-targets \ --rule refresh-image-every-90-days \ --targets '[{ "Id": "1", "Arn": "arn:aws:imagebuilder:us-west-2:111122223333:image-pipeline/my-pipeline", "RoleArn": "arn:aws:iam::111122223333:role/EventBridgeImageBuilderRole" }]'
  4. ターゲットがアタッチされていることを確認します。

    aws events list-targets-by-rule --rule refresh-image-every-90-days
注記

この例で説明されていない rate 式ルールの設定について詳しくは、Amazon EventBridge User Guide のレート表現を参照してください。

イベントパターンからパイプラインビルドをトリガーする

スケジュールの代わりに、イベントがパターンに一致するときにパイプラインビルドを開始できます。イベントパターンを使用してルールを作成し、パイプラインをターゲットとして追加します (「」で説明されているのと同じ IAM ロールを使用スケジュールに基づいてパイプラインビルドをトリガーする)。

次の の例では、特定のベースイメージが になるたびにビルドを開始しますAVAILABLE。たとえば、ベースイメージが終了した後に依存イメージビルドを連鎖させます。resources プレフィックスは、依存パイプラインの独自の出力ではなく、そのイメージのみと一致するように、ルールをベースイメージにスコープします。

{ "source": ["aws.imagebuilder"], "detail-type": ["EC2 Image Builder Image State Change"], "detail": { "state": { "status": ["AVAILABLE"] } }, "resources": [{ "prefix": "arn:aws:imagebuilder:us-west-2:111122223333:image/my-base-image/" }] }
重要

この例のresourcesプレフィックスに示すように、イベントパターンをベースイメージにスコープします。アカウント内のすべてのAVAILABLEイメージに一致するパターンは、依存パイプラインの独自の出力イメージとも一致します。これにより、パイプラインが再び開始され、無限のビルドループを作成できます。特定のベースイメージ名または ARN プレフィックスをフィルタリングして、ルールが意図したイメージのみと一致するようにします。

AWS マネジメントコンソール
  1. Amazon EventBridge コンソールの https://console.aws.amazon.com/events/ を開いてください。

  2. ルールを選択し、ルールを作成しますデフォルトのイベントバスを保持します。

  3. 名前と説明を入力します。[ルールタイプ] で、[イベントパターンを持つルール] を選択します。

  4. イベントソースで、その他 を選択し、上記のイベントパターンをイベントパターンボックスに貼り付けます。

  5. ターゲットの選択パネルで、EC2 Image Builderターゲットドロップダウンリストから を選択し、Image Pipeline ドロップダウンリストから構築するパイプラインを選択します。

  6. EventBridge には、パイプラインを開始するためのアクセス許可が必要です。この特定のリソースの新しいロールを作成するデフォルトのオプションのままにします。

  7. [‬ルールを作成]‭ を選択します。

AWS CLI

ルールを作成し、パイプラインをターゲットとして追加します。

aws events put-rule \ --name rebuild-on-base-available \ --event-pattern '{"source":["aws.imagebuilder"],"detail-type":["EC2 Image Builder Image State Change"],"detail":{"state":{"status":["AVAILABLE"]}},"resources":[{"prefix":"arn:aws:imagebuilder:us-west-2:111122223333:image/my-base-image/"}]}' aws events put-targets \ --rule rebuild-on-base-available \ --targets '[{"Id":"1","Arn":"arn:aws:imagebuilder:us-west-2:111122223333:image-pipeline/dependent-pipeline","RoleArn":"arn:aws:iam::111122223333:role/EventBridgeImageBuilderRole"}]'

一致できるイベントとそのフィールドについては、「」を参照してくださいImage Builder が送信するイベントメッセージ

Image Builder が送信するイベントへの対応

Image Builder は、イメージの状態が変わったとき、スキャンが完了したとき、ワークフローステップが入力のために一時停止したとき、パイプラインが自動的に無効になったときなど、リソースが重要なポイントに達すると、デフォルトのイベントバスにイベントを発行します。これらのイベントをルールと照合し、ターゲットにルーティングして独自のオートメーションを開始できます。一般的なパターンは次のとおりです。

  • イメージが AVAILABLEまたは になったら、Amazon SNS トピックを通じてチームに通知しますFAILED

  • Lambda 関数を呼び出して、パラメータストアに新しい AMI を登録したり、外部コンプライアンステストを開始したり、デプロイパイプラインを更新したりできます。

  • スキャンが重要な CVEs。

  • ワークフローステップがビルドを一時停止するときに、承認WaitForActionワークフローを推進します。

Image Builder が送信するイベントを処理するには、イベントパターンがイベント source (aws.imagebuilder) と に一致しdetail-type、オプションで 内のフィールドを絞り込むルールを作成しますdetail。次に、オートメーションを実行するターゲットを追加します。

例: イメージの完了時に通知する (AVAILABLE または FAILED)

{ "source": ["aws.imagebuilder"], "detail-type": ["EC2 Image Builder Image State Change"], "detail": { "state": { "status": ["AVAILABLE", "FAILED"] } } }

例: スキャンで重要な CVEs

クリーンスキャンがルールをトリガーしないように、数値マッチャーを使用します。

{ "source": ["aws.imagebuilder"], "detail-type": ["EC2 Image Builder CVE Detected"], "detail": { "finding-severity-counts": { "critical": [{ "numeric": [">", 0] }] } } }
AWS マネジメントコンソール
  1. Amazon EventBridge コンソールの https://console.aws.amazon.com/events/ を開いてください。

  2. ルールを選択し、ルールを作成しますデフォルトのイベントバスを保持します。

  3. 名前と説明を入力します。[ルールタイプ] で、[イベントパターンを持つルール] を選択します。

  4. イベントソースで、その他を選択し、上記のイベントパターンのいずれかをイベントパターンボックスに貼り付けます。

  5. Amazon SNS トピックや Lambda 関数などのターゲットを選択し、ターゲット設定を完了します。

  6. [‬ルールを作成]‭ を選択します。

AWS CLI

ルールを作成し、一致するイベントを Amazon SNS トピックに送信します。

aws events put-rule \ --name image-available-or-failed \ --event-pattern '{"source":["aws.imagebuilder"],"detail-type":["EC2 Image Builder Image State Change"],"detail":{"state":{"status":["AVAILABLE","FAILED"]}}}' aws events put-targets \ --rule image-available-or-failed \ --targets '[{"Id":"1","Arn":"arn:aws:sns:us-west-2:111122223333:image-status"}]'

EventBridge には、ターゲットにイベントを送信するためのアクセス許可も必要です。各ターゲットタイプに必要なアクセス許可の詳細については、「Amazon EventBridge ユーザーガイド」の「ターゲットにイベントを送信するためのアクセス許可」および「Amazon EventBridge のリソースベースのポリシーの使用」を参照してください。 EventBridge EventBridge

注記

EC2 Image Builder Workflow Step Waiting イベントに一致させると、ターゲットはイベントworkflow-step-execution-idからの と、 RESUME または actionSendWorkflowStepActionを呼び出すことができますSTOP。「WaitForAction」を参照してください。