第10章 イベントワークフロー
10.1. ブローカーおよびトリガーを使用したイベント配信ワークフロー リンクのコピーリンクがクリップボードにコピーされました!
ブローカーは トリガー と組み合わせて、イベントを イベントソース からイベントシンクに配信できます。
イベントは、HTTP POST リクエストとしてイベントソースからブローカーに送信されます。
イベントがブローカーに送信された後に、それらはトリガーを使用して CloudEvent 属性 でフィルターされ、HTTP POST リクエストとしてイベントシンクに送信できます。
10.1.1. ブローカーの作成 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Serverless は、Knative CLI を使用して作成できる default の Knative ブローカーを提供します。また、クラスター管理者の場合は eventing.knative.dev/injection=enabled ラベルを namespace に追加するか、または開発者の場合は eventing.knative.dev/injection: enabled アノテーションをトリガーに追加して、default ブローカーを作成することもできます。
開発者およびクラスター管理者はどちらも挿入 (injection) によってブローカーを追加できますが、クラスター管理者のみがこの方法を使用して作成されたブローカーを永続的に削除できます。
10.1.1.1. Knative CLI を使用したブローカーの作成 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- OpenShift Serverless Operator および Knative Eventing が OpenShift Container Platform クラスターにインストールされている。
-
knCLI がインストールされている。
手順
defaultブローカーを作成します。$ kn broker create default
検証
knコマンドを使用して、既存のブローカーを一覧表示します。$ kn broker list出力例
NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 Trueオプション: OpenShift Container Platform Web コンソールを使用している場合、Developer パースペクティブの Topology ビューに移動し、ブローカーが存在することを確認できます。
10.1.1.2. トリガーのアノテーションによるブローカーの作成 リンクのコピーリンクがクリップボードにコピーされました!
eventing.knative.dev/injection: enabled アノテーションを Trigger オブジェクトに追加してブローカーを作成できます。
knative-eventing-injection: enabled アノテーションを使用してブローカーを作成する場合、クラスター管理者パーミッションなしにこのブローカーを削除することはできません。クラスター管理者が最初にこのアノテーションを削除せずにブローカーを削除する場合、ブローカーは削除後に再び作成されます。
前提条件
- OpenShift Serverless Operator および Knative Eventing が OpenShift Container Platform クラスターにインストールされている。
手順
Triggerオブジェクトを、eventing.knative.dev/injection: enabledアノテーションを持つ.yamlファイルとして作成します。apiVersion: eventing.knative.dev/v1 kind: Trigger metadata: annotations: eventing.knative.dev/injection: enabled name: <trigger-name> spec: broker: default subscriber:1 ref: apiVersion: serving.knative.dev/v1 kind: Service name: <service-name>- 1
- トリガーがイベントを送信するイベントシンクまたは サブスクライバー の詳細を指定します。
.yamlファイルを適用します。$ oc apply -f <filename>
検証
oc CLI を使用してブローカーが正常に作成されていることを確認するか、または Web コンソールの Topology ビューでこれを確認できます。
ocコマンドを使用してブローカーを取得します。$ oc -n <namespace> get broker default出力例
NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56sWeb コンソールで Topology ビューに移動し、ブローカーが存在することを確認します。
10.1.1.3. namespace へのラベル付けによるブローカーの作成 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者のパーミッションがある場合は、namespace にラベルを付けて default ブローカーを自動的に作成できます。
この方法を使用して作成されたブローカーは、ラベルを削除すると削除されません。これらは手動で削除する必要があります。
前提条件
- OpenShift Serverless Operator および Knative Eventing が OpenShift Container Platform クラスターにインストールされている。
- OpenShift Container Platform のクラスター管理者パーミッションがある。
手順
eventing.knative.dev/injection=enabledで namespace にラベルを付ける。$ oc label namespace <namespace> eventing.knative.dev/injection=enabled
検証
oc CLI を使用してブローカーが正常に作成されていることを確認するか、または Web コンソールの Topology ビューでこれを確認できます。
ocコマンドを使用してブローカーを取得します。$ oc -n <namespace> get broker <broker_name>コマンドの例
$ oc -n default get broker default出力例
NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56sWeb コンソールで Topology ビューに移動し、ブローカーが存在することを確認します。
10.1.2. ブローカーの管理 リンクのコピーリンクがクリップボードにコピーされました!
kn CLI は、ブローカーの一覧表示、説明、更新、および削除に使用できるコマンドを提供します。クラスター管理者は、挿入 (injection) を使用して作成されたブローカーを永続的に削除することもできます。
10.1.2.1. Knative CLI を使用した既存ブローカーの一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- OpenShift Serverless Operator、Knative Serving、および Knative Eventing が OpenShift Container Platform クラスターにインストールされている。
-
knCLI がインストールされている。
手順
既存ブローカーの一覧を表示します。
$ kn broker list出力例
NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 True
10.1.2.2. Knative CLI を使用した既存ブローカーの記述 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- OpenShift Serverless Operator、Knative Serving、および Knative Eventing が OpenShift Container Platform クラスターにインストールされている。
-
knCLI がインストールされている。
手順
既存ブローカーを記述します。
$ kn broker describe <broker_name>デフォルトブローカーを使用したコマンドの例
$ kn broker describe default出力例
Name: default Namespace: default Annotations: eventing.knative.dev/broker.class=MTChannelBasedBroker, eventing.knative.dev/creato ... Age: 22s Address: URL: http://broker-ingress.knative-eventing.svc.cluster.local/default/default Conditions: OK TYPE AGE REASON ++ Ready 22s ++ Addressable 22s ++ FilterReady 22s ++ IngressReady 22s ++ TriggerChannelReady 22s
10.1.2.3. 挿入 (injection) によって作成されたブローカーの削除 リンクのコピーリンクがクリップボードにコピーされました!
namespace ラベルまたはトリガーアノテーションを使用して、挿入 (injection) によって作成されたブローカーは、開発者がラベルまたはアノテーションを削除した場合に永続的に削除されません。クラスター管理者のパーミッションを持つユーザーは、これらのブローカーを手動で削除する必要があります。
手順
eventing.knative.dev/injection=enabledラベルを namespace から削除します。$ oc label namespace <namespace> eventing.knative.dev/injection-アノテーションを削除すると、Knative では削除後にブローカーを再作成できなくなります。
選択された namespace からブローカーを削除します。
$ oc -n <namespace> delete broker <broker_name>
検証
ocコマンドを使用してブローカーを取得します。$ oc -n <namespace> get broker <broker_name>コマンドの例
$ oc -n default get broker default出力例
No resources found. Error from server (NotFound): brokers.eventing.knative.dev "default" not found
10.1.3. トリガーを使用したイベントのフィルター リンクのコピーリンクがクリップボードにコピーされました!
トリガーを使用すると、イベントシンクに配信するためにブローカーからイベントをフィルターできます。
前提条件
トリガーを使用する前に、以下が必要になります。
-
Knative Eventing および
knがインストールされている。 defaultブローカーまたは作成したブローカーのいずれかの利用可能なブローカー。defaultブローカーは、Knative Eventing でのブローカーの使用 の説明に従うか、またはトリガーの作成時に--inject-brokerフラグを使用して作成できます。このフラグの使用については、本セクションで説明します。- Knative サービスなどの利用可能なイベントコンシューマー。
10.1.3.1. Developer パースペクティブを使用したトリガーの作成 リンクのコピーリンクがクリップボードにコピーされました!
ブローカーの作成後は、Web コンソールの Developer パースペクティブでトリガーを作成できます。
前提条件
- OpenShift Serverless Operator、Knative Serving、および Knative Eventing が OpenShift Container Platform クラスターにインストールされている。
- Web コンソールにログインしている。
- Developer パースペクティブを使用している。
- OpenShift Container Platform でアプリケーションおよび他のワークロードを作成するために、プロジェクトを作成しているか、適切なロールおよびパーミッションを持つプロジェクトにアクセスできる。
- トリガーに接続するために、ブローカーおよび Knative サービスまたは他のイベントシンクを作成している。
手順
- Developer パースペクティブで、Topology ページに移動します。
トリガーを作成するブローカーにカーソルを合わせ、矢印をドラッグします。Add Trigger オプションが表示されます。
- Add Trigger を クリックします。
- ドロップダウンリストから、シンクを Subscriber として選択します。
- Add をクリックします。
検証
サブスクリプションの作成後に、これを Topology ビューでブローカーをサービスに接続する行として表示できます。
10.1.3.2. Developer パースペクティブを使用したトリガーの削除 リンクのコピーリンクがクリップボードにコピーされました!
Web コンソールの Developer パースペクティブでトリガーを削除できます。
前提条件
- Developer パースペクティブを使用してトリガーを削除するには、Web コンソールにログインしている必要があります。
手順
- Developer パースペクティブで、Topology ページに移動します。
- 削除するトリガーをクリックします。
Actions コンテキストメニューで、Delete Trigger を選択します。
10.1.3.3. kn を使用したトリガーの作成 リンクのコピーリンクがクリップボードにコピーされました!
kn trigger create コマンドを使用してトリガーを作成できます。
手順
トリガーを作成します。
$ kn trigger create <trigger_name> --broker <broker_name> --filter <key=value> --sink <sink_name>または、トリガーを作成し、ブローカー挿入を使用して
defaultブローカーを同時に作成できます。$ kn trigger create <trigger_name> --inject-broker --filter <key=value> --sink <sink_name>デフォルトで、トリガーはブローカーに送信されたすべてのイベントを、そのブローカーにサブスクライブされるシンクに転送します。トリガーの
--filter属性を使用すると、ブローカーからイベントをフィルターできるため、サブスクライバーは定義された基準に基づくイベントのサブセットのみを受け取ることができます。
10.1.3.4. kn を使用したトリガーの一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
kn trigger list コマンドは利用可能なトリガーの一覧を出力します。
手順
利用可能なトリガーの一覧を出力するには、以下のコマンドを入力します。
$ kn trigger list出力例:
NAME BROKER SINK AGE CONDITIONS READY REASON email default ksvc:edisplay 4s 5 OK / 5 True ping default ksvc:edisplay 32s 5 OK / 5 Trueオプション: JSON 形式でトリガーの一覧を出力します。
$ kn trigger list -o json
10.1.3.4.1. kn を使用したトリガーの記述 リンクのコピーリンクがクリップボードにコピーされました!
kn trigger describe コマンドを使用して、トリガーについての情報を出力できます。
手順
トリガーについての情報を出力するには、以下のコマンドを入力します。
$ kn trigger describe <trigger_name>出力例
Name: ping Namespace: default Labels: eventing.knative.dev/broker=default Annotations: eventing.knative.dev/creator=kube:admin, eventing.knative.dev/lastModifier=kube:admin Age: 2m Broker: default Filter: type: dev.knative.event Sink: Name: edisplay Namespace: default Resource: Service (serving.knative.dev/v1) Conditions: OK TYPE AGE REASON ++ Ready 2m ++ BrokerReady 2m ++ DependencyReady 2m ++ Subscribed 2m ++ SubscriberResolved 2m
10.1.3.4.2. トリガーを使用したイベントのフィルター リンクのコピーリンクがクリップボードにコピーされました!
以下のトリガーの例では、type: dev.knative.samples.helloworld 属性のあるイベントのみがイベントコンシューマーに到達します。
$ kn trigger create <trigger_name> --broker <broker_name> --filter type=dev.knative.samples.helloworld --sink ksvc:<service_name>
複数の属性を使用してイベントをフィルターすることもできます。以下の例は、type、source、および extension 属性を使用してイベントをフィルターする方法を示しています。
$ kn trigger create <trigger_name> --broker <broker_name> --sink ksvc:<service_name> \
--filter type=dev.knative.samples.helloworld \
--filter source=dev.knative.samples/helloworldsource \
--filter myextension=my-extension-value
10.1.3.4.3. kn を使用したトリガーの更新 リンクのコピーリンクがクリップボードにコピーされました!
特定のフラグを指定して kn trigger update コマンドを使用して、トリガーの属性を迅速に更新できます。
手順
トリガーを更新します。
$ kn trigger update <trigger_name> --filter <key=value> --sink <sink_name> [flags]トリガーを、受信イベントに一致するイベント属性をフィルターするように更新できます。たとえば、
type属性を使用します。$ kn trigger update mytrigger --filter type=knative.dev.eventトリガーからフィルター属性を削除できます。たとえば、キー
typeを使用してフィルター属性を削除できます。$ kn trigger update mytrigger --filter type---sinkパラメーターを使用して、トリガーのイベントシンクを変更できます。$ kn trigger update <trigger_name> --sink ksvc:my-event-sink
10.1.3.4.4. kn を使用したトリガーの削除 リンクのコピーリンクがクリップボードにコピーされました!
手順
トリガーを削除します。
$ kn trigger delete <trigger_name>
検証
既存のトリガーを一覧表示します。
$ kn trigger listトリガーが存在しないことを確認します。
出力例
No triggers found.