LoginSignup
2

More than 1 year has passed since last update.

posted at

Knative Eventingでイベント駆動なアプリケーションを体験する

Knativeとは

KnativeはKubernetes上でサーバーレスなアプリケーションを構築するためのプラットフォームです

Knativeの構築

サクッと試すなら、こちらの記事を参考にしてください

Knative Eventingについて

Knativeで単純にアプリケーションをデプロイ・実行するだけであればServingのみで実現できます
Eventingを使用することで、何らかのイベントをトリガーにアプリケーションを呼び出す、いわゆるイベント駆動でアプリケーションを実行することができるようになります

Eventingを構築する主なコンポーネントは以下です

  • Sources:イベントをBrokerに発行する(Pub/Subでいうパブリッシャー)
  • Brokers:イベントのハブとなるコンポーネント
  • Triggers:Brokerに入ってくるイベントのフィルタリング
  • Sinks:イベントを受信する(Pub/Subでいうサブスクライバー)

image.png
EventingはCloudEventsに準拠してます

KonKでKnativeを構築すると、お試しで使えるBrokerが入っているので、これを使って試していきます

$ kn broker list
NAME             URL                                                                               AGE   CONDITIONS   READY   REASON
example-broker   http://broker-ingress.knative-eventing.svc.cluster.local/default/example-broker   33m   5 OK / 5     True

Sourceの作成

ここを参考にイベントを送信するSourceを作ります

CloudEvents PlayerというサンプルアプリケーションにBrokerのURLを指定して作成

kn service create cloudevents-player \
--image ruromero/cloudevents-player:latest \
--env BROKER_URL=http://broker-ingress.knative-eventing.svc.cluster.local/default/example-broker

$ kn service list
NAME                 URL                                                  LATEST                     AGE   CONDITIONS   READY   REASON
cloudevents-player   http://cloudevents-player.default.127.0.0.1.nip.io   cloudevents-player-00001   45s   3 OK / 3     True

http://cloudevents-player.default.127.0.0.1.nip.ioにアクセスしてイベントを送信することができます
ただ、Brokerにイベントが流れているだけで特に何も起きません
image.png

Triggerの作成

Sinkに先程作成したCloudEvents Playerを指定してTriggerを作ります
KnativeのServiceがSource・Sinkの両方に指定できることがわかります

$ kn trigger create cloudevents-trigger --sink cloudevents-player  --broker example-broker

$ kn trigger list
NAME                  BROKER           SINK                      AGE   CONDITIONS   READY   REASON
cloudevents-trigger   example-broker   ksvc:cloudevents-player   3s    5 OK / 5     True

これでイベントを流すと先程と違い、イベントの受信を確認できます
image.png
イベントの流れ

  1. Source(cloudevents-player)
  2. Broker(example-broker)
  3. Trigger(cloudevents-trigger)
  4. Sink(cloudevents-player)

また、Triggerを作成する際にfilterを指定することで、特定のイベントのみ受信することもできます

$ kn trigger create cloudevents-player-filter --sink cloudevents-player  --broker example-broker --filter type=some-type

最後に

Eventingについてより詳細なドキュメントはこちら
https://knative.dev/docs/eventing/

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2