Container Service for Kubernetes (ACK) でオンデマンドワークロードを実行する際、Knative Eventing のセットアップにおいて、EventBridge をイベントブローカーとして使用します。イベント(例:Object Storage Service (OSS) へのオブジェクトアップロード)が到着すると、EventBridge はそのイベントをデフォルトイベントバス経由で Trigger にルーティングします。Trigger はイベントソースおよびイベントタイプに基づいてフィルタリングを行い、該当するイベントを Knative Service へ転送して処理します。
イベントフロー:OSS アップロード → EventBridge → eventbridge-default-broker → Trigger(ソースおよびタイプでフィルタリング)→ Knative Service Pod。
OSS をイベントソースとして EventBridge に接続できます。詳細については、「OSS イベント」をご参照ください。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
ACK クラスターに Knative Serving 1.12.7 以降がインストールされていること
ossutil がインストール済みであり、OSS バケットが作成済みであること。詳細については、「ossutil のインストール」および「バケットの作成」をご参照ください。
EventBridge が有効化されており、RAM ユーザーに必要な権限が付与済みであること。詳細については、「EventBridge の有効化と RAM ユーザーへの権限付与」をご参照ください。
EventBridge の概念の概要については、「EventBridge とは
ステップ 1:Eventing および EventBridge コンポーネントのデプロイ
まず Eventing をデプロイし、その後 EventBridge をデプロイします。Eventing は Broker および Trigger の基盤を提供し、EventBridge は Alibaba Cloud サービスのイベントソースをこの基盤に接続します。
ACK コンソールにログインします。左側ナビゲーションウィンドウで、ACK コンソールACK コンソール[クラスター] をクリックします。
[クラスター] ページで、管理対象のクラスター名をクリックします。左側ナビゲーションウィンドウから、[アプリケーション] > [Knative] を選択します。
[コンポーネント] タブで、以下の順序で 2 つのコンポーネントをデプロイします。両コンポーネントの [ステータス] 列に [デプロイ済み] と表示されたら、準備完了です。
[Eventing] を見つけ、[Actions] 列の [Deploy] をクリックします。
Eventing が [ステータス] 列に [デプロイ済み] と表示されたら、[EventBridge] を見つけ、[アクション] 列の [デプロイ] をクリックします。ダイアログボックスで、AccessKey ID と AccessKey Secret を入力し、[OK] をクリックします。AccessKey ペアを取得するには、「AccessKey の作成」をご参照ください。> 注意: RAM ユーザーアカウントを保護するには、コンソールへのログイン時や機密性の高い操作時の 2 次認証のために、多要素認証 (MFA) デバイスをバインドしてください。詳細については、「RAM ユーザーへの MFA デバイスのバインド」をご参照ください。
ステップ 2:Knative Service の作成
イベントコンシューマーとして機能する Knative Service を作成します。以下では、受信したすべてのイベントを記録する event-display というサービスを使用します。これにより、エンドツーエンドのイベント配信を検証できます。
ACK コンソールを使用する場合
ACK コンソールにログインし、対象クラスターの [アプリケーション] > [Knative] ページに移動します。
[サービス] タブをクリックし、[テンプレートから作成] をクリックします。
以下の YAML を貼り付け、送信します。
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display namespace: default spec: template: spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/event-display:20230207194118_3874dbd[サービス] タブで、[ステータス] 列に [作成済み] と表示されたら、サービスの準備が完了しています。
kubectl を使用する場合
以下の内容で
event-display.yamlというファイルを作成します。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-display namespace: default spec: template: spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/event-display:20230207194118_3874dbdマニフェストを適用します。
kubectl apply -f event-display.yamlサービスの準備状況を確認します。
kubectl get ksvcREADYがTrueになったら、サービスの準備が完了しています。NAME URL LATESTCREATED LATESTREADY READY REASON event-display http://event-display.default.example.com event-display-00001 event-display-00001 TrueREADYがFalseの場合は、数秒待ってから再度コマンドを実行してください。
ステップ 3:Trigger の作成
Trigger は、Broker に対してどのイベントを転送し、どこに送信するかを指示します。broker フィールドは Trigger をイベントバスに接続します。filter フィールドは通過させるイベントを決定します — 指定されたすべての属性に一致するイベントのみがサブスクライバーに届きます。subscriber フィールドは、一致したイベントを受信する Knative Service を指します。
ACK コンソールを使用する場合
[Knative] ページで、[サービス] タブをクリックし、Knative Service の名前をクリックします。サービス詳細ページで、[Trigger] タブをクリックします。
[Trigger の作成] をクリックし、[設定] ページでパラメーターを構成します。Trigger が作成されると、[Triggers] タブに表示されます。
パラメーター 説明 例 名前 Trigger の名前 my-service-triggerブローカー [EventBridge] または [その他] EventBridge[イベントソース] フィルタリング対象のイベントソース。複数のイベントソースを指定できます。 OSSイベントの種類 フィルタリング対象のイベントタイプ。複数のタイプを指定できます。指定されたいずれのタイプにも一致しないイベントは破棄されます。 oss:ActionTrail:ConsoleOperation
kubectl を使用する場合
以下の内容で
my-service-trigger.yamlというファイルを作成します。フィールド 値 効果 brokereventbridge-default-brokerTrigger をデフォルト EventBridge イベントバスに接続します。このバス上のイベント以外は無視されます。 sourceacs.ossOSS からのイベントのみを転送します。他のソースからのイベントは破棄されます。 typeoss:ActionTrail:ConsoleOperationこのタイプのイベントのみを転送します。複数のタイプを指定する場合は、カンマ( ,)で区切ります。subscriberサービス名および名前空間 一致したイベントを受信する Knative Service です。 apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: my-service-trigger spec: broker: eventbridge-default-broker filter: attributes: source: acs.oss type: 'oss:ActionTrail:ConsoleOperation' subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: helloworld-go namespace: defaultイベントルーティングに影響を与える主なフィールドとその効果:
マニフェストを適用します。
kubectl apply -f my-service-trigger.yamlTrigger の準備状況を確認します。
kubectl get triggersREADYがTrueになったら、Trigger の準備が完了しています。NAME BROKER SUBSCRIBER_URI AGE READY REASON my-service-trigger eventbridge-default-broker http://helloworld-go.default.svc.cluster.local 42h TrueREADYがFalseの場合は、数秒待ってから再度コマンドを実行してください。
ステップ 4:エンドツーエンドのイベント配信の検証
OSS イベントをトリガーし、EventBridge がそれを Knative Service に正しく配信することを確認します。
OSS バケットにオブジェクトをアップロードします。
重要OSS バケットと EventBridge は同一リージョンに配置する必要があります。
ossutil cp <file-name> oss://<bucket-name>アップロードが完了すると、EventBridge がイベントを検出し、Trigger 経由で Knative Service にルーティングします。
EventBridge コンソールでイベントトレースを確認します。
EventBridge コンソールにログインします。左側ナビゲーションウィンドウで、[イベントバス] をクリックします。
イベントバスページで、[デフォルト] イベントバスを見つけ、[イベントトレース] を [操作] 列からクリックします。
[時間範囲によるクエリ] タブで、[時間範囲] を設定し、[クエリ] をクリックします。
[イベントソース] を OSS に、[イベントタイプ] を [Put Object] に設定してから、[操作] 列の [イベントトレース] をクリックして、イベントが配信されたことを確認します。

Knative Service がイベントを消費したことを確認します。
Pod が実行中であることを確認します。
kubectl get pod期待される出力:
NAME READY STATUS RESTARTS AGE event-display-00001-deployment-56cc79****-z2vhv 2/2 Running 0 7sPod が表示されない場合は、数秒待ってから再度コマンドを実行してください。Knative Service はアイドル時にスケールダウンし、イベント受信時に新しい Pod を起動します。
イベントログを表示します。
kubectl logs event-display-00001-deployment-56cc79****-z2vhv user-container期待される出力:
{"data":{"eventVersion":"1.0","responseElements":{"requestId":"63E21F5FEE852133319101AD"},"eventSource":"acs:oss","eventTime":"2023-02-07T09:52:31.000Z","requestParameters":{"sourceIPAddress":"XX.XXX.XX.XXX"},"eventName":"ObjectCreated:PutObject","userIdentity":{"principalId":"1118324452360952"},"region":"cn-hangzhou","oss":{"bucket":{"name":"knative","arn":"acs:oss:cn-hangzhou:1581204543170042:knative","virtualBucket":"","ownerIdentity":"1581204543170042"},"ossSchemaVersion":"1.0","object":{"size":225496,"objectMeta":{"mimeType":"application/octet-stream"},"deltaSize":0,"eTag":"B350C082843DAC7E9E634193437EBA30","key":"demo.data"}}}}ログには "eventSource":"acs:oss" および "eventName":"ObjectCreated:PutObject" が含まれており、EventBridge が OSS アップロードイベントを正しく Knative Service にトリガーしたことが確認できます。
次のステップ
他のイベントソースでイベント駆動型ワークフローを設定するには、「GitHub イベントを Knative で使用する」をご参照ください。