イベントレジストリ¶
Knative Eventingは、EventType
オブジェクトを定義することで、コンシューマーがブローカーまたはチャネルから消費できるイベントの種類をより簡単に検出できるようにします。
イベントレジストリは、各ブローカーまたはチャネルが消費できるイベントタイプのカタログを保持します。レジストリに保存されているイベントタイプには、他の帯域外メカニズムに頼ることなく、コンシューマーがトリガーを作成するために必要なすべての情報が含まれています。
このトピックでは、イベントレジストリに追加する方法、レジストリを使用してイベントを検出する方法、およびその情報を活用して関心のあるイベントを購読する方法について説明します。
注記
イベントレジストリを使用する前に、ブローカー、トリガー、イベントソース、およびCloudEvents仕様(特にコンテキスト属性セクション)の基本的な理解をしておくことをお勧めします。
EventTypeオブジェクトについて¶
EventTypeオブジェクトは、Apache KafkaメッセージやGitHubプルリクエストなど、ブローカーまたはチャネルから消費できるイベントの種類を表します。EventTypeオブジェクトは、イベントレジストリに追加され、クラスタデータストアにイベントタイプの情報を永続化するために使用されます。
無関係なフィールドを省略したEventTypeのYAML例を以下に示します。
apiVersion: eventing.knative.dev/v1beta2
kind: EventType
metadata:
name: dev.knative.source.github.push-34cnb
namespace: default
labels:
eventing.knative.dev/sourceName: github-sample
spec:
type: dev.knative.source.github.push
source: https://github.com/knative/eventing
schema:
description:
reference:
apiVersion: eventing.knative.dev/v1
kind: Broker
name: default
status:
conditions:
- status: "True"
type: ReferenceExists
- status: "True"
type: Ready
EventTypeオブジェクトの完全な仕様については、EventType APIリファレンスを参照してください。
metadata.name
フィールドは助言的であり、権威的ではありません。通常、名前の衝突を回避するためにgenerateName
を使用して生成されます。トリガーを作成する際には、metadata.name
は必要ありません。
コンシューマーにとって最も重要なフィールドはspec
とstatus
です。これは、これらのフィールドが、イベントのソースとタイプ、およびイベントを受信するための参照が存在するかどうかなどの、トリガーを作成するために必要な情報を提供するためです。
次の表に、EventTypeオブジェクトのspec
とstatus
フィールドに関する詳細情報を示します。
フィールド | 説明 | 必須またはオプション |
---|---|---|
spec.type |
CloudEventタイプがイベントメッシュに入る際の参照です。イベントコンシューマーはこの属性をフィルタリングしてトリガーを作成できます。このフィールドは権威的です。 | 必須 |
spec.source |
CloudEventソースがイベントメッシュに入る際の参照です。イベントコンシューマーはこの属性をフィルタリングしてトリガーを作成できます。 | 必須 |
spec.schema |
JSONスキーマやprotobufスキーマなどの、EventTypeスキーマを含む有効なURI。 | オプション |
spec.description |
EventTypeに関する説明文字列。 | オプション |
spec.reference |
EventTypeを提供できるKResourceを参照します。 | 必須 |
status |
コンシューマーまたはクラスタオペレーターに、EventTypeが消費できる状態であるかどうかを伝えます。準備状況は、KReferenceが存在するかどうかを基に判断されます。 | オプション |
レジストリへのイベントの追加¶
EventTypeオブジェクトは、手動または自動でレジストリに追加できます。自動登録の方が簡単ですが、サポートされるイベントソースは一部のみです。
手動登録¶
手動登録の場合、クラスタコンフィグレーターは、他のKubernetesリソースと同様に、EventType YAMLファイルを適用します。
EventType YAMLファイルを手動で適用するには
-
EventType YAMLファイルを作成します。必要なフィールドについては、「EventTypeオブジェクトについて」を参照してください。
-
次のコマンドを実行してYAMLを適用します。
kubectl apply -f <event-type.yaml>
自動登録¶
手動登録は面倒でエラーが発生しやすい可能性があるため、KnativeはEventTypeを自動的に登録することもサポートしています。イベントソースがインスタンス化されると、EventTypeが自動的に作成されます。
自動登録のサポート¶
Knativeは、次のイベントソースのEventTypeの自動登録をサポートしています。
- CronJobSource
- ApiServerSource
- GithubSource
- GcpPubSubSource
- KafkaSource
- AwsSqsSource
Knativeは、Sources Duckタイプに準拠したソースのEventTypeの自動作成をサポートしています。
自動登録の手順¶
-
EventTypeを自動的に登録するには、次のコマンドを実行してイベントソースのYAMLファイルを適用します。
kubectl apply -f <event-source.yaml>
イベントソースがインスタンス化されると、EventTypeがレジストリに追加されます。
例:KafkaSourceを使用した自動登録¶
レジストリに追加するためのKafkaSourceサンプルを以下に示します。
apiVersion: sources.knative.dev/v1beta1
kind: KafkaSource
metadata:
name: kafka-sample
namespace: default
spec:
bootstrapServers:
- my-cluster-kafka-bootstrap.kafka:9092
topics:
- knative-demo
- news
sink:
apiVersion: eventing.knative.dev/v1
kind: Broker
name: default
上記の例では、topics
フィールドを使用してEventTypeのsource
フィールドが生成されます。
上記のYAMLを使用してkubectl apply
を実行すると、KafkaSource kafka-source-sample
がインスタンス化され、トピックが2つあるため、2つのEventTypeがレジストリに追加されます。
レジストリを使用したイベントの検出¶
レジストリを使用して、ブローカーイベントメッシュが消費できるさまざまな種類のイベントを検出できます。
注記
EventType自動作成機能を使用すると、レジストリでより多くのイベントタイプを確認できます。この機能の有効化方法はこちらを参照してください。
購読可能なすべてのイベントタイプの表示¶
-
レジストリにある購読可能なイベントタイプのリストを表示するには、次のコマンドを実行します。
kubectl get eventtypes -n <namespace>
テストクラスタの
default
名前空間を使用した出力例NAME TYPE SOURCE SCHEMA BROKER DESCRIPTION READY REASON dev.knative.source.github.push-34cnb dev.knative.source.github.push https://github.com/knative/eventing default True dev.knative.source.github.push-44svn dev.knative.source.github.push https://github.com/knative/serving default True dev.knative.source.github.pullrequest-86jhv dev.knative.source.github.pull_request https://github.com/knative/eventing default True dev.knative.source.github.pullrequest-97shf dev.knative.source.github.pull_request https://github.com/knative/serving default True dev.knative.kafka.event-cjvcr dev.knative.kafka.event /apis/v1/namespaces/default/kafkasources/kafka-sample#news default True dev.knative.kafka.event-tdt48 dev.knative.kafka.event /apis/v1/namespaces/default/kafkasources/kafka-sample#knative-demo default True google.pubsub.topic.publish-hrxhh google.pubsub.topic.publish //pubsub.googleapis.com/knative/topics/testing dev False BrokerIsNotReady
この出力例は、
default
名前空間のレジストリに7つの異なるEventTypeオブジェクトがあることを示しています。これは、イベントを生成するイベントソースがシンクとしてブローカーを参照していることを前提としています。
EventTypeオブジェクトのYAMLの表示¶
-
EventTypeオブジェクトのYAMLを表示するには、次のコマンドを実行します。
ここで、kubectl get eventtype <name> -o yaml
<name>
はEventTypeオブジェクトの名前であり、レジストリの出力のNAME
列で見つけることができます。例:dev.knative.source.github.push-34cnb
。
EventType YAMLの例については、このページ上部の「EventTypeオブジェクトについて」を参照してください。
イベントの購読について¶
ブローカーのイベントメッシュから消費できるイベントがわかったら、トリガーを作成して特定のイベントを購読できます。
以下は、前に述べたレジストリの出力に基づいて、type
またはsource
の完全一致を使用してイベントを購読するトリガーの例です。
-
任意のソースからのGitHub *プッシュ*を購読します。
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: push-trigger namespace: default spec: broker: default filter: attributes: type: dev.knative.source.github.push subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: push-service
注記
レジストリの出力例で述べたように、その特定の種類のイベントについては、
knative/eventing
とknative/serving
のGitHubリポジトリの2つのソースのみが存在します。後でGitHubプッシュの新しいソースが登録された場合、このトリガーはそれらを消費できます。 -
knative/eventing
GitHubリポジトリからのGitHub *プルリクエスト*を購読します。apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: gh-knative-eventing-pull-trigger namespace: default spec: broker: default filter: attributes: type: dev.knative.source.github.pull_request source: https://github.com/knative/eventing subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: gh-knative-eventing-pull-service
-
*knative-demo*トピックに送信されたKafkaメッセージを購読します。
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: kafka-knative-demo-trigger namespace: default spec: broker: default filter: attributes: type: dev.knative.kafka.event source: /apis/v1/namespaces/default/kafkasources/kafka-sample#knative-demo subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: kafka-knative-demo-service
-
GCPのknativeプロジェクトからtestingトピックに送信されたPubSubメッセージを購読します。
apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: name: gcp-pubsub-knative-testing-trigger namespace: default spec: broker: dev filter: attributes: source: //pubsub.googleapis.com/knative/topics/testing subscriber: ref: apiVersion: serving.knative.dev/v1 kind: Service name: gcp-pubsub-knative-testing-service
注記
前述のレジストリの出力例では、このBrokerの準備状況が
false
と表示されています。このTriggerのサブスクライバは、Brokerの準備が完了するまでイベントを消費できません。
次のステップ¶
Knativeコードサンプルは、いくつかのイベントソースをより深く理解するための有用なリソースです。レジストリへのEventTypeの自動登録を希望する場合は、ソースをBrokerに接続する必要があることを忘れないでください。