Knative Eventingは、外部イベントシステムからイベントを取り込むプロセスを簡素化するイベントモデルを提供します。 Container Service for Kubernetes (ACK) クラスターにKnative Eventingコンポーネントをデプロイし、イベント駆動機能を有効にするトリガーを作成できます。 イベントにアクセスすると、システム内の標準のCloudEvents形式でシステムに転送されます。 このトピックでは、EventBridgeを使用して、Knativeの運用環境でイベント駆動機能を提供する方法について説明します。
前提条件
Knative Servingのバージョンは1.12.7以降です。
ossutilがインストールされ、バケットが作成されます。 詳細については、「ossutilのインストール」および「バケットの作成」をご参照ください。
EventBridgeがアクティブになり、EventBridgeコンソールを使用する権限が付与されます。 詳細については、「EventBridgeの有効化とRAMユーザーへの権限付与」をご参照ください。
EventBridgeは、Alibaba Cloudが提供するサーバーレスイベントバスサービスです。 EventBridgeは、他のAlibaba Cloudサービス、カスタムアプリケーション、およびSaaS (software-as-a-service) アプリケーションから、標準的かつ集中化された方法でアクセスできます。 さらに、EventBridgeは、標準のCloudEvents 1.0仕様に基づいて、これらのサービスとアプリケーション間でイベントをルーティングできます。 EventBridgeを使用して、疎結合および分散型のイベント駆動型アーキテクチャを構築できます。
機能紹介
EventBridgeは、さまざまなイベントソースをサポートしています。 イベントバス、ルール、ターゲットを設定して、イベントをフィルタリング、変換、配信できます。 EventBridgeを使用してKnativeサービスをトリガーしてイベントを消費することで、オンデマンドでリソースを使用できます。 次の図はアーキテクチャを示しています。
イベントソースとしてObject Storage Service (OSS) をEventBridgeに接続できます。 イベントソースとしてOSSをEventBridgeに接続する方法の詳細については、「OSSイベント」をご参照ください。
ステップ1: EventingおよびEventBridgeコンポーネントのデプロイ
KnativeはEventBridgeのイベントドリブン機能を提供し、Alibaba Cloudサービスのイベントソースとイベント転送をサポートします。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[コンポーネント] タブで、EventingおよびEventBridgeコンポーネントを展開します。
[コンポーネント] タブで、[検証] を見つけ、[操作] 列の [デプロイ] をクリックします。
Eventingのデプロイ後、EventBridgeを見つけ、[操作] 列の [デプロイ] をクリックします。 表示されるダイアログボックスで、AccessKey IDとAccessKey secretを入力し、[OK] をクリックします。
AccessKeyペアを取得する方法の詳細については、「AccessKeyペアの作成」をご参照ください。
重要アカウントのセキュリティを確保するために、できるだけ早い機会に次の操作を実行することを推奨します。
画面の指示に従って、アカウント管理者のパスワードを変更します。 デフォルトでは、最初のログイン時にRAMユーザーのパスワードを変更する必要があります。
セカンダリ認証の場合は、多要素認証 (MFA) デバイスをアカウント管理者にバインドすることを推奨します。 MFAは、ユーザー名とパスワードに加えて保護の層を追加するセキュリティ強化です。 詳細については、「MFAデバイスをRAMユーザーにバインドする」をご参照ください。
コンポーネントの [ステータス] 列に [デプロイ済み] が表示されている場合、コンポーネントがデプロイされます。
ステップ2: Knativeサービスの作成
このセクションでは、イベント表示という名前のKnativeサービスを例として使用します。 サービスは、受信したすべてのイベントを自動的に記録します。 次のコンテンツでは、ACKコンソールとkubectlでKnativeサービスを作成する方法について説明します。
ACKコンソールの使用
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
[サービス] タブで、Knativeサービスの [ステータス] 列に [作成済み] が表示されている場合、Knativeサービスが作成されます。
kubectlを使う
event-display.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。 このファイルは、Knative Serviceを作成するために使用されます。
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
次のコマンドを実行して、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: トリガーを作成する
ACKコンソールの使用
[Knative] ページで、[サービス] タブをクリックし、Knativeサービスの名前をクリックします。 表示されるページで、[トリガー] タブをクリックします。
[トリガーの作成] をクリックします。 [設定] ページで、指示に基づいてパラメーターを設定します。 下表に、各パラメーターを説明します。
パラメーター
説明
例
名前
トリガーの名前を入力します。
my-service-trigger
ブローカー
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: helloworld-go namespace: default
broker
: デフォルトのイベントバスに対応する名前をeventbridge-default-brokerに設定します。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://helloworld-go.default.svc.cluster.local 42h True
手順4: EventBridgeがKnativeサービスをトリガーしてイベントを消費できるかどうかを確認する
次の手順を実行する前に、ossutilをインストールする必要があります。
次のコマンドを実行して、ファイルをOSSにアップロードします。
説明OSSバケットとEventBridgeは同じリージョンにデプロイする必要があります。
ossutil cp <File name> oss://<Bucket name>
ファイルがアップロードされた後、EventBridgeはイベントを消費するためにKnativeサービスをトリガーします。
イベントトレースを表示します。
EventBridgeコンソールにログインします。 左側のナビゲーションウィンドウで、[イベントバス] をクリックします。
[イベントバス] ページで、[デフォルト] イベントを選択し、[アクション] 列の [イベントトラッキング] をクリックします。 [時間範囲でクエリ] タブで、[時間範囲] パラメーターを設定します。 [クエリ] をクリックします。
[イベントソース] を [OSS] に、[イベントタイプ] を [オブジェクトの配置] に設定し、対応するイベントの [操作] 列の [イベントトレース] をクリックします。
[イベントトレース] ページで、イベントが配信されたかどうかを確認できます。
Knativeサービスがイベントを消費するかどうかを確認します。
次のコマンドを実行して、Knativeサービスがイベントを消費するかどうかを確認します。
kubectl get pod
期待される出力:
NAME READY STATUS RESTARTS AGE event-display-00001-deployment-56cc79****-z2vhv 2/2 Running 0 7s
次のコマンドを実行して、イベントのKnative Serviceレコードを表示します。
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アップロードイベントを消費および記録することを示します。 これは、EventBridgeがKnativeサービスを正常にトリガーしてイベントを消費することを意味します。
関連ドキュメント
他のイベントソースを使用してイベント駆動機能を有効にする方法の詳細については、「KnativeでのGitHubイベントの使用」をご参照ください。