Knative Eventing は、外部イベントシステムの統合を簡素化する包括的なイベントモデルを提供します。ACK クラスターに Knative Eventing コンポーネントをデプロイし、トリガーを作成することで、イベント駆動の機能を有効にできます。このトピックでは、EventBridge を使用して、本番環境レベルのイベント駆動機能を Knative に追加する方法について説明します。
前提条件
-
ご利用の Knative Serving のバージョンが 1.12.7 以降であることを確認してください。
-
ossutil をインストールし、バケットを作成します。詳細については、「ossutil のインストール」および「バケットの作成」をご参照ください。
-
EventBridge を有効化し、必要な権限を付与します。
説明EventBridge の詳細については、「EventBridge とは」をご参照ください。
仕組み
EventBridge は、さまざまなイベントソースをサポートしています。イベントバス、イベントルール、イベントターゲットを設定することで、イベントをフィルタリングおよび変換できます。これらのイベントは、Knative サービスをトリガーして消費させることができ、オンデマンドでのリソース使用量を実現します。以下の図にアーキテクチャを示します。
OSS をイベントソースとして EventBridge に接続できます。OSS が EventBridge のイベントバスに発行できるイベントタイプの詳細については、「OSS イベント」をご参照ください。
ステップ 1:Eventing および EventBridge コンポーネントのデプロイ
Knative は EventBridge を使用してイベント駆動機能を提供し、Alibaba Cloud の公式イベントソースとイベント転送の両方をサポートします。
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
アドオン管理 タブで、Eventing および EventBridge コンポーネントをデプロイします。
-
アドオン管理 タブで Eventing コンポーネントを見つけ、アクション 列の デプロイメント をクリックします。
-
Eventing がデプロイされた後、EventBridge コンポーネントを見つけ、操作 列の デプロイメント をクリックします。ダイアログボックスで、AccessKey ID と AccessKey Secret を入力し、[OK] をクリックします。
AccessKey ペアの取得方法については、「AccessKey ペアの作成」をご参照ください。
説明RAM ユーザーのセキュリティを強化するために、コンソールへのサインイン時や機密性の高い操作を実行する際に、MFA デバイスをバインドして二次認証を行うことができます。これにより、ユーザー名とパスワードに加えて、さらなる保護レイヤーが提供されます。 詳細については、「RAM ユーザーへの MFA デバイスのバインド」をご参照ください。
コンポーネントの ステータス が デプロイ済 になれば、デプロイは成功です。
-
ステップ 2:Knative サービスの作成
このセクションでは、受信したイベントのコンテンツをログに記録する `event-display` という名前の Knative サービスを作成します。サービスは ACK コンソールまたは kubectl を使用して作成できます。
コンソール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 をクリックします。
-
サービス管理 タブをクリックし、テンプレートで作成 をクリックして Knative サービスを作成します。
以下にコード例を示します。
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` として保存し、`kubectl apply` コマンドを実行して Knative サービスを作成します。
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_3874dbdkubectl apply -f event-display.yaml -
次のコマンドを実行して、Knative サービスの状態を確認します。
kubectl get ksvc実行結果の例:
NAME URL LATESTCREATED LATESTREADY READY REASON event-display http://event-display.default.example.com event-display-00001 event-display-00001 True
ステップ 3:トリガーの作成
コンソール
-
Knative ページで、サービス管理 タブをクリックします。対象のサービス名をクリックし、トリガー タブをクリックします。
-
トリガーの作成 をクリックします。設定 ページで、以下のパラメーターを設定し、画面の指示に従ってトリガーを作成します。
パラメーター
説明
例
名前
トリガーのカスタム名。
my-service-trigger
Broker
EventBridge または その他 を選択できます。
EventBridge
イベントソース
複数のイベントソースがサポートされています。
OSS
イベントタイプ
複数のイベントタイプがサポートされています。
oss:ActionTrail:ConsoleOperation
トリガーが作成されると、トリガー タブで確認できます。
Kubectl
-
以下の内容を `my-service-trigger.yaml` として保存し、クラスターにデプロイしてトリガーを作成します。
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: event-display namespace: default-
broker:`eventbridge-default-broker` を指定します。これは EventBridge のデフォルトイベントバス (`default`) に対応します。 -
source:EventBridge がサポートするイベントソース。 -
type:イベントソースのイベントタイプ。複数のイベントタイプを指定するには、カンマ (,) で区切ります。 -
subscriber:イベントをサブスクライブするサービス。
kubectl apply -f my-service-trigger.yaml -
-
次のコマンドを実行して、トリガーが作成されたかどうかを確認します。
kubectl get triggers実行結果の例:
NAME BROKER SUBSCRIBER_URI AGE READY REASON my-service-trigger eventbridge-default-broker http://event-display.default.svc.cluster.local 42h True
ステップ 4:イベント消費の検証
-
次のコマンドを実行して、ファイルを OSS バケットにアップロードします。
説明OSS バケットと EventBridge が同じリージョンにあることを確認してください。
ossutil cp <file_name> oss://<bucket_name>ファイルが OSS にアップロードされると、EventBridge は Knative サービスをトリガーしてイベントを消費します。
-
イベントトレースを表示します。
EventBridge コンソールにログインします。左側のナビゲーションウィンドウで、[イベントバス] をクリックします。
-
表示されたページで、default イベントバスを見つけ、操作 列の イベントトレース をクリックします。時間範囲で照会 タブで 期間 を設定し、クエリ をクリックします。
-
イベントソース が Object Storage Service で、イベントタイプ が アップロード であるイベントを見つけます。そのイベントの アクション 列にある イベントトレース をクリックします。
配信ステータスが Succeeded で、応答が
[200]の場合、EventBridge はイベントを対象のサービスに正常に配信しています。イベントトレース ページで、イベントの配信ステータスを確認できます。
-
Knative サービスがイベントを消費したことを確認します。
-
次のコマンドを実行して、イベントを消費するために作成された新しい Pod を確認します。
kubectl get pod実行結果の例:
NAME READY STATUS RESTARTS AGE event-display-00001-deployment-56cc79****-z2vhv 2/2 Running 0 7s -
次のコマンドを実行してログを表示し、Knative サービスがイベントを記録したことを確認します。
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"}}}}
この出力は、Knative サービスがイベントを消費し、OSS にアップロードされたファイルの詳細をログに記録したことを示しています。
-