コンテンツへスキップ

シーケンシャルターミナル

次の論理構成を作成します。PingSourceを作成し、イベントをSequenceに供給します。Sequenceは、外部作業を実行するか、帯域外で追加のイベントを作成できます。

Logical Configuration

これらの例で使用されている関数は、https://github.com/knative/eventing/blob/main/cmd/appender/main.goにあります。

前提条件

この例では、InMemoryChannelとKnative Serving(関数用)が設定されていると仮定します。例ではdefault名前空間を使用していますが、別の名前空間にデプロイする場合は、例を修正して反映する必要があります。

異なるタイプのChannelを使用する場合は、適切なChannelリソースを作成するようにSequence.Spec.ChannelTemplateを変更する必要があります。

設定

Knativeサービスの作成

まず、ステップで参照される3つのステップを作成します。

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: first
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
          env:
            - name: MESSAGE
              value: " - Handled by 0"

---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: second
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
          env:
            - name: MESSAGE
              value: " - Handled by 1"
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: third
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-releases/knative.dev/eventing/cmd/appender
          env:
            - name: MESSAGE
              value: " - Handled by 2"
---
kubectl -n default create -f ./steps.yaml

Sequenceの作成

sequence.yamlファイルには、Sequenceの作成に関する仕様が含まれています。異なるタイプのChannelを使用する場合は、目的のChannelを指すようにspec.channelTemplateを変更する必要があります。

apiVersion: flows.knative.dev/v1
kind: Sequence
metadata:
  name: sequence
spec:
  channelTemplate:
    apiVersion: messaging.knative.dev/v1
    kind: InMemoryChannel
  steps:
    - ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: first
    - ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: second
    - ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: third

次のコマンドでdefaultを変更して、リソースを作成する名前空間にSequenceを作成します。

kubectl -n default create -f ./sequence.yaml

SequenceをターゲットとするPingSourceの作成

これにより、データペイロードとして{"message": "Hello world!"}を含むCloudEventを2分ごとに送信するPingSourceが作成されます。

apiVersion: sources.knative.dev/v1
kind: PingSource
metadata:
  name: ping-source
spec:
  schedule: "*/2 * * * *"
  contentType: "application/json"
  data: '{"message": "Hello world!"}'
  sink:
    ref:
      apiVersion: flows.knative.dev/v1
      kind: Sequence
      name: sequence
kubectl -n default create -f ./ping-source.yaml

結果の検査

event-display podのログを検査することで、最終的な出力を確認できます。PingSourceを2分ごとに送信するように設定しているので、イベントがログに表示されるまでに時間がかかる場合があります。

kubectl -n default get pods

Sequenceの最初のStepのログを見てみましょう。

kubectl -n default logs -l serving.knative.dev/service=first -c user-container --tail=-1

2020/03/02 21:28:00 listening on 8080, appending " - Handled by 0" to events
2020/03/02 21:28:01 Received a new event:
2020/03/02 21:28:01 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world!}
2020/03/02 21:28:01 Transform the event to:
2020/03/02 21:28:01 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world! - Handled by 0}
そして、最初のPingSourceメッセージ("Hello World!")がSequenceの最初のステップによって「 - Handled by 0」を含むように変更されていることがわかります。素晴らしいですね :)

次に、Sequenceの2番目のステップの出力を確認します。

kubectl -n default logs -l serving.knative.dev/service=second -c user-container --tail=-1

2020/03/02 21:28:02 listening on 8080, appending " - Handled by 1" to events
2020/03/02 21:28:02 Received a new event:
2020/03/02 21:28:02 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world! - Handled by 0}
2020/03/02 21:28:02 Transform the event to:
2020/03/02 21:28:02 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world! - Handled by 0 - Handled by 1}
そして、予想通り、メッセージが「Hello world! - Handled by 0 - Handled by 1」になったように、最初のステップと2番目のステップの両方で処理されています。

次に、Sequenceの最後のステップの出力を確認します。

kubectl -n default logs -l serving.knative.dev/service=third -c user-container --tail=-1

2020/03/02 21:28:03 listening on 8080, appending " - Handled by 2" to events
2020/03/02 21:28:03 Received a new event:
2020/03/02 21:28:03 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world! - Handled by 0 - Handled by 1}
2020/03/02 21:28:03 Transform the event to:
2020/03/02 21:28:03 [2020-03-02T21:28:00.0010247Z] /apis/v1/namespaces/default/pingsources/ping-source dev.knative.sources.ping: &{Sequence:0 Message:Hello world! - Handled by 0 - Handled by 1 - Handled by 2}

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