コンテンツへスキップ

Knative Serviceをソースとして使用する

このチュートリアルでは、CloudEvents Playerアプリを使用して、Knative Eventingのコアコンセプトを紹介します。このチュートリアルを終える頃には、次のようなアーキテクチャになっているはずです

The CloudEvents Player acts as both a source and a sink for CloudEvents

上記の画像は、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
  1. 次の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
    

  2. コマンドを実行して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'.
  1. 次の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
    

  2. コマンドを実行して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です。

The user interface for the CloudEvents Player

これらのフィールドはどういう意味ですか?
フィールド 説明
イベントID 一意のID。新しいIDを生成するには、ループアイコンをクリックします。
イベントタイプ イベントタイプ。
イベントソース イベントソース。
Specversion 使用しているCloudEvents仕様を区別します(常に1.0である必要があります)。
メッセージ CloudEventのdataセクションで、配信されるデータを運ぶペイロード。

CloudEvents仕様の詳細については、CloudEvents仕様を確認してください。

イベントの送信

CloudEvents Playerインターフェースを使用してイベントを送信してみます

  1. フォームに好きなデータを入力します。
  2. イベントソースにスペースが含まれていないことを確認してください。
  3. イベントの送信をクリックします。

CloudEvents Player Send

をクリックすると、ブローカーが認識しているCloudEventが表示されます。

Event Details

コマンドラインを使用してイベントを送信しますか?

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は単なるイベントの受け皿です。イベントをどこかに送信するには、イベントをリッスンしてどこかに配置するトリガーを作成する必要があります。幸運なことに、次のページで最初のトリガーを作成します!

サイトトラフィックを理解するために、分析とCookieを使用しています。当サイトの使用に関する情報は、その目的のためにGoogleと共有されます。詳細はこちら。