すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:KnativeでEventBridgeのイベント駆動機能を使用する

最終更新日:Dec 16, 2024

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イベント」をご参照ください。

image

ステップ1: EventingおよびEventBridgeコンポーネントのデプロイ

KnativeはEventBridgeのイベントドリブン機能を提供し、Alibaba Cloudサービスのイベントソースとイベント転送をサポートします。

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[アプリケーション] > [ネイティブ] を選択します。

  3. [コンポーネント] タブで、EventingおよびEventBridgeコンポーネントを展開します。

    1. [コンポーネント] タブで、[検証] を見つけ、[操作] 列の [デプロイ] をクリックします。

    2. Eventingのデプロイ後、EventBridgeを見つけ、[操作] 列の [デプロイ] をクリックします。 表示されるダイアログボックスで、AccessKey IDとAccessKey secretを入力し、[OK] をクリックします。

      AccessKeyペアを取得する方法の詳細については、「AccessKeyペアの作成」をご参照ください。

      重要

      アカウントのセキュリティを確保するために、できるだけ早い機会に次の操作を実行することを推奨します。

      • 画面の指示に従って、アカウント管理者のパスワードを変更します。 デフォルトでは、最初のログイン時にRAMユーザーのパスワードを変更する必要があります。

      • セカンダリ認証の場合は、多要素認証 (MFA) デバイスをアカウント管理者にバインドすることを推奨します。 MFAは、ユーザー名とパスワードに加えて保護の層を追加するセキュリティ強化です。 詳細については、「MFAデバイスをRAMユーザーにバインドする」をご参照ください。

    コンポーネントの [ステータス] 列に [デプロイ済み] が表示されている場合、コンポーネントがデプロイされます。

ステップ2: Knativeサービスの作成

このセクションでは、イベント表示という名前のKnativeサービスを例として使用します。 サービスは、受信したすべてのイベントを自動的に記録します。 次のコンテンツでは、ACKコンソールとkubectlでKnativeサービスを作成する方法について説明します。

ACKコンソールの使用

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[アプリケーション] > [ネイティブ] を選択します。

  3. [サービス] タブをクリックし、[テンプレートから作成] をクリックして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を使う

  1. 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
  2. 次のコマンドを実行して、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コンソールの使用

  1. [Knative] ページで、[サービス] タブをクリックし、Knativeサービスの名前をクリックします。 表示されるページで、[トリガー] タブをクリックします。

  2. [トリガーの作成] をクリックします。 [設定] ページで、指示に基づいてパラメーターを設定します。 下表に、各パラメーターを説明します。

    パラメーター

    説明

    名前

    トリガーの名前を入力します。

    my-service-trigger

    ブローカー

    EventBridgeまたはその他を選択できます。

    EventBridge

    イベントソース

    複数のイベントソースがサポートされています。

    OSS

    イベントタイプ

    複数のイベントタイプがサポートされています。

    oss:ActionTrail:ConsoleOperation

    トリガーの作成後、[トリガー] タブでトリガーを表示できます。

    image

kubectlを使う

  1. 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
  2. 次のコマンドを実行して、トリガーが作成されているかどうかを確認します。

     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をインストールする必要があります。

  1. 次のコマンドを実行して、ファイルをOSSにアップロードします。

    説明

    OSSバケットとEventBridgeは同じリージョンにデプロイする必要があります。

    ossutil cp <File name> oss://<Bucket name>

    ファイルがアップロードされた後、EventBridgeはイベントを消費するためにKnativeサービスをトリガーします。

  2. イベントトレースを表示します。

    1. EventBridgeコンソールにログインします。 左側のナビゲーションウィンドウで、[イベントバス] をクリックします。

    2. [イベントバス] ページで、[デフォルト] イベントを選択し、[アクション] 列の [イベントトラッキング] をクリックします。 [時間範囲でクエリ] タブで、[時間範囲] パラメーターを設定します。 [クエリ] をクリックします。

    3. [イベントソース][OSS] に、[イベントタイプ][オブジェクトの配置] に設定し、対応するイベントの [操作] 列の [イベントトレース] をクリックします。

      image.png

      [イベントトレース] ページで、イベントが配信されたかどうかを確認できます。

  3. Knativeサービスがイベントを消費するかどうかを確認します。

    1. 次のコマンドを実行して、Knativeサービスがイベントを消費するかどうかを確認します。

      kubectl get  pod

      期待される出力:

      NAME                                              READY   STATUS    RESTARTS         AGE
      event-display-00001-deployment-56cc79****-z2vhv   2/2     Running   0                7s
    2. 次のコマンドを実行して、イベントの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イベントの使用」をご参照ください。