このトピックでは、EventBridge を使用して Elastic Compute Service (ECS) イベントをサブスクライブし、ダウンストリームサービスに配信する方法について説明します。
背景情報
EventBridge は Alibaba Cloud のイベントハブです。Alibaba Cloud サービスとアプリケーション、およびアプリケーション間の接続のための統一されたイベントセンターを提供します。EventBridge は、標準の CloudEvents 1.0 プロトコルを使用します。EventBridge を使用して、Alibaba Cloud サービス、Software as a Service (SaaS) アプリケーション、および独自のビジネスアプリケーションからのイベントを管理できます。EventBridge は、アップストリームの Alibaba Cloud サービスからのイベントの品質を保証し、改善されたイベントサブスクリプション体験を提供し、データ配信の信頼性を向上させます。EventBridge は、99.99999999% のデータ信頼性と 99.95% のサービス可用性を保証する Service-level agreement (SLA) を提供します。
EventBridge を使用してイベントをサブスクライブすることには、ECS の DescribeInstanceHistoryEvents API オペレーションを呼び出して新しいイベントをポーリングする方法に比べて、次のような利点があります。
-
適時性の向上:特定のタイプのイベントが検出されると、ミリ秒以内に特定の操作をトリガーできます。
-
コストの削減:定期的にイベントをポーリングする必要がないため、不要なオーバーヘッドを回避できます。

利用シーン
-
特定の ECS イベントをサブスクライブして、DingTalk、ショートメッセージ、またはメールによる通知をトリガーできます。
-
特定の ECS イベントを、インターネットまたは VPC 経由でダウンストリームの HTTP または HTTPS サービスにプッシュできます。
-
複数の Alibaba Cloud アカウントから ECS イベントを集約できます。
-
特定の ECS イベントが発生したときに、Function Compute を使用して特定のアクションをトリガーできます。
-
イベントのレイテンシーが高い、またはイベント量が多いシナリオでは、ECS イベントを Simple Message Queue (formerly MNS) に配信してサブスクライブできます。
前提条件
-
DingTalk ロボットを作成し、その Webhook URL とキーを記録します。
-
Simple Message Queue (formerly MNS) キューを作成します。詳細については、「Simple Message Queue (旧称:MNS) のアクティベートと権限の付与」および「キューの作成」をご参照ください。
ステップ 1:Alibaba Cloud サービス専用のイベントバスの選択
システムイベントバスは、EventBridge が自動的に作成する `default` バスです。Alibaba Cloud サービスは、リアルタイムで `default` バスにイベントを配信します。`default` バスで Alibaba Cloud サービスからのイベントを見つけてサブスクライブできます。
EventBridge コンソールにログインします。左側のナビゲーションウィンドウで、[イベントバス] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。
-
[EventBridge] ページで、[default] をクリックします。
ステップ 2:ECS イベント用のイベントルールの作成
-
[EventBridge] ページで、左側のナビゲーションウィンドウの [イベントルール] をクリックし、次に [ルールを作成] をクリックします。
-
[ルールを作成] パネルで、次の手順を実行します。
-
[基本情報を設定] タブで、名前 テキストボックスに名前を入力し、説明 テキストボックスに説明を入力します。次に、次へ をクリックします。
-
[イベントパターンを設定] タブで、イベントパターンを設定します。次に、次へ をクリックします。
-
Alibaba Cloud サービスイベントソース タブをクリックします。
-
イベントソース ドロップダウンリストから、[acs.ecs] を選択します。
-
イベントタイプ ドロップダウンリストから、サブスクライブしたいイベントタイプを選択します。複数のイベントタイプを選択できます。
-
[イベントパターンのデバッグ] セクションで、選択したイベントタイプのサンプルを表示できます。たとえば、[インスタンスのライフサイクルステータスの変更に対する ecs.Instance.StateChange] を選択すると、次のサンプルが表示されます。
{ "id": "45ef4dewdwe1-7c35-447a-bd93-fab****", "source": "acs.ecs", "specversion": "1.0", "subject": "acs.ecs:cn-hangzhou:123456789098****:215672", "time": "2020-11-19T21:04:41Z", "type": "ecs:Instance:StateChange", "aliyunaccountid": "123456789098****", "aliyunpublishtime": "2020-11-19T21:04:42Z", "aliyuneventbusname": "default", "aliyunregionid": "cn-hangzhou", "aliyunpublishaddr": "172.25.XX.XX", "data": { "instanceName": "iZ0jl0kyquo46h****", "instanceType": "ecs.c6.large", "privateIpAddress": "172.21.XX.XX", "publicIpAddress": "8.37.XX.XX", "resourceId": "i-0jl0kyquo46****", "resourceType": "ALIYUN::ECS::Instance", "spotStrategy": "SpotWithPriceLimit", "state": "Running" } }
-
-
[ターゲットを設定] タブで、サービスタイプ を選択し、プッシュシナリオを設定します。
シナリオ 1:Simple Message Queue (formerly MNS) へのプッシュ
Simple Message Queue (formerly MNS) を使用して、イベントのレイテンシーが高い、またはイベント量が多いシナリオでイベントをサブスクライブできます。Simple Message Queue (formerly MNS) の課金に関する詳細については、「課金」をご参照ください。
-
サービスタイプ:Simple Message Queue (formerly MNS) を選択します。
-
キュー:作成したキューを選択します。
-
メッセージ本文 : [イベント完了] を選択します。
-
Base64 デコードの有効化:はい を選択します。Base64 エンコーディングを有効にすると、データは Simple Message Queue (formerly MNS) の宛先キューに配信される前にエンコードされます。
[サービスタイプ] を Simple Message Queue (formerly MNS) に設定した場合、NetworkInterfaceDemo.zip を使用して Simple Message Queue (formerly MNS) からのメッセージをリッスンし、イベントを取得できます。
シナリオ 2:DingTalk へのプッシュ
-
サービスタイプ:[DingTalk] を選択します。
-
アドレス:DingTalk ロボットの Webhook URL を入力します。
-
秘密鍵:DingTalk ロボットのキーを入力します。
-
プッシュ内容:EventBridge のテンプレート機能を使用して、イベントから DingTalk ロボットにパラメーターをプッシュできます。たとえば、ECS インスタンスのインスタンス名 (`instanceName`) と実行状態 (`state`) をプッシュするには、次のパラメーターを設定します。
-
Parameters:JSONPath 式を使用して、イベントから取得したいフィールドを指定し、変数名を設定します。
{ "instanceName":"$.data.instanceName", "state":"$.data.state" } -
Template:DingTalk ロボットが必要とする形式でテンプレートを定義し、定義した変数を参照します。
{ "msgtype": "text", "text": { "content": "${instanceName} state is ${state}" } }
-
シナリオ 3:ダウンストリーム HTTP サービスへのプッシュ
-
サービスタイプ:http または https を選択します。
-
URL:イベントを受信する URL を設定します。
-
Body: イベントコンテンツの形式を設定します。EventBridge はイベントを変換し、必要な形式で HTTP ターゲットにプッシュできます。次の変換形式がサポートされています: **完全なイベント**、**部分的なイベント**、**静的フィールド**、および **テンプレート**。詳細については、「イベント変換」をご参照ください。
-
ネットワークタイプ:
-
インターネット:インターネット経由でターゲット URL にアクセスします。
-
VPC:ターゲット URL がインターネットに公開されていない場合にこのオプションを選択します。VPC ID、VSwitch ID、およびセキュリティグループ ID を指定する必要があります。
-
シナリオ 4:プッシュ後のアクションのトリガー
ECS イベントが発生したときに、よりカスタマイズされたアクションをトリガーしたい場合は、サービスタイプを Function Compute に設定します。イベントを特定の関数にプッシュし、Function Compute でコードを記述してカスタムアクションを定義できます。
-
サービスタイプ:[Function Compute] を選択します。
-
サービス:Function Compute で作成したサービスの名前。
-
関数:Function Compute で作成した関数の名前。
-
イベント:イベントコンテンツの形式を設定します。EventBridge はイベントを変換し、必要な形式で Function Compute にプッシュできます。サポートされている変換テンプレートは、[完全なイベント]、[部分的なイベント]、[静的フィールド]、および [テンプレート] です。詳細については、「イベント変換」をご参照ください。
-
実行方法:
-
同期:Function Compute がイベントを受信します。リクエストは、関数がイベントを処理した後に成功と見なされます。
-
非同期:リクエストは、Function Compute がイベントを受信した後に成功と見なされます。
詳細については、「Function Compute へのルーティング」をご参照ください。
-
シナリオ 5:複数の Alibaba Cloud アカウントからの ECS イベントの集約
EventBridge は、異なるアカウントやリージョンからの ECS イベントを、単一のアカウントとリージョン内のイベントバスに集約できます。これを行うには、サービスタイプを [EventBridge イベントバス] に設定します。
-
ターゲットタイプ:
-
同一アカウントのイベントバス:現在のアカウント内の別のバスにイベントを配信します。
-
クロスアカウントイベントバス:別のアカウントのバスにイベントを配信します。このオプションを選択した場合、必要な権限を付与する必要があります。詳細については、「EventBridge へのイベントのルーティング」をご参照ください。
-
-
リージョン:中国本土内のリージョン間、および中国本土以外のリージョン間でのクロスリージョン配信がサポートされています。
-
Event Bus:ターゲットイベントバスの名前。
-
イベント:デフォルトでは、完全なイベントが配信されます。これは変更できません。
[ターゲットを設定] タブの下部で、必要に応じてリトライポリシーとデッドレターキューを設定できます。詳細については、「リトライとデッドレターキュー」をご参照ください。
その他のシナリオの詳細については、「ターゲットサービスタイプ」をご参照ください。
-
-
ステップ 3:イベントのトリガー
このトピックでは、インスタンスのライフサイクルステータスの変更に関する ecs.Instance.StateChange イベントタイプを例として使用します。このイベントをトリガーするには、ECS インスタンスの実行ステータスを変更します。
-
ECS コンソールにログインします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
上部のナビゲーションバーで、ターゲットリソースがあるリージョンを選択します。
-
ターゲットの ECS インスタンスを見つけます。操作 列で、 を選択し、インスタンスの実行ステータスを変更します。
ステップ 4:配信結果の表示
-
ECS イベントが生成されたかどうかを確認します。
EventBridge では、時間範囲、イベントタイプ、ルール名、またはイベント ID で ECS イベントを検索できます。イベント ID は ECS イベント ID と同じです。詳細については、「イベントのクエリ」をご参照ください。
-
ECS イベントサブスクリプションの配信結果を確認します。
前のステップで取得したイベント ID を使用して、操作 列の [イベントトレース] をクリックして、イベントのプッシュ追跡を表示できます。追跡には、ターゲット、ステータス、プッシュ回数、時間などの詳細が含まれます。

イベントのモニタリングとアラート
EventBridge のモニタリングダッシュボードで、作成した ECS イベントサブスクリプションタスクの呼び出し回数、プッシュ成功率、プッシュレイテンシーを表示できます。また、ビジネスシナリオに基づいてアラートルールを設定することもできます。
-
CloudMonitor コンソールにログインします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
[クラウドサービス監視] ページで、左側のナビゲーションウィンドウの [ミドルウェア] をクリックします。次に、[ミドルウェア] セクションで、ポインターを [イベントバス] に移動し、[イベントバス - EventBus] をクリックします。

-
[イベントバス - EventBus] ページで、リージョンを選択します。次に、[default] バスの 操作 列にある [モニタリングチャート] をクリックして、そのモニタリング詳細を表示します。

モニタリングページで、EventBridge リソースのアラートルールを設定できます。リソースがアラートルールの条件を満たすと、CloudMonitor は自動的にアラート通知を送信します。詳細については、「アラートルールの設定」をご参照ください。
リトライとデッドレターキュー
イベントがイベントバスに書き込まれた後、EventBridge はイベントがダウンストリームサービスに少なくとも 1 回プッシュされることを保証します。ダウンタイム、サービス非可用性、ネットワークジッターなどの例外により、ダウンストリームの受信側がイベントを受信できない場合、EventBridge は、リトライポリシー、フォールトトレランスポリシー、デッドレターキューなど、これらの例外を処理するための複数の方法を提供します。イベントが正しく配信されるように、「ステップ 2:ECS イベント用のイベントルールの作成」でリトライおよびデッドレターポリシーを設定できます。
-
リトライポリシー
ダウンストリームの受信側がイベントを受信できない場合、EventBridge がイベントをプッシュする際に例外が発生します。この場合、EventBridge でリトライポリシーを設定して、プッシュ成功率を最大化できます。
-
[バックオフリトライ]:3 回リトライします。リトライ間隔は 10 秒から 20 秒のランダムな値です。
-
[指数バックオフリトライ]:176 回リトライします。リトライ間隔は指数関数的に増加し、最大 512 秒になります。合計リトライ時間は 1 日です。リトライ間隔は 1、2、4、8 と続き、最大 512 秒までです。
-
-
デッドレター処理ポリシー
最大リトライ回数に達してもイベントが配信されない場合、EventBridge はデフォルトでイベントを破棄します。イベントを保持したい場合は、デッドレターキューに送信するように設定できます。EventBridge は、ApsaraMQ for RocketMQ、Simple Message Queue (formerly MNS)、ApsaraMQ for Kafka、EventBridge などのデッドレターキューをサポートしています。
-
フォールトトレランスポリシー
イベントを順序通りに処理する必要がある場合は、例外が発生したときにタスクを一時停止し、イベントが正常にプッシュされるまで待機する必要があります。そうしないと、イベントが順序通りに処理されない可能性があります。この場合、[フォールトトレランスを禁止] を選択します。順序が重要でないシナリオでは、最大の同時プッシュ能力を提供するために [フォールトトレランスを許可] を選択することを推奨します。
-
[フォールトトレランスを許可]:例外が発生しても、実行はブロックされません。リトライポリシーが尽きた後、メッセージは設定に基づいてデッドレターキューに配信されるか、破棄されます。
-
[フォールトトレランスを禁止]:例外が発生し、リトライポリシーが尽きた場合、実行はブロックされます。
-