Knative Serviceをソースとして使用する¶
このチュートリアルでは、CloudEvents Playerアプリを使用して、Knative Eventingのコアコンセプトを紹介します。このチュートリアルを終える頃には、次のようなアーキテクチャになっているはずです
上記の画像は、Knative in Actionの図6.6です。
最初のソースを作成する¶
CloudEvents Playerは、環境変数BROKER_NAME
としてBrokerの名前を取り込むことで、CloudEventsのソースとして機能します。Brokerが異なる名前空間にある場合は、BROKER_NAMESPACE
環境変数も設定できます。または、BROKER_URI
を使用することもできます。
CloudEvents Playerアプリケーションを介してCloudEventsをBrokerに送信します。
CloudEvents Player Serviceを作成する
コマンドを実行します
kn service create cloudevents-player \
--image quay.io/ruben/cloudevents-player:latest
期待される出力
Service 'cloudevents-player' created to latest revision 'cloudevents-player-00001' is available at URL:
http://cloudevents-player.default.${LOADBALANCER_IP}.sslip.io
-
次のYAMLを
cloudevents-player.yaml
という名前のファイルにコピーしますapiVersion: serving.knative.dev/v1 kind: Service metadata: name: cloudevents-player spec: template: metadata: annotations: autoscaling.knative.dev/min-scale: "1" spec: containers: - image: quay.io/ruben/cloudevents-player:latest
-
コマンドを実行してYAMLファイルを適用します
kubectl apply -f cloudevents-player.yaml
期待される出力
service.serving.knative.dev/cloudevents-player created
サービスは実行中ですが、ブローカーの場所がわからないため、サービスとブローカーの間にSinkBindingを作成しましょう。
コマンドを実行します
kn source binding create ce-player-binding --subject "Service:serving.knative.dev/v1:cloudevents-player" --sink broker:example-broker
期待される出力
Sink binding 'ce-player-binding' created in namespace 'default'.
-
次のYAMLを
cloudevents-player-binding.yaml
という名前のファイルにコピーしますapiVersion: sources.knative.dev/v1 kind: SinkBinding metadata: name: ce-player-binding spec: sink: ref: apiVersion: eventing.knative.dev/v1 kind: Broker name: example-broker subject: apiVersion: serving.knative.dev/v1 kind: Service name: cloudevents-player
-
コマンドを実行してYAMLファイルを適用します
kubectl apply -f cloudevents-player-binding.yaml
期待される出力
sinkbinding.sources.knative.dev/ce-player-binding created
CloudEvents Playerの確認¶
CloudEvents Playerを使用して、CloudEventsを送信および受信できます。ブラウザでService URLを開くと、イベントの作成フォームが表示されます。
Service URLはhttp://cloudevents-player.default.${LOADBALANCER_IP}.sslip.io
です。たとえば、kind
の場合はhttp://cloudevents-player.default.127.0.0.1.sslip.ioです。
これらのフィールドはどういう意味ですか?
フィールド | 説明 |
---|---|
イベントID |
一意のID。新しいIDを生成するには、ループアイコンをクリックします。 |
イベントタイプ |
イベントタイプ。 |
イベントソース |
イベントソース。 |
Specversion |
使用しているCloudEvents仕様を区別します(常に1.0である必要があります)。 |
メッセージ |
CloudEventのdata セクションで、配信されるデータを運ぶペイロード。 |
CloudEvents仕様の詳細については、CloudEvents仕様を確認してください。
イベントの送信¶
CloudEvents Playerインターフェースを使用してイベントを送信してみます
- フォームに好きなデータを入力します。
- イベントソースにスペースが含まれていないことを確認してください。
- イベントの送信をクリックします。
をクリックすると、ブローカーが認識しているCloudEventが表示されます。
コマンドラインを使用してイベントを送信しますか?
Webフォームの代わりに、コマンドラインを使用してイベントを送信/表示することもできます。
イベントを投稿するには
curl -i http://cloudevents-player.default.${LOADBALANCER_IP}.sslip.io \
-H "Content-Type: application/json" \
-H "Ce-Id: 123456789" \
-H "Ce-Specversion: 1.0" \
-H "Ce-Type: some-type" \
-H "Ce-Source: command-line" \
-d '{"msg":"Hello CloudEvents!"}'
イベントを表示するには
curl http://cloudevents-player.default.${LOADBALANCER_IP}.sslip.io/messages
「ステータス」列のアイコンは、イベントがBrokerに送信されたことを示しています...しかし、イベントはどこに行ったのでしょうか?今のところ、どこにも行っていません!
Brokerは単なるイベントの受け皿です。イベントをどこかに送信するには、イベントをリッスンしてどこかに配置するトリガーを作成する必要があります。幸運なことに、次のページで最初のトリガーを作成します!