Serverless Logic
OpenShift Serverless Logic の概要
概要
第1章 スタートガイド
1.1. Knative Workflow プラグインを使用したワークフローの作成および実行
OpenShift Serverless Logic ワークフローを作成し、実行できます。
1.1.1. ワークフローの作成
kn workflow
で create
コマンドを使用して、現在のディレクトリーに新しい OpenShift Serverless Logic プロジェクトを設定できます。
前提条件
-
OpenShift Serverless Logic
kn-workflow
CLI プラグインがインストールされている。
手順
次のコマンドを実行して、新しい OpenShift Serverless Logic ワークフロープロジェクトを作成します。
kn workflow create
$ kn workflow create
Copy to Clipboard Copied! デフォルトでは、生成されるプロジェクト名は
new-project
です。次のように[-n|--name]
フラグを使用してプロジェクト名を変更できます。コマンドの例
kn workflow create --name my-project
$ kn workflow create --name my-project
Copy to Clipboard Copied!
1.1.2. ワークフローのローカルでの実行
kn workflow
で run
コマンドを使用して、現在のディレクトリーに OpenShift Serverless Logic ワークフロープロジェクトをビルドして実行できます。
前提条件
- ローカルマシンに Podman がインストールされている。
-
OpenShift Serverless Logic
kn-workflow
CLI プラグインがインストールされている。 - OpenShift Serverless Logic ワークフロープロジェクトを作成している。
手順
次のコマンドを実行して、OpenShift Serverless Logic ワークフロープロジェクトをビルドして実行します。
kn workflow run
$ kn workflow run
Copy to Clipboard Copied! プロジェクトの準備が整うと、開発 UI がブラウザーの
localhost:8080/q/dev-ui
で自動的に開き、Serverless Workflow Tools タイルが利用可能になります。または、http://localhost:8080/q/dev-ui/org.apache.kie.sonataflow.sonataflow-quarkus-devui/workflows
を使用してツールに直接アクセスすることもできます。
マシン上で実行されるコンテナーを使用して、ワークフローをローカルで実行できます。Ctrl+C でコンテナーを停止します。
1.2. ワークフローのデプロイ
Serverless Logic ワークフローは、開発モードとプレビューモードの 2 つのモードでクラスターにデプロイできます。
1.2.1. 開発モードでのワークフローのデプロイ
ローカルワークフローを OpenShift Container Platform に開発モードでデプロイできます。このデプロイメントを使用すると、クラスター上で直接ワークフローを実験および変更することができ、変更をほぼ即座に確認できます。開発モードは開発とテストの目的で設計されています。初期の開発段階や新しい変更のテストに最適です。
前提条件
- OpenShift Serverless Logic Operator がクラスターにインストールされている。
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
-
OpenShift CLI
(oc)
がインストールされている。
手順
ワークフロー設定 YAML ファイルを作成します。
workflow-dev.yaml
ファイルの例apiVersion: sonataflow.org/v1alpha08 kind: SonataFlow metadata: name: greeting annotations: sonataflow.org/description: Greeting example on k8s! sonataflow.org/version: 0.0.1 sonataflow.org/profile: dev spec: flow: start: ChooseOnLanguage functions: - name: greetFunction type: custom operation: sysout states: - name: ChooseOnLanguage type: switch dataConditions: - condition: "${ .language == \"English\" }" transition: GreetInEnglish - condition: "${ .language == \"Spanish\" }" transition: GreetInSpanish defaultCondition: GreetInEnglish - name: GreetInEnglish type: inject data: greeting: "Hello from JSON Workflow, " transition: GreetPerson - name: GreetInSpanish type: inject data: greeting: "Saludos desde JSON Workflow, " transition: GreetPerson - name: GreetPerson type: operation actions: - name: greetAction functionRef: refName: greetFunction arguments: message: ".greeting + .name" end: true
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlow metadata: name: greeting
1 annotations: sonataflow.org/description: Greeting example on k8s! sonataflow.org/version: 0.0.1 sonataflow.org/profile: dev
2 spec: flow: start: ChooseOnLanguage functions: - name: greetFunction type: custom operation: sysout states: - name: ChooseOnLanguage type: switch dataConditions: - condition: "${ .language == \"English\" }" transition: GreetInEnglish - condition: "${ .language == \"Spanish\" }" transition: GreetInSpanish defaultCondition: GreetInEnglish - name: GreetInEnglish type: inject data: greeting: "Hello from JSON Workflow, " transition: GreetPerson - name: GreetInSpanish type: inject data: greeting: "Saludos desde JSON Workflow, " transition: GreetPerson - name: GreetPerson type: operation actions: - name: greetAction functionRef: refName: greetFunction arguments: message: ".greeting + .name" end: true
Copy to Clipboard Copied! アプリケーションをデプロイするには、次のコマンドを入力して YAML ファイルを適用します。
oc apply -f <filename> -n <your_namespace>
$ oc apply -f <filename> -n <your_namespace>
Copy to Clipboard Copied! 次のコマンドを入力して、デプロイメントを確認し、デプロイされたワークフローのステータスを確認します。
oc get workflow -n <your_namespace> -w
$ oc get workflow -n <your_namespace> -w
Copy to Clipboard Copied! ワークフローがリストされており、ステータスが
Running
またはCompleted
であることを確認します。次のコマンドを入力して、クラスター内でワークフローを直接編集します。
oc edit sonataflow <workflow_name> -n <your_namespace>
$ oc edit sonataflow <workflow_name> -n <your_namespace>
Copy to Clipboard Copied! - 編集後、変更を保存します。OpenShift Serverless Logic Operator は変更を検出し、それに応じてワークフローを更新します。
検証
変更が正しく適用されていることを確認するには、次のコマンドを入力してワークフローのステータスとログを確認します。
次のコマンドを実行して、ワークフローのステータスを表示します。
oc get sonataflows -n <your_namespace>
$ oc get sonataflows -n <your_namespace>
Copy to Clipboard Copied! 次のコマンドを実行してワークフローログを表示します。
oc logs <workflow_pod_name> -n <your_namespace>
$ oc logs <workflow_pod_name> -n <your_namespace>
Copy to Clipboard Copied!
次のステップ
テストが完了したら、次のコマンドを実行してリソースを削除し、必要のないリソースの使用を回避します。
oc delete sonataflow <workflow_name> -n <your_namespace>
$ oc delete sonataflow <workflow_name> -n <your_namespace>
Copy to Clipboard Copied!
1.2.2. プレビューモードでのワークフローのデプロイ
プレビューモードで、ローカルワークフローを OpenShift Container Platform にデプロイできます。これにより、クラスター上で直接ワークフローを試したり変更したりすることができ、変更をほぼ即座に確認できます。プレビューモードは、実稼働環境にデプロイする前の最終テストと検証に使用されます。また、実稼働環境と同様の環境でワークフローがスムーズに実行されるようにします。
前提条件
- クラスターに OpenShift Serverless Logic Operator がインストールされている。
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
-
OpenShift CLI
(oc)
がインストールされている。
プレビューモードでワークフローをデプロイするために、OpenShift Serverless Logic Operator は OpenShift Container Platform 上のビルドシステムを使用し、ワークフローをデプロイするためのイメージを自動的に作成します。
次のセクションでは、OpenShift Serverless Logic Operator と SonataFlow
カスタムリソースを使用して、クラスター上にワークフローを構築およびデプロイする方法を説明します。
1.2.2.1. プレビューモードでのワークフローの設定
1.2.2.1.1. ワークフローベースビルダーイメージの設定
シナリオで、セキュリティーや強化制約など、イメージの使用に関する厳格なポリシーが必要な場合は、OpenShift Serverless Logic Operator が最終的なワークフローコンテナーイメージを構築するために使用するデフォルトのイメージを置き換えます。
デフォルトでは、OpenShift Serverless Logic Operator は、公式の Red Hat レジストリーで配布されたイメージを使用してワークフローを構築します。シナリオで、セキュリティーや強化の制約など、イメージの使用に厳格なポリシーが必要な場合は、デフォルトのイメージを置き換えることができます。
このイメージを変更するには、ワークフローをデプロイした namespace 内の SonataFlowPlatform
カスタムリソース (CR) を編集します。
前提条件
- クラスターに OpenShift Serverless Logic Operator がインストールされている。
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
-
OpenShift CLI
(oc)
がインストールされている。
手順
次のコマンドを実行して、namespace 内の
SonataFlowPlatform
リソースをリスト表示します。oc get sonataflowplatform -n <your_namespace>
$ oc get sonataflowplatform -n <your_namespace>
1 Copy to Clipboard Copied! - 1
<your_namespace>
を namespace の名前に置き換えます。
次のコマンドを実行して、
SonataFlowPlatform
リソースに新しいビルダーイメージを適用します。oc patch sonataflowplatform <name> --patch 'spec:\n build:\n config:\n baseImage: <your_new_image_full_name_with_tag>' -n <your_namespace>
$ oc patch sonataflowplatform <name> --patch 'spec:\n build:\n config:\n baseImage: <your_new_image_full_name_with_tag>' -n <your_namespace>
Copy to Clipboard Copied!
検証
次のコマンドを実行して、
SonataFlowPlatform
CR が正しく修正されていることを確認します。oc describe sonataflowplatform <name> -n <your_namespace>
$ oc describe sonataflowplatform <name> -n <your_namespace>
1 Copy to Clipboard Copied! - 1
<name>
はSonataFlowPlatform
リソースの名前に、<your_namespace>
を namespace の名前に置き換えます。
spec.build.config
の下のbaseImage
フィールドに新しいイメージが反映されていることを確認します。
1.2.2.1.2. ベースビルダー Dockerfile のカスタマイズ
OpenShift Serverless Logic Operator は openshift-serverless-logic
OpenShift Serverless Logic Operator インストール namespace の logic-operator-rhel8-builder-config
config map カスタムリソース (CR) を使用して、ワークフロービルドプロセスを設定および実行します。この config map 内の Dockerfile エントリーを変更して、Dockerfile を要件に合わせて調整できます。
Dockerfile を変更すると、ビルドプロセスが中断される可能性があります。
この例は参考用です。実際のバージョンは若干異なる可能性があります。この例をインストールに使用しないでください。
例: logic-Operator-rhel8-builder-config
config map CR
apiVersion: v1 data: DEFAULT_WORKFLOW_EXTENSION: .sw.json Dockerfile: | FROM registry.redhat.io/openshift-serverless-1/logic-swf-builder-rhel8:1.33.0 AS builder # Variables that can be overridden by the builder # To add a Quarkus extension to your application ARG QUARKUS_EXTENSIONS # Args to pass to the Quarkus CLI add extension command ARG QUARKUS_ADD_EXTENSION_ARGS # Additional java/mvn arguments to pass to the builder ARG MAVEN_ARGS_APPEND # Copy from build context to skeleton resources project COPY --chown=1001 . ./resources RUN /home/kogito/launch/build-app.sh ./resources #============================= # Runtime Run #============================= FROM registry.access.redhat.com/ubi9/openjdk-17:latest ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' # We make four distinct layers so if there are application changes, the library layers can be re-used COPY --from=builder --chown=185 /home/kogito/serverless-workflow-project/target/quarkus-app/lib/ /deployments/lib/ COPY --from=builder --chown=185 /home/kogito/serverless-workflow-project/target/quarkus-app/*.jar /deployments/ COPY --from=builder --chown=185 /home/kogito/serverless-workflow-project/target/quarkus-app/app/ /deployments/app/ COPY --from=builder --chown=185 /home/kogito/serverless-workflow-project/target/quarkus-app/quarkus/ /deployments/quarkus/ EXPOSE 8080 USER 185 ENV AB_JOLOKIA_OFF="" ENV JAVA_OPTS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" ENV JAVA_APP_JAR="/deployments/quarkus-run.jar" kind: ConfigMap metadata: name: sonataflow-operator-builder-config namespace: sonataflow-operator-system
apiVersion: v1
data:
DEFAULT_WORKFLOW_EXTENSION: .sw.json
Dockerfile: |
FROM registry.redhat.io/openshift-serverless-1/logic-swf-builder-rhel8:1.33.0 AS builder
# Variables that can be overridden by the builder
# To add a Quarkus extension to your application
ARG QUARKUS_EXTENSIONS
# Args to pass to the Quarkus CLI add extension command
ARG QUARKUS_ADD_EXTENSION_ARGS
# Additional java/mvn arguments to pass to the builder
ARG MAVEN_ARGS_APPEND
# Copy from build context to skeleton resources project
COPY --chown=1001 . ./resources
RUN /home/kogito/launch/build-app.sh ./resources
#=============================
# Runtime Run
#=============================
FROM registry.access.redhat.com/ubi9/openjdk-17:latest
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'
# We make four distinct layers so if there are application changes, the library layers can be re-used
COPY --from=builder --chown=185 /home/kogito/serverless-workflow-project/target/quarkus-app/lib/ /deployments/lib/
COPY --from=builder --chown=185 /home/kogito/serverless-workflow-project/target/quarkus-app/*.jar /deployments/
COPY --from=builder --chown=185 /home/kogito/serverless-workflow-project/target/quarkus-app/app/ /deployments/app/
COPY --from=builder --chown=185 /home/kogito/serverless-workflow-project/target/quarkus-app/quarkus/ /deployments/quarkus/
EXPOSE 8080
USER 185
ENV AB_JOLOKIA_OFF=""
ENV JAVA_OPTS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
kind: ConfigMap
metadata:
name: sonataflow-operator-builder-config
namespace: sonataflow-operator-system
1.2.2.1.3. リソース要件の変更
ワークフロー namespace で SonataFlowPlatform
リソースを作成または編集することにより、内部ビルダー Pod のリソース要件を指定できます。
SonataFlowPlatform
リソースの例
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform spec: build: template: resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m"
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
name: sonataflow-platform
spec:
build:
template:
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
namespace ごとに 1 つの SonataFlowPlatform
リソースのみが許可されます。別のリソースを作成する代わりに、OpenShift Serverless Logic Operator によって作成されたリソースを取得して編集します。
特定のワークフローのリソース要件を微調整できます。各ワークフローインスタンスには、ワークフローと同じ名前で作成された SonataFlowBuild
インスタンスがあります。SonataFlowBuild
カスタムリソース (CR) を編集し、次のようにパラメーターを指定できます。
SonataFlowBuild
CR の例
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowBuild metadata: name: my-workflow spec: resources: requests: memory: "64Mi" cpu: "250m" limits: memory: "128Mi" cpu: "500m"
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowBuild
metadata:
name: my-workflow
spec:
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
これらのパラメーターは、新しいビルドインスタンスにのみ適用されます。
1.2.2.1.4. 内部ビルダーに引数を渡す
ビルド引数を SonataFlowBuild
インスタンスに渡すか、SonataFlowPlatform
リソースでデフォルトのビルド引数を設定することで、ビルドプロセスをカスタマイズできます。
前提条件
- クラスターに OpenShift Serverless Logic Operator がインストールされている。
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
-
OpenShift CLI
(oc)
がインストールされている。
手順
次のコマンドを実行して、既存の
SonataFlowBuild
インスタンスを確認します。oc get sonataflowbuild <name> -n <namespace>
$ oc get sonataflowbuild <name> -n <namespace>
1 Copy to Clipboard Copied! - 1
<name>
はSonataFlowBuild
インスタンスの名前に、<namespace>
を namespace に置き換えます。
次のコマンドを実行して、
SonataFlowBuild
インスタンスにビルド引数を追加します。oc edit sonataflowbuild <name> -n <namespace>
$ oc edit sonataflowbuild <name> -n <namespace>
Copy to Clipboard Copied! SonataFlowBuild
インスタンスの.spec.buildArgs
フィールドの下に、必要なビルド引数を追加します。apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowBuild metadata: name: <name> spec: buildArgs: - name: <argument_1> value: <value_1> - name: <argument_2> value: <value_2>
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowBuild metadata: name: <name>
1 spec: buildArgs: - name: <argument_1> value: <value_1> - name: <argument_2> value: <value_2>
Copy to Clipboard Copied! - 1
- 既存の
SonataFlowBuild
インスタンスの名前。
ファイルを保存して終了します。
更新された設定で新しいビルドが開始されます。
次のコマンドを実行して、
SonataFlowPlatform
リソースにデフォルトのビルド引数を設定します。oc edit sonataflowplatform <name> -n <namespace>
$ oc edit sonataflowplatform <name> -n <namespace>
Copy to Clipboard Copied! SonataFlowPlatform
リソースの.spec.buildArgs
フィールドに、必要なビルド引数を追加します。apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: <name> spec: build: template: buildArgs: - name: <argument_1> value: <value_1> - name: <argument_2> value: <value_2>
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: <name>
1 spec: build: template: buildArgs: - name: <argument_1> value: <value_1> - name: <argument_2> value: <value_2>
Copy to Clipboard Copied! - 1
- 既存の
SonataFlowPlatform
リソースの名前。
- ファイルを保存して終了します。
1.2.2.1.5. 内部ビルダーでの環境変数の設定
SonataFlowBuild
内部ビルダー Pod に環境変数を設定できます。これらの変数はビルドコンテキストに対してのみ有効であり、最終的にビルドされたワークフローイメージには設定されません。
前提条件
- クラスターに OpenShift Serverless Logic Operator がインストールされている。
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
-
OpenShift CLI
(oc)
がインストールされている。
手順
次のコマンドを実行して、既存の
SonataFlowBuild
インスタンスを確認します。oc get sonataflowbuild <name> -n <namespace>
$ oc get sonataflowbuild <name> -n <namespace>
Copy to Clipboard Copied! <name>
はSonataFlowBuild
インスタンスの名前に、<namespace>
を namespace に置き換えます。次のコマンドを実行して、
SonataFlowBuild
インスタンスを編集します。oc edit sonataflowbuild <name> -n <namespace>
$ oc edit sonataflowbuild <name> -n <namespace>
Copy to Clipboard Copied! SonataFlowBuild
インスタンスの例apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowBuild metadata: name: <name> spec: envs: - name: <env_variable_1> value: <value_1> - name: <env_variable_2> value: <value_2>
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowBuild metadata: name: <name> spec: envs: - name: <env_variable_1> value: <value_1> - name: <env_variable_2> value: <value_2>
Copy to Clipboard Copied! ファイルを保存して終了します。
更新された設定で新しいインスタンスが起動します。
あるいは、
SonataFlowPlatform
で環境を設定して、すべての新しいビルドインスタンスがその設定をテンプレートとして使用するようにすることもできます。SonataFlowPlatform
インスタンスの例apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: <name> spec: build: template: envs: - name: <env_variable_1> value: <value_1> - name: <env_variable_2> value: <value_2>
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: <name> spec: build: template: envs: - name: <env_variable_1> value: <value_1> - name: <env_variable_2> value: <value_2>
Copy to Clipboard Copied!
1.2.2.1.6. ベースビルダーイメージの変更
logic-Operator-rhel8-builder-config
config map を編集することで、OpenShift Serverless Logic Operator によって使用されるデフォルトのビルダーイメージを変更できます。
前提条件
- クラスターに OpenShift Serverless Logic Operator がインストールされている。
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
-
OpenShift CLI
(oc)
がインストールされている。
手順
次のコマンドを実行して、
logic-Operator-rhel8-builder-config
config map を編集します。oc edit cm/logic-operator-rhel8-builder-config -n openshift-serverless-logic
$ oc edit cm/logic-operator-rhel8-builder-config -n openshift-serverless-logic
Copy to Clipboard Copied! dockerfile エントリーを変更します。
エディターで、Dockerfile エントリーを見つけて、最初の行を目的のイメージに変更します。
例
data: Dockerfile: | FROM registry.redhat.io/openshift-serverless-1/logic-swf-builder-rhel8:1.33.0 # Change the image to the desired one
data: Dockerfile: | FROM registry.redhat.io/openshift-serverless-1/logic-swf-builder-rhel8:1.33.0 # Change the image to the desired one
Copy to Clipboard Copied! - 変更を保存します。
1.2.2.2. ワークフローの構築とデプロイ
OpenShift Container Platform で SonataFlow
カスタムリソース (CR) を作成し、OpenShift Serverless Logic Operator がワークフローをビルドしてデプロイすることができます。
前提条件
- クラスターに OpenShift Serverless Logic Operator がインストールされている。
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
-
OpenShift CLI
(oc)
がインストールされている。
手順
次のようなワークフロー YAML ファイルを作成します。
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlow metadata: name: greeting annotations: sonataflow.org/description: Greeting example on k8s! sonataflow.org/version: 0.0.1 spec: flow: start: ChooseOnLanguage functions: - name: greetFunction type: custom operation: sysout states: - name: ChooseOnLanguage type: switch dataConditions: - condition: "${ .language == \"English\" }" transition: GreetInEnglish - condition: "${ .language == \"Spanish\" }" transition: GreetInSpanish defaultCondition: GreetInEnglish - name: GreetInEnglish type: inject data: greeting: "Hello from JSON Workflow, " transition: GreetPerson - name: GreetInSpanish type: inject data: greeting: "Saludos desde JSON Workflow, " transition: GreetPerson - name: GreetPerson type: operation actions: - name: greetAction functionRef: refName: greetFunction arguments: message: ".greeting+.name" end: true
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlow metadata: name: greeting annotations: sonataflow.org/description: Greeting example on k8s! sonataflow.org/version: 0.0.1 spec: flow: start: ChooseOnLanguage functions: - name: greetFunction type: custom operation: sysout states: - name: ChooseOnLanguage type: switch dataConditions: - condition: "${ .language == \"English\" }" transition: GreetInEnglish - condition: "${ .language == \"Spanish\" }" transition: GreetInSpanish defaultCondition: GreetInEnglish - name: GreetInEnglish type: inject data: greeting: "Hello from JSON Workflow, " transition: GreetPerson - name: GreetInSpanish type: inject data: greeting: "Saludos desde JSON Workflow, " transition: GreetPerson - name: GreetPerson type: operation actions: - name: greetAction functionRef: refName: greetFunction arguments: message: ".greeting+.name" end: true
Copy to Clipboard Copied! 次のコマンドを実行して、
SonataFlow
ワークフロー定義を OpenShift Container Platform namespace に適用します。oc apply -f <workflow-name>.yaml -n <your_namespace>
$ oc apply -f <workflow-name>.yaml -n <your_namespace>
Copy to Clipboard Copied! greetings-workflow.yaml
ファイルのコマンドの例:oc apply -f greetings-workflow.yaml -n workflows
$ oc apply -f greetings-workflow.yaml -n workflows
Copy to Clipboard Copied! 次のコマンドを実行して、すべてのビルド設定をリスト表示します。
oc get buildconfigs -n workflows
$ oc get buildconfigs -n workflows
Copy to Clipboard Copied! 次のコマンドを実行して、ビルドプロセスのログを取得します。
oc logs buildconfig/<workflow-name> -n <your_namespace>
$ oc logs buildconfig/<workflow-name> -n <your_namespace>
Copy to Clipboard Copied! greetings-workflow.yaml
ファイルのコマンドの例:oc logs buildconfig/greeting -n workflows
$ oc logs buildconfig/greeting -n workflows
Copy to Clipboard Copied!
検証
デプロイメントを確認するには、次のコマンドを実行してすべての Pod をリスト表示します。
oc get pods -n <your_namespace>
$ oc get pods -n <your_namespace>
Copy to Clipboard Copied! ワークフローに対応する Pod が実行されていることを確認します。
次のコマンドを実行して、実行中の Pod とそのログを確認します。
oc logs pod/<pod-name> -n workflows
$ oc logs pod/<pod-name> -n workflows
Copy to Clipboard Copied!
1.2.2.3. ワークフローのデプロイメントの検証
ワークフロー Pod からテスト HTTP 呼び出しを実行して、OpenShift Serverless Logic ワークフローが実行されていることを確認できます。
前提条件
- クラスターに OpenShift Serverless Logic Operator がインストールされている。
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
-
OpenShift CLI
(oc)
がインストールされている。
手順
次のようなワークフロー
YAML
ファイルを作成します。apiVersion: sonataflow.org/v1alpha08 kind: SonataFlow metadata: name: greeting annotations: sonataflow.org/description: Greeting example on k8s! sonataflow.org/version: 0.0.1 spec: flow: start: ChooseOnLanguage functions: - name: greetFunction type: custom operation: sysout states: - name: ChooseOnLanguage type: switch dataConditions: - condition: "${ .language == \"English\" }" transition: GreetInEnglish - condition: "${ .language == \"Spanish\" }" transition: GreetInSpanish defaultCondition: GreetInEnglish - name: GreetInEnglish type: inject data: greeting: "Hello from JSON Workflow, " transition: GreetPerson - name: GreetInSpanish type: inject data: greeting: "Saludos desde JSON Workflow, " transition: GreetPerson - name: GreetPerson type: operation actions: - name: greetAction functionRef: refName: greetFunction arguments: message: ".greeting+.name" end: true
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlow metadata: name: greeting annotations: sonataflow.org/description: Greeting example on k8s! sonataflow.org/version: 0.0.1 spec: flow: start: ChooseOnLanguage functions: - name: greetFunction type: custom operation: sysout states: - name: ChooseOnLanguage type: switch dataConditions: - condition: "${ .language == \"English\" }" transition: GreetInEnglish - condition: "${ .language == \"Spanish\" }" transition: GreetInSpanish defaultCondition: GreetInEnglish - name: GreetInEnglish type: inject data: greeting: "Hello from JSON Workflow, " transition: GreetPerson - name: GreetInSpanish type: inject data: greeting: "Saludos desde JSON Workflow, " transition: GreetPerson - name: GreetPerson type: operation actions: - name: greetAction functionRef: refName: greetFunction arguments: message: ".greeting+.name" end: true
Copy to Clipboard Copied! 次のコマンドを実行して、ワークフローサービスのルートを作成します。
oc expose svc/<workflow-service-name> -n workflows
$ oc expose svc/<workflow-service-name> -n workflows
Copy to Clipboard Copied! このコマンドは、ワークフローサービスにアクセスするためのパブリック URL を作成します。
次のコマンドを実行して、パブリック URL の環境変数を設定します。
WORKFLOW_SVC=$(oc get route/<workflow-service-name> -n <namespace> --template='{{.spec.host}}')
$ WORKFLOW_SVC=$(oc get route/<workflow-service-name> -n <namespace> --template='{{.spec.host}}')
Copy to Clipboard Copied! 次のコマンドを実行して、ワークフローに HTTP 呼び出しを行い、サービスに POST リクエストを送信します。
curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{<"your": "json_payload">}' http://$WORKFLOW_SVC/<endpoint>
$ curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{<"your": "json_payload">}' http://$WORKFLOW_SVC/<endpoint>
Copy to Clipboard Copied! 出力例
{ "id": "b5fbfaa3-b125-4e6c-9311-fe5a3577efdd", "workflowdata": { "name": "John", "language": "English", "greeting": "Hello from JSON Workflow, " } }
{ "id": "b5fbfaa3-b125-4e6c-9311-fe5a3577efdd", "workflowdata": { "name": "John", "language": "English", "greeting": "Hello from JSON Workflow, " } }
Copy to Clipboard Copied! この出力は、ワークフローが実行中の場合に予想される応答の例を示しています。
1.2.2.4. ビルドの再実行
ビルドを再実行するには、SonataFlowBuild
インスタンスに sonataflow.org/restartBuild: true
アノテーションを追加または編集します。ワークフローまたは初期ビルドリビジョンに問題がある場合は、ビルドを再実行する必要があります。
前提条件
- クラスターに OpenShift Serverless Logic Operator がインストールされている。
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
-
OpenShift CLI
(oc)
がインストールされている。
手順
次のコマンドを実行して、
SonataFlowBuild
インスタンスが存在するかどうかを確認します。oc get sonataflowbuild <name> -n <namespace>
$ oc get sonataflowbuild <name> -n <namespace>
Copy to Clipboard Copied! 次のコマンドを実行して、
SonataFlowBuild
インスタンスを編集します。oc edit sonataflowbuild/<name> -n <namespace>
$ oc edit sonataflowbuild/<name> -n <namespace>
Copy to Clipboard Copied! <name>
はSonataFlowBuild
インスタンスの名前に、<namespace>
はワークフローがデプロイされている namespace に置き換えます。ビルドを再実行するには、
sonataflow.org/restartBuild: true
アノテーションを追加します。apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowBuild metadata: name: <name> annotations: sonataflow.org/restartBuild: true
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowBuild metadata: name: <name> annotations: sonataflow.org/restartBuild: true
Copy to Clipboard Copied! このアクションにより、OpenShift Serverless Logic Operator がトリガーされ、ワークフローの新しいビルドが開始されます。
ビルドプロセスを監視するには、次のコマンドを実行してビルドログを確認します。
oc logs buildconfig/<name> -n <namespace>
$ oc logs buildconfig/<name> -n <namespace>
Copy to Clipboard Copied! <name>
はSonataFlowBuild
インスタンスの名前に、<namespace>
はワークフローがデプロイされている namespace に置き換えます。
1.2.3. ワークフローの編集
OpenShift Serverless Logic Operator がワークフローサービスをデプロイすると、ランタイムプロパティーを保存するための 2 つの config map が作成されます。
-
ユーザープロパティー:
SonataFlow
オブジェクトをもとに名前が付けられ、接尾辞が-props
であるConfigMap
で定義されます。たとえば、ワークフロー名がgreeting
の場合、ConfigMap
名はgreeting-props
になります。 -
管理プロパティー:
SonataFlow
オブジェクトをもとに名前が付けられ、接尾辞が-managed-props
であるConfigMap
で定義されます。たとえば、ワークフロー名がgreeting
の場合、ConfigMap
名はgreeting-managed-props
になります。
管理プロパティーは常にキー名が同じユーザープロパティーをすべてオーバーライドし、ユーザーが編集することはできません。すべての変更は、次の調整サイクルで Operator によって上書きされます。
前提条件
- OpenShift Serverless Logic Operator がクラスターにインストールされている。
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
-
OpenShift CLI
(oc)
がインストールされている。
手順
以下のコマンドを実行して
ConfigMap
を開き、編集します。oc edit cm <workflow_name>-props -n <namespace>
$ oc edit cm <workflow_name>-props -n <namespace>
Copy to Clipboard Copied! <workflow_name>
はワークフローの名前に、<namespace>
はワークフローがデプロイされている namespace に置き換えます。application.properties
セクションにプロパティーを追加します。ConfigMap
内に保存されるワークフロープロパティーの例:apiVersion: v1 kind: ConfigMap metadata: labels: app: greeting name: greeting-props namespace: default data: application.properties: | my.properties.key = any-value
apiVersion: v1 kind: ConfigMap metadata: labels: app: greeting name: greeting-props namespace: default data: application.properties: | my.properties.key = any-value
Copy to Clipboard Copied! Operator が設定をデフォルトの設定に置き換えないように、プロパティーが正しくフォーマットされていることを確認してください。
- 必要な変更を行った後、ファイルを保存してエディターを終了します。
1.2.4. ワークフローのテスト
OpenShift Serverless Logic ワークフローが正しく実行されていることを確認するには、関連する Pod からテスト HTTP 呼び出しを実行できます。
前提条件
- OpenShift Serverless Logic Operator がクラスターにインストールされている。
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
-
OpenShift CLI
(oc)
がインストールされている。
手順
次のコマンドを実行して、namespace 内の指定されたサービスへのルートを作成します。
oc expose svc <service_name> -n <namespace>
$ oc expose svc <service_name> -n <namespace>
Copy to Clipboard Copied! 新しく公開されたサービスの URL を取得するには、次のコマンドを実行します。
WORKFLOW_SVC=$(oc get route/<service_name> --template='{{.spec.host}}')
$ WORKFLOW_SVC=$(oc get route/<service_name> --template='{{.spec.host}}')
Copy to Clipboard Copied! 次のコマンドを実行して、テスト HTTP 呼び出しを実行し、
POST
リクエストを送信します。curl -X POST -H 'Content-Type:application/json' -H 'Accept:application/json' -d '<request_body>' http://$WORKFLOW_SVC/<endpoint>
$ curl -X POST -H 'Content-Type:application/json' -H 'Accept:application/json' -d '<request_body>' http://$WORKFLOW_SVC/<endpoint>
Copy to Clipboard Copied! - 応答を検証して、ワークフローが期待どおりに機能していることを確認します。
1.2.5. ワークフローのトラブルシューティング
OpenShift Serverless Logic Operator は、ヘルスチェックプローブを備えた Pod をデプロイし、ワークフローが正常な状態で実行されるようにします。変更したことが原因でこれらのヘルスチェックに失敗すると、Pod は応答を停止します。
前提条件
- OpenShift Serverless Logic Operator がクラスターにインストールされている。
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
-
OpenShift CLI
(oc)
がインストールされている。
手順
次のコマンドを実行してワークフローのステータスを確認します。
oc get workflow <name> -o jsonpath={.status.conditions} | jq .
$ oc get workflow <name> -o jsonpath={.status.conditions} | jq .
Copy to Clipboard Copied! ワークフローのデプロイメントからログを取得して分析するには、次のコマンドを実行します。
oc logs deployment/<workflow_name> -f
$ oc logs deployment/<workflow_name> -f
Copy to Clipboard Copied!
1.2.6. ワークフローの削除
oc delete
コマンドを使用して、現在のディレクトリーで OpenShift Serverless Logic ワークフローを削除できます。
前提条件
- OpenShift Serverless Logic Operator がクラスターにインストールされている。
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
-
OpenShift CLI
(oc)
がインストールされている。
手順
-
削除するワークフローを定義する正しいファイルがあることを確認します。たとえば、
workflow.yaml
などです。 oc delete
コマンドを実行して、指定した namespace からワークフローを削除します。oc delete -f <your_file> -n <your_namespace>
$ oc delete -f <your_file> -n <your_namespace>
Copy to Clipboard Copied! <your_file>
は、ワークフローファイルの名前に、<your_namespace>
を namespace に置き換えます。
第2章 グローバル設定
OpenShift Serverless Logic Operator のグローバル設定オプションを設定できます。
2.1. 前提条件
- OpenShift Serverless Logic Operator をターゲットクラスターにインストールしている。
2.2. グローバル設定のカスタマイズ
OpenShift Serverless Logic Operator のインストール後に、openshift-serverless-logic
namespace の logic-operator-rhel8-controllers-config
config map ファイルにアクセスできます。この設定ファイルは、Operator がクラスターに新規リソースを作成する際にどのように動作するかを定義します。ただし、この設定への変更は、すでに存在するリソースには影響しません。
config map の controllers_cfg.yaml
キー内のオプションのいずれかを変更できます。
以下の表は、利用可能なすべてのグローバル設定オプションの概要を示しています。
設定キー | デフォルト値 | 説明 |
---|---|---|
|
| 内部 OpenShift Serverless Logic Operator ビルダーマネージャーを使用する場合の Kaniko 永続ボリューム要求 (PVC) のデフォルトサイズ。 |
|
| 開発者モードのワークフローが開始されるまでに待機する時間 (秒単位)。この情報は、コントローラーマネージャーが新しい開発者モードコンテナーを作成し、ヘルスチェックプローブを設定するために使用されます。 |
|
| Operator 管理の Kaniko ビルダーがウォームアップ Pod を作成するために使用するデフォルトのイメージ。 |
|
| Operator 管理の Kaniko ビルダーがエグゼキューター Pod を作成するために内部で使用されるデフォルトのイメージ。 |
|
| PostgreSQL が使用する Job サービスイメージ。空の場合、OpenShift Serverless Logic Operator は、現行バージョンの OpenShift Serverless Logic Operator に基づいてデフォルトの Apache コミュニティーイメージを使用します。 |
|
| 使用する永続性のない Job サービスイメージ。空の場合、OpenShift Serverless Logic Operator は、現行バージョンの OpenShift Serverless Logic Operator に基づいてデフォルトの Apache コミュニティーイメージを使用します。 |
|
| PostgreSQL が使用する Data Index サービスイメージ。空の場合、OpenShift Serverless Logic Operator は、現行バージョンの OpenShift Serverless Logic Operator に基づいてデフォルトの Apache コミュニティーイメージを使用します。 |
|
| 使用する永続性のない Data Index サービスイメージ。空の場合、OpenShift Serverless Logic Operator は、現行バージョンの OpenShift Serverless Logic Operator に基づいてデフォルトの Apache コミュニティーイメージを使用します。 |
|
| プレビュープロファイルでワークフローアプリケーションをビルドするために内部 Dockerfile で使用される OpenShift Serverless Logic ベースビルダーイメージ。空の場合、OpenShift Serverless Logic Operator は、現行バージョンの OpenShift Serverless Logic Operator に基づいてデフォルトの Apache コミュニティーイメージを使用します。 |
|
| OpenShift Serverless Logic ワークフローイメージを devmode プロファイルにデプロイするために使用するイメージ。空の場合、OpenShift Serverless Logic Operator は、現行バージョンの OpenShift Serverless Logic Operator に基づいてデフォルトの Apache コミュニティーイメージを使用します。 |
|
| OpenShift Serverless Logic Operator namespace のビルダー config map のデフォルト名。 |
| next column | ワークフローの永続性に必要な Quarkus エクステンション。これらのエクステンションは、ビルドされるワークフローで PostgreSQL の永続性が設定されている場合に、OpenShift Serverless Logic Operator ビルダーによって使用されます。 |
|
|
|
|
|
|
|
|
|
これは、oc
コマンドラインツールを使用して logic-operator-controllers-config
config map を更新することで編集できます。
2.2.1. グローバル設定変更の影響
グローバル設定を更新すると、変更は直ちに新規作成されたリソースにのみ影響します。たとえば、sonataFlowDevModeImageTag
プロパティーを変更し、dev モードでデプロイ済みのワークフローがある場合、OpenShift Serverless Logic Operator は更新されたイメージ設定で新しいデプロイメントをロールアウトしません。変更を反映するのは、新しいデプロイメントのみです。
2.2.2. ベースビルダーイメージのカスタマイズ
OpenShift Serverless Logic Operator で使用される Dockerfile のベースビルダーイメージを直接変更できます。
さらに、現在の namespace 内の SonataFlowPlatform
設定でベースビルダーイメージを指定できます。これにより、指定されたベースイメージが指定の namespace でのみ使用されるようになります。
カスタムベースビルダーイメージを含む SonataFlowPlatform
の例
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform spec: build: config: baseImage: dev.local/my-workflow-builder:1.0.0
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
name: sonataflow-platform
spec:
build:
config:
baseImage: dev.local/my-workflow-builder:1.0.0
または、以下の例のように、グローバル config map でベースビルダーイメージを変更することもできます。
カスタムベースビルダーイメージを含む ConfigMap
の例
apiVersion: v1 data: controllers_cfg.yaml: | sonataFlowBaseBuilderImageTag: dev.local/my-workflow-builder:1.0.0 kind: ConfigMap metadata: name: logic-operator-rhel8-controllers-config namespace: openshift-serverless-logic
apiVersion: v1
data:
controllers_cfg.yaml: |
sonataFlowBaseBuilderImageTag: dev.local/my-workflow-builder:1.0.0
kind: ConfigMap
metadata:
name: logic-operator-rhel8-controllers-config
namespace: openshift-serverless-logic
ベースビルダーイメージをカスタマイズする場合、以下の優先順位が適用されます。
-
現在のコンテキストの
SonataFlowPlatform
設定。 -
ConfigMap
リソースのグローバル設定エントリー。 -
logic-operator-rhel8-builder-config
config map で定義される、OpenShift Serverless Logic Operator namespace 内の Dockerfile のFROM
句。
SonataFlowPlatform
設定のエントリーは、常に他の値をオーバーライドします。
第3章 サービスの管理
3.1. OpenAPI サービスの設定
OpenAPI 仕様 (OAS) は、HTTP API 向けに、プログラミング言語に依存しない、標準のインターフェイスを定義します。ソースコード、追加のドキュメント、またはネットワークトラフィックの検査にアクセスしなくても、サービスの機能を理解することができます。OpenAPI を使用してサービスを定義すると、最小限の実装ロジックを使用してサービスを理解し、操作することができます。インターフェイスの記述によって低レベルのプログラミングが簡素化されるのと同様に、OpenAPI 仕様 によってサービス呼び出し時の推測作業がなくなります。
3.1.1. OpenAPI 関数定義
OpenShift Serverless Logic を使用すると、ワークフローは関数内の OpenAPI 仕様参照を使用してリモートサービスと対話できます。
OpenAPI 関数定義の例
{ "functions": [ { "name": "myFunction1", "operation": "specs/myopenapi-file.yaml#myFunction1" } ] }
{
"functions": [
{
"name": "myFunction1",
"operation": "specs/myopenapi-file.yaml#myFunction1"
}
]
}
operation
属性は、次のパラメーターで構成される string
です。
-
URI
: エンジンは、これを使用して仕様ファイルを見つけます。 - Operation identifier: この識別子は OpenAPI 仕様ファイルにあります。
OpenShift Serverless Logic は以下の URI スキームをサポートします。
- file: ファイルシステム内にあるファイルに使用します。
-
HTTP
またはhttps
: リモートで配置されたファイルにこれらを使用します。
ビルド時に OpenAPI 仕様ファイルが利用可能であることを確認します。OpenShift Serverless Logic は、実行時にリクエストを送信するために内部コード生成機能を使用します。アプリケーションイメージのビルド後、OpenShift Serverless Logic はこれらのファイルにアクセスできません。
ワークフローに追加する OpenAPI サービスに仕様ファイルがない場合は、仕様ファイルを作成するか、サービスを更新してファイルを生成して公開できます。
3.1.2. OpenAPI 仕様に基づく REST リクエストの送信
OpenAPI 仕様ファイルに基づく REST リクエストを送信するには、次の手順を実行する必要があります。
- 関数参照を定義する
- ワークフロー状態で定義された関数にアクセスする
前提条件
- OpenShift Serverless Logic Operator がクラスターにインストールされている。
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
- OpenAPI 仕様ファイルにアクセスできる。
手順
OpenAPI 関数を定義するには、以下を行います。
- 呼び出す予定のサービスの OpenAPI 仕様ファイルを識別してアクセスします。
OpenAPI 仕様ファイルを、
<project_application_dir>/specs
などのワークフローサービスディレクトリーにコピーします。次の例は、乗算 REST サービスの OpenAPI 仕様を示しています。
乗算 REST サービス OpenAPI 仕様の例
openapi: 3.0.3 info: title: Generated API version: "1.0" paths: /: post: operationId: doOperation parameters: - in: header name: notUsed schema: type: string required: false requestBody: content: application/json: schema: $ref: '#/components/schemas/MultiplicationOperation' responses: "200": description: OK content: application/json: schema: type: object properties: product: format: float type: number components: schemas: MultiplicationOperation: type: object properties: leftElement: format: float type: number rightElement: format: float type: number
openapi: 3.0.3 info: title: Generated API version: "1.0" paths: /: post: operationId: doOperation parameters: - in: header name: notUsed schema: type: string required: false requestBody: content: application/json: schema: $ref: '#/components/schemas/MultiplicationOperation' responses: "200": description: OK content: application/json: schema: type: object properties: product: format: float type: number components: schemas: MultiplicationOperation: type: object properties: leftElement: format: float type: number rightElement: format: float type: number
Copy to Clipboard Copied! ワークフローで関数を定義するには、OpenAPI 仕様の
operationId
を使用して、関数定義内の目的の操作を参照します。温度変換アプリケーションにおける関数定義の例
{ "functions": [ { "name": "multiplication", "operation": "specs/multiplication.yaml#doOperation" }, { "name": "subtraction", "operation": "specs/subtraction.yaml#doOperation" } ] }
{ "functions": [ { "name": "multiplication", "operation": "specs/multiplication.yaml#doOperation" }, { "name": "subtraction", "operation": "specs/subtraction.yaml#doOperation" } ] }
Copy to Clipboard Copied! -
関数定義が、
<project_application_dir>/specs
ディレクトリーに保存されている OpenAPI ファイルへの正しいパスを参照していることを確認します。
ワークフロー状態で定義された関数にアクセスします。
- 追加した関数定義を呼び出すワークフローアクションを定義します。各アクションが以前に定義された関数を参照していることを確認します。
特定の関数を名前で参照するには、
functionRef
属性を使用します。OpenAPI 仕様で定義されたパラメーターを使用して、functionRef
内の引数をマップします。次の例は、リクエスト本文ではなくリクエストパス内のパラメーターのマッピングを示しています。次の PetStore API の例を参照できます。
ワークフローで関数引数をマッピングする例
{ "states": [ { "name": "SetConstants", "type": "inject", "data": { "subtractValue": 32.0, "multiplyValue": 0.5556 }, "transition": "Computation" }, { "name": "Computation", "actionMode": "sequential", "type": "operation", "actions": [ { "name": "subtract", "functionRef": { "refName": "subtraction", "arguments": { "leftElement": ".fahrenheit", "rightElement": ".subtractValue" } } }, { "name": "multiply", "functionRef": { "refName": "multiplication", "arguments": { "leftElement": ".difference", "rightElement": ".multiplyValue" } } } ], "end": { "terminate": true } } ] }
{ "states": [ { "name": "SetConstants", "type": "inject", "data": { "subtractValue": 32.0, "multiplyValue": 0.5556 }, "transition": "Computation" }, { "name": "Computation", "actionMode": "sequential", "type": "operation", "actions": [ { "name": "subtract", "functionRef": { "refName": "subtraction", "arguments": { "leftElement": ".fahrenheit", "rightElement": ".subtractValue" } } }, { "name": "multiply", "functionRef": { "refName": "multiplication", "arguments": { "leftElement": ".difference", "rightElement": ".multiplyValue" } } } ], "end": { "terminate": true } } ] }
Copy to Clipboard Copied! -
リクエスト内のパラメーターの構造化方法を理解するには、OpenAPI 仕様の
Operation Object
のセクションを確認してください。 -
jq
式を使用してペイロードからデータを抽出し、必要なパラメーターにマップします。エンジンが OpenAPI 仕様に従ってパラメーター名をマッピングしていることを確認します。 本文ではなくリクエストパス内のパラメーターを必要とする操作は、OpenAPI 仕様のパラメーター定義を参照してください。
リクエスト本文ではなくリクエストパスでパラメーターをマッピングする方法の詳細は、次の PetStore API の例を参照してください。
パスパラメーターのマッピングの例
{ "/pet/{petId}": { "get": { "tags": ["pet"], "summary": "Find pet by ID", "description": "Returns a single pet", "operationId": "getPetById", "parameters": [ { "name": "petId", "in": "path", "description": "ID of pet to return", "required": true, "schema": { "type": "integer", "format": "int64" } } ] } } }
{ "/pet/{petId}": { "get": { "tags": ["pet"], "summary": "Find pet by ID", "description": "Returns a single pet", "operationId": "getPetById", "parameters": [ { "name": "petId", "in": "path", "description": "ID of pet to return", "required": true, "schema": { "type": "integer", "format": "int64" } } ] } } }
Copy to Clipboard Copied! 以下は関数の呼び出し例です。リクエストパスに
petId
という名前のパラメーターが 1 つだけ追加されています。PetStore 関数の呼び出し例
{ "name": "CallPetStore", "actionMode": "sequential", "type": "operation", "actions": [ { "name": "getPet", "functionRef": { "refName": "getPetById", "arguments": { "petId": ".petId" } } } ] }
{ "name": "CallPetStore",
1 "actionMode": "sequential", "type": "operation", "actions": [ { "name": "getPet", "functionRef": { "refName": "getPetById",
2 "arguments": {
3 "petId": ".petId" } } } ] }
Copy to Clipboard Copied!
3.1.3. OpenAPI サービスのエンドポイント URL の設定
ワークフロー状態の関数定義にアクセスした後、OpenAPI サービスのエンドポイント URL を設定できます。
前提条件
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
- OpenShift Serverless Logic プロジェクトを作成している。
- OpenAPI 仕様ファイルにアクセスできる。
- ワークフローで関数定義を定義している。
- ワークフロー状態で定義された関数にアクセスできる。
手順
-
設定する OpenAPI 仕様ファイルを見つけます。例:
substraction.yaml
-
.
などの特殊文字をアンダースコアに置き換え、文字を小文字に変換して、ファイル名を有効な設定キーに変換します。たとえば、substraction.yaml
をsubstraction_yaml
に変更します。 設定キーを定義するには、変換されたファイル名を REST クライアント設定キーとして使用します。次の例に示すように、このキーを環境変数として設定します。
quarkus.rest-client.subtraction_yaml.url=http://myserver.com
quarkus.rest-client.subtraction_yaml.url=http://myserver.com
Copy to Clipboard Copied! application.properties
ファイルで URL がハードコーディングされるのを防ぐには、次の例に示すように、環境変数の置換を使用します。quarkus.rest-client.subtraction_yaml.url=${SUBTRACTION_URL:http://myserver.com}
quarkus.rest-client.subtraction_yaml.url=${SUBTRACTION_URL:http://myserver.com}
Copy to Clipboard Copied! この例では、以下が適用されます。
-
Configuration Key:
quarkus.rest-client.subtraction_yaml.url
- 環境変数: SUBTRACTION_URL
-
フォールバック URL:
http://myserver.com
-
Configuration Key:
-
システムまたはデプロイメント環境で
(SUBTRACTION_URL)
環境変数が設定されていることを確認します。変数が見つからない場合、アプリケーションはフォールバック URL(http://myserver.com)
を使用します。 設定キーと URL 置換を
application.properties
ファイルに追加します。quarkus.rest-client.subtraction_yaml.url=${SUBTRACTION_URL:http://myserver.com}
quarkus.rest-client.subtraction_yaml.url=${SUBTRACTION_URL:http://myserver.com}
Copy to Clipboard Copied! - アプリケーションをデプロイまたは再起動して、新しい設定を適用します。
3.2. OpenAPI サービスエンドポイントの設定
OpenShift Serverless Logic は kogito.sw.operationIdStrategy
プロパティーを使用して、OpenAPI ドキュメントに定義されたサービスを呼び出すための REST クライアントを生成します。このプロパティーは、REST クライアント設定の設定キーがどのように導出されるかを決定します。
kogito.sw.operationIdStrategy
プロパティーは、FILE_NAME
、FULL_URI
、FUNCTION_NAME
、および SPEC_TITLE
の値をサポートします。
FILE_NAME
OpenShift Serverless Logic は、OpenAPI ドキュメントファイル名を使用して設定キーを作成します。キーはファイル名に基づいており、特殊文字はアンダースコアに置き換えられます。
設定例:
quarkus.rest-client.stock_portfolio_svc_yaml.url=http://localhost:8282/
quarkus.rest-client.stock_portfolio_svc_yaml.url=http://localhost:8282/
1 Copy to Clipboard Copied! - 1
- OpenAPI ファイルのパスは &
lt;project_application_dir>/specs/stock-portfolio-svc.yaml
です。REST クライアントの URL を設定する生成されたキーはstock_portfolio_svc_yaml
です。
FULL_URI
OpenShift Serverless Logic は、OpenAPI ドキュメントの完全な URI パスを設定キーとして使用します。完全な URI はサニタイズされ、キーが形成されます。
Serverless ワークフローの例
{ "id": "myworkflow", "functions": [ { "name": "myfunction", "operation": "https://my.remote.host/apicatalog/apis/123/document" } ] }
{ "id": "myworkflow", "functions": [ { "name": "myfunction", "operation": "https://my.remote.host/apicatalog/apis/123/document" } ] }
Copy to Clipboard Copied! 設定例:
quarkus.rest-client.apicatalog_apis_123_document.url=http://localhost:8282/
quarkus.rest-client.apicatalog_apis_123_document.url=http://localhost:8282/
1 Copy to Clipboard Copied! - 1
- URI パスは
https://my.remote.host/apicatalog/apis/123/document
です。REST クライアントの URL を設定する生成キーはapicatalog_apis_123_document
です。
FUNCTION_NAME
OpenShift Serverless Logic は、ワークフロー ID と OpenAPI ドキュメントを参照する関数名を組み合わせて、設定キーを生成します。
Serverless ワークフローの例
{ "id": "myworkflow", "functions": [ { "name": "myfunction", "operation": "https://my.remote.host/apicatalog/apis/123/document" } ] }
{ "id": "myworkflow", "functions": [ { "name": "myfunction", "operation": "https://my.remote.host/apicatalog/apis/123/document" } ] }
Copy to Clipboard Copied! 設定例:
quarkus.rest-client.myworkflow_myfunction.url=http://localhost:8282/
quarkus.rest-client.myworkflow_myfunction.url=http://localhost:8282/
1 Copy to Clipboard Copied! - 1
- ワークフロー ID は
myworkflow
です。関数名はmyfunction
です。REST クライアントの URL を設定する生成キーはmyworkflow_myfunction
です。
SPEC_TITLE
OpenShift Serverless Logic は、OpenAPI ドキュメントの
info.title
値を使用して設定キーを作成します。タイトルは、サニタイズされ、キーが作成されます。OpenAPI ドキュメントの例
openapi: 3.0.3 info: title: stock-service API version: 2.0.0-SNAPSHOT paths: /stock-price/{symbol}: ...
openapi: 3.0.3 info: title: stock-service API version: 2.0.0-SNAPSHOT paths: /stock-price/{symbol}: ...
Copy to Clipboard Copied! 設定例:
quarkus.rest-client.stock-service_API.url=http://localhost:8282/
quarkus.rest-client.stock-service_API.url=http://localhost:8282/
1 Copy to Clipboard Copied! - 1
- OpenAPI ドキュメントのタイトルは
stock-service API
です。REST クライアントの URL を設定する生成キーはstock-service_API
です。
3.2.1. URI エイリアスの使用
kogito.sw.operationIdStrategy
プロパティーの代わりに、workflow-uri-definitions
カスタムエクステンションを使用してエイリアスを URI に割り当てることができます。このエイリアスは設定プロセスを簡素化し、REST クライアント設定および関数定義の設定キーとして使用できます。
workflow-uri-definitions
エクステンションを使用すると、URI をエイリアスにマップして、ワークフロー全体と設定ファイルで参照できるようになります。このアプローチは、URI とその設定を一元管理する方法を提供します。
前提条件
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
- OpenAPI 仕様ファイルにアクセスできる。
手順
workflow-uri-definitions
拡張をワークフローに追加します。このエクステンション内で、URI のエイリアスを作成します。ワークフローの例
{ "extensions": [ { "extensionid": "workflow-uri-definitions", "definitions": { "remoteCatalog": "https://my.remote.host/apicatalog/apis/123/document" } } ], "functions": [ { "name": "operation1", "operation": "remoteCatalog#operation1" }, { "name": "operation2", "operation": "remoteCatalog#operation2" } ] }
{ "extensions": [ { "extensionid": "workflow-uri-definitions",
1 "definitions": { "remoteCatalog": "https://my.remote.host/apicatalog/apis/123/document"
2 } } ], "functions": [
3 { "name": "operation1", "operation": "remoteCatalog#operation1" }, { "name": "operation2", "operation": "remoteCatalog#operation2" } ] }
Copy to Clipboard Copied!
- 1
- 拡張 ID を
workflow-uri-definitions
に設定します。 - 2
remoteCatalog
エイリアスを URI (例:https://my.remote.host/apicatalog/apis/123/document
URI) にマッピングして、エイリアス定義を設定します。- 3
- オペレーション ID (例:
operation1
およびoperation2
のオペレーション ID) を持つremoteCatalog
エイリアスを使用して関数操作を設定します。application.properties
ファイルで、ワークフローで定義されたエイリアスを使用して REST クライアントを設定します。プロパティー例
quarkus.rest-client.remoteCatalog.url=http://localhost:8282/
quarkus.rest-client.remoteCatalog.url=http://localhost:8282/
Copy to Clipboard Copied! 前の例では、設定キーは
quarkus.rest-client.remoteCatalog.url
に設定され、URL はhttp://localhost:8282/
に設定されており、REST クライアントはremoteCatalog
エイリアスを参照してこれを使用します。ワークフローでは、URI を操作する関数を定義するときにエイリアスを使用します。
ワークフローの例 (続き):
{ "functions": [ { "name": "operation1", "operation": "remoteCatalog#operation1" }, { "name": "operation2", "operation": "remoteCatalog#operation2" } ] }
{ "functions": [ { "name": "operation1", "operation": "remoteCatalog#operation1" }, { "name": "operation2", "operation": "remoteCatalog#operation2" } ] }
Copy to Clipboard Copied!
3.3. サービスのトラブルシューティング
ワークフローオーケストレーションを維持するには、OpenAPI 関数を使用するような HTTP ベースの関数呼び出しを効率的にトラブルシューティングすることが重要です。
問題を診断するには、HTTP リクエストとレスポンスをトレースできます。
3.3.1. HTTP リクエストとレスポンスのトレース
OpenShift Serverless Logic は、Apache HTTP クライアントを使用して HTTP リクエストとレスポンスをトレースします。
前提条件
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
- OpenAPI 仕様ファイルにアクセスできる。
- HTTP リクエストとレスポンスを関連付けるためのワークフロー定義とインスタンス ID にアクセスできる。
- HTTP サービス呼び出しが発生しているアプリケーションのログ設定にアクセスできる。
手順
HTTP リクエストとレスポンスをトレースするために、OpenShift Serverless Logic は次のプロパティーを設定して Apache HTTP クライアントを使用します。
Turning HTTP tracing on
# Turning HTTP tracing on quarkus.log.category."org.apache.http".level=DEBUG
Copy to Clipboard Copied! Apache HTTP クライアントのデバッグを有効にするには、アプリケーションの
application.properties
ファイルに次の設定を追加します。quarkus.log.category."org.apache.http".level=DEBUG
quarkus.log.category."org.apache.http".level=DEBUG
Copy to Clipboard Copied! - ログ設定の変更を反映するには、アプリケーションを再起動します。
再起動後、ログで HTTP リクエストトレースを確認します。
トレースされた HTTP リクエストのログの例
2023-09-25 19:00:55,242 DEBUG Executing request POST /v2/models/yolo-model/infer HTTP/1.1 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> POST /v2/models/yolo-model/infer HTTP/1.1 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> Accept: application/json 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> Content-Type: application/json 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoprocid: inferencepipeline 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoprocinstanceid: 85114b2d-9f64-496a-bf1d-d3a0760cde8e 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoprocist: Active 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoproctype: SW 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoprocversion: 1.0 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> Content-Length: 23177723 2023-09-25 19:00:55,244 DEBUG http-outgoing-0 >> Host: yolo-model-opendatahub-model.apps.trustyai.dzzt.p1.openshiftapps.com
2023-09-25 19:00:55,242 DEBUG Executing request POST /v2/models/yolo-model/infer HTTP/1.1 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> POST /v2/models/yolo-model/infer HTTP/1.1 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> Accept: application/json 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> Content-Type: application/json 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoprocid: inferencepipeline 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoprocinstanceid: 85114b2d-9f64-496a-bf1d-d3a0760cde8e 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoprocist: Active 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoproctype: SW 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> kogitoprocversion: 1.0 2023-09-25 19:00:55,243 DEBUG http-outgoing-0 >> Content-Length: 23177723 2023-09-25 19:00:55,244 DEBUG http-outgoing-0 >> Host: yolo-model-opendatahub-model.apps.trustyai.dzzt.p1.openshiftapps.com
Copy to Clipboard Copied! リクエストログに続く HTTP レスポンストレースのログを確認します。
トレースされた HTTP レスポンスのログの例
2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "HTTP/1.1 500 Internal Server Error[\r][\n]" 2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "content-type: application/json[\r][\n]" 2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "date: Mon, 25 Sep 2023 19:01:00 GMT[\r][\n]" 2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "content-length: 186[\r][\n]" 2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "set-cookie: 276e4597d7fcb3b2cba7b5f037eeacf5=5427fafade21f8e7a4ee1fa6c221cf40; path=/; HttpOnly; Secure; SameSite=None[\r][\n]" 2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "[\r][\n]" 2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "{"code":13, "message":"Failed to load Model due to adapter error: Error calling stat on model file: stat /models/yolo-model__isvc-1295fd6ba9/yolov5s-seg.onnx: no such file or directory"}"
2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "HTTP/1.1 500 Internal Server Error[\r][\n]" 2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "content-type: application/json[\r][\n]" 2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "date: Mon, 25 Sep 2023 19:01:00 GMT[\r][\n]" 2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "content-length: 186[\r][\n]" 2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "set-cookie: 276e4597d7fcb3b2cba7b5f037eeacf5=5427fafade21f8e7a4ee1fa6c221cf40; path=/; HttpOnly; Secure; SameSite=None[\r][\n]" 2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "[\r][\n]" 2023-09-25 19:01:00,738 DEBUG http-outgoing-0 << "{"code":13, "message":"Failed to load Model due to adapter error: Error calling stat on model file: stat /models/yolo-model__isvc-1295fd6ba9/yolov5s-seg.onnx: no such file or directory"}"
Copy to Clipboard Copied!
第4章 セキュリティーの管理
4.1. OpenAPI サービスの認証
OpenAPI サービスオペレーションをセキュアにするには、OpenAPI 仕様を 使用し
てセキュリティースキームを定義します。これらのスキームは、OpenAPI 仕様ファイルの securitySchemes
セクションにあります。そのセキュリティースキームを参照するセキュリティー要件を追加し て、
操作を設定する必要 があります
。ワークフローでこのような操作が呼び出された場合、その情報は必要な認証設定を決定するために使用されます。
本項では、サポートされる認証タイプを概説し、ワークフロー内のセキュアな OpenAPI サービス操作にアクセスするよう設定する方法を説明します。
4.1.1. OpenAPI サービス認証の概要
OpenShift Serverless Logic では、OpenAPI 仕様ファイルで定義されたセキュリティー スキームを使用して
OpenAPI サービス操作をセキュアにすることができます。これらのスキームは、ワークフロー内で呼び出される操作の認証要件を定義するのに役立ちます。
セキュリティー スキーム
は、OpenAPI ドキュメントの securitySchemes
セクションで宣言されます。各スキームには、適用する認証の種類(HTTP Basic、API キーなど)を指定します。
ワークフローがセキュアな操作を呼び出すと、これらの定義されたスキームを参照して、必要な認証設定を決定します。
セキュリティースキームの定義例
"securitySchemes": { "http-basic-example": { "type": "http", "scheme": "basic" }, "api-key-example": { "type": "apiKey", "name": "my-example-key", "in": "header" } }
"securitySchemes": {
"http-basic-example": {
"type": "http",
"scheme": "basic"
},
"api-key-example": {
"type": "apiKey",
"name": "my-example-key",
"in": "header"
}
}
OpenAPI ファイルがセキュリティー スキームを定義する
ものの、操作の セキュリティー要件
が含まれていない場合、ジェネレーターはデフォルトでそれらを作成するように設定できます。これらのデフォルトは、明示的に定義された要件のない操作に適用されます。
そのスキームを設定するには、quarkus.openapi-generator.codegen.default-security-scheme
プロパティーを使用する必要があります。default-security-scheme
プロパティーは、コード生成時にのみ使用され、実行時には使用されません。この値は、http-basic-example
や api-key-example
などの securitySchemes
セクションで使用可能なスキームのいずれかに一致する必要があります。
例
quarkus.openapi-generator.codegen.default-security-scheme=http-basic-example
$ quarkus.openapi-generator.codegen.default-security-scheme=http-basic-example
4.1.2. OpenAPI サービスの認証クレデンシャルの設定
認証スキームでセキュア化された OpenAPI サービスオペレーションを呼び出すには、アプリケーションで対応するクレデンシャルおよびパラメーターを設定する必要があります。OpenShift Serverless Logic はこれらの設定を使用して、ワークフローの実行中に外部サービスとを認証します。
ここでは、OpenAPI 仕様ファイルで宣言されたセキュリティースキームに必要な設定プロパティーを定義および適用する方法を説明します。application.properties
、ワークフローに関連付けられた ConfigMap
、または SonataFlow
CR の環境変数のいずれかを使用して、これらの認証情報を提供できます。
OpenAPI 仕様ファイルで定義されるセキュリティースキームは、同じファイルで利用可能なすべての操作に対してグローバルです。つまり、特定のセキュリティースキームに設定された設定は、他のセキュアな操作にも適用されます。
前提条件
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
- OpenAPI 仕様には、1 つ以上のセキュリティースキームが含まれます。
- OpenAPI 仕様ファイルにアクセスできる。
-
http-basic-example
またはapi-key-example
を設定するスキームを特定している。 -
application.properties
ファイル、ワークフローConfigMap
、またはSonataFlow
CR にアクセスできる。
手順
次の形式を使用して、プロパティーキーを作成します。
quarkus.openapi-generator.[filename].auth.[security_scheme_name].[auth_property_name]
quarkus.openapi-generator.[filename].auth.[security_scheme_name].[auth_property_name]
Copy to Clipboard Copied! -
filename
は、security_example_json などの OpenAPI 仕様が含まれるファイルのサニタイズされた名前です。この名前をサニタイズするには、アルファベット以外の文字をすべて_
underscores に置き換える必要があります。 -
security_scheme_name
は、http_basic_example
またはapi_key_example
などの OpenAPI 仕様ファイルのセキュリティースキームオブジェクト定義のサニタイズされた名前です。この名前をサニタイズするには、アルファベット以外の文字をすべて_
underscores に置き換える必要があります。 auth_property_name
は、username などの設定するプロパティーの名前です。このプロパティーは、定義されたセキュリティースキームタイプによって異なります。注記環境変数を使用してプロパティーを設定する場合は、MicroProfile 環境変数のマッピングルール に従います。プロパティーキーのアルファベット以外の文字をすべてアンダースコア
_
に置き換え、キー全体を大文字に変換できます。
-
次の例は、application.properties
、ワークフローに関連付けられた ConfigMap
、または SonataFlow
CR で定義された環境変数を使用して、これらの設定プロパティーを提供する方法を示しています。
application.properties
ファイルを使用して認証情報を設定する例
quarkus.openapi-generator.security_example_json.auth.http_basic_example.username=myuser quarkus.openapi-generator.security_example_json.auth.http_basic_example.password=mypassword
quarkus.openapi-generator.security_example_json.auth.http_basic_example.username=myuser
quarkus.openapi-generator.security_example_json.auth.http_basic_example.password=mypassword
ワークフロー ConfigMap
を使用して認証情報を設定する例
apiVersion: v1 data: application.properties: | quarkus.openapi-generator.security_example_json.auth.http_basic_example.username=myuser quarkus.openapi-generator.security_example_json.auth.http_basic_example.password=mypassword kind: ConfigMap metadata: labels: app: example-workflow name: example-workflow-props namespace: example-namespace
apiVersion: v1
data:
application.properties: |
quarkus.openapi-generator.security_example_json.auth.http_basic_example.username=myuser
quarkus.openapi-generator.security_example_json.auth.http_basic_example.password=mypassword
kind: ConfigMap
metadata:
labels:
app: example-workflow
name: example-workflow-props
namespace: example-namespace
ワークフローの名前が example-workflow
の場合、ユーザー定義のプロパティーを持つ ConfigMap
の名前は example-workflow-props
にする必要があります。
SonataFlow
CR で環境変数を使用して認証情報を設定する例
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlow metadata: name: example-workflow namespace: example-namespace annotations: sonataflow.org/description: Example Workflow sonataflow.org/version: 0.0.1 sonataflow.org/profile: preview spec: podTemplate: container: env: - name: QUARKUS_OPENAPI_GENERATOR_SECURITY_EXAMPLE_JSON_AUTH_HTTP_BASIC_EXAMPLE_USERNAME value: myuser - name: QUARKUS_OPENAPI_GENERATOR_SECURITY_EXAMPLE_JSON_AUTH_HTTP_BASIC_EXAMPLE_PASSWORD value: mypassowrd
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlow
metadata:
name: example-workflow
namespace: example-namespace
annotations:
sonataflow.org/description: Example Workflow
sonataflow.org/version: 0.0.1
sonataflow.org/profile: preview
spec:
podTemplate:
container:
env:
- name: QUARKUS_OPENAPI_GENERATOR_SECURITY_EXAMPLE_JSON_AUTH_HTTP_BASIC_EXAMPLE_USERNAME
value: myuser
- name: QUARKUS_OPENAPI_GENERATOR_SECURITY_EXAMPLE_JSON_AUTH_HTTP_BASIC_EXAMPLE_PASSWORD
value: mypassowrd
4.1.3. Basic HTTP 認証の例
以下の例は、HTTP 基本認証スキームを使用してワークフロー操作を保護する方法を示しています。security-example.json
ファイルは、http-basic-example
セキュリティースキームを使用する sayHelloBasic
などの 1 つのオペレーションで OpenAPI サービスを定義します。アプリケーションプロパティー、worfklow ConfigMap
、または環境変数を使用して認証情報を設定できます。
HTTP Basic 認証を使用した OpenAPI 仕様の例
{ "openapi": "3.1.0", "info": { "title": "Http Basic Scheme Example", "version": "1.0" }, "paths": { "/hello-with-http-basic": { "get": { "operationId": "sayHelloBasic", "responses": { "200": { "description": "OK", "content": { "text/plain": { "schema": { "type": "string" } } } } }, "security": [{"http-basic-example" : []}] } } }, "components": { "securitySchemes": { "http-basic-example": { "type": "http", "scheme": "basic" } } } }
{
"openapi": "3.1.0",
"info": {
"title": "Http Basic Scheme Example",
"version": "1.0"
},
"paths": {
"/hello-with-http-basic": {
"get": {
"operationId": "sayHelloBasic",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
}
},
"security": [{"http-basic-example" : []}]
}
}
},
"components": {
"securitySchemes": {
"http-basic-example": {
"type": "http",
"scheme": "basic"
}
}
}
}
この例では、e HelloBasic
操作は、securitySchemes
セクションで定義された http-basic-example
スキームを使用して保護されます。ワークフローでこの操作を呼び出す場合は、適切な認証情報を設定する必要があります。
4.1.3.1. 基本 HTTP 認証でサポートされている設定プロパティー
以下の設定キーを使用して、http-basic-example
スキームの認証認証情報を指定できます。
説明 | プロパティーキー | 例 |
---|---|---|
ユーザー名の認証情報 |
|
|
パスワードの認証情報 |
|
|
[filename]
は、サニタイズされた OpenAPI ファイル名 security_example_json
に、[security_scheme_name]
をサニタイズされたスキーム名 http_basic_example
に置き換えることができます。
4.1.4. Bearer トークン認証の例
以下の例は、HTTP Bearer 認証スキームを使用して OpenAPI 操作を保護する方法を示しています。security-example.json
ファイルは、認証に http-bearer-example
スキームを使用する sayHelloBearer
操作で OpenAPI サービスを定義します。ワークフローの実行中にセキュアな操作にアクセスするには、アプリケーションプロパティー、ワークフロー ConfigMap
、または環境変数を使用して Bearer トークンを設定する必要があります。
Bearer トークン認証を使用した OpenAPI 仕様の例
{ "openapi": "3.1.0", "info": { "title": "Http Bearer Scheme Example", "version": "1.0" }, "paths": { "/hello-with-http-bearer": { "get": { "operationId": "sayHelloBearer", "responses": { "200": { "description": "OK", "content": { "text/plain": { "schema": { "type": "string" } } } } }, "security": [ { "http-bearer-example": [] } ] } } }, "components": { "securitySchemes": { "http-bearer-example": { "type": "http", "scheme": "bearer" } } } }
{
"openapi": "3.1.0",
"info": {
"title": "Http Bearer Scheme Example",
"version": "1.0"
},
"paths": {
"/hello-with-http-bearer": {
"get": {
"operationId": "sayHelloBearer",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
}
},
"security": [
{
"http-bearer-example": []
}
]
}
}
},
"components": {
"securitySchemes": {
"http-bearer-example": {
"type": "http",
"scheme": "bearer"
}
}
}
}
この例では、e HelloBearer
操作は http-bearer-example
スキームで保護されています。この操作を正常に呼び出すには、設定で有効な Bearer トークンを定義する必要があります。
4.1.4.1. Bearer トークン認証でサポートされている設定プロパティー
以下の設定プロパティーキーを使用して Bearer トークンを提供できます。
説明 | プロパティーキー | 例 |
---|---|---|
ベアラートークン |
|
|
[filename]
は、サニタイズされた OpenAPI ファイル名 security_example_json
に、[security_scheme_name]
をサニタイズされたスキーム名 http_bearer_example
に置き換えることができます。
4.1.5. API キー認証の例
以下の例は、apiKey
認証スキームを使用して OpenAPI サービスオペレーションをセキュアにする方法を示しています。security-example.json
ファイルは、api-key-example
セキュリティースキームを使用する sayHelloApiKey
操作を定義します。アプリケーションプロパティー、ワークフロー ConfigMap
、または環境変数を使用して API キーを設定できます。
API キー認証を使用した OpenAPI 仕様の例
{ "openapi": "3.1.0", "info": { "title": "Api Key Scheme Example", "version": "1.0" }, "paths": { "/hello-with-api-key": { "get": { "operationId": "sayHelloApiKey", "responses": { "200": { "description": "OK", "content": { "text/plain": { "schema": { "type": "string" } } } } }, "security": [{"api-key-example" : []}] } } }, "components": { "securitySchemes": { "api-key-example": { "type": "apiKey", "name": "api-key-name", "in": "header" } } } }
{
"openapi": "3.1.0",
"info": {
"title": "Api Key Scheme Example",
"version": "1.0"
},
"paths": {
"/hello-with-api-key": {
"get": {
"operationId": "sayHelloApiKey",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
}
},
"security": [{"api-key-example" : []}]
}
}
},
"components": {
"securitySchemes": {
"api-key-example": {
"type": "apiKey",
"name": "api-key-name",
"in": "header"
}
}
}
}
この例で は、eHelloApiKey
操作は、HTTP リクエストヘッダーに渡される API キーを使用する api-key-example
セキュリティースキームによって保護されます。
4.1.5.1. API キー認証でサポートされている設定プロパティー
以下の設定プロパティーを使用して API キーを設定できます。
説明 | プロパティーキー | 例 |
---|---|---|
API キー |
|
|
[filename]
は、サニタイズされた OpenAPI ファイル名 security_example_json
に、[security_scheme_name]
を、サニタイズされたスキーム名 api_key_example
に置き換えることができます。
apiKey
スキームタイプには、Open API サービスが呼び出されるときに使用するキー名を設定する追加の name
プロパティーが含まれます。また、キーを渡す形式は in
プロパティーの値によって異なります。
-
値が
header
の場合、キーは HTTP リクエストパラメーターとして渡されます。 -
値が
cookie
の場合、キーは HTTP クッキーとして渡されます。 -
値が
query
の場合、キーは HTTP クエリーパラメーターとして渡されます。
この例では、キーは api-key-name: MY_KEY
として HTTP ヘッダーに渡されます。
OpenShift Serverless Logic はこれを内部で管理するため、プロパティー値を設定する以外に追加の設定は必要ありません。
4.1.6. clientCredentials OAuth 2.0 認証の例
以下の例は、OAuth 2.0 clientCredentials
フローを使用して OpenAPI オペレーションをセキュアにする方法を示しています。OpenAPI 仕様は、oauth-example
セキュリティースキームを使用する sayHelloOauth2
操作を定義します。HTTP Basic や API キーなどの単純な認証方法とは異なり、OAuth 2.0 認証では Quarkus OpenID Connect (OIDC) Client と追加の統合が必要です。
OAuth 2.0 を使用した OpenAPI 仕様の例
{ "openapi": "3.1.0", "info": { "title": "Oauth2 Scheme Example", "version": "1.0" }, "paths": { "/hello-with-oauth2": { "get": { "operationId": "sayHelloOauth2", "responses": { "200": { "description": "OK", "content": { "text/plain": { "schema": { "type": "string" } } } } }, "security": [ { "oauth-example": [] } ] } } }, "components": { "securitySchemes": { "oauth-example": { "type": "oauth2", "flows": { "clientCredentials": { "authorizationUrl": "https://example.com/oauth", "tokenUrl": "https://example.com/oauth/token", "scopes": {} } } } } } }
{
"openapi": "3.1.0",
"info": {
"title": "Oauth2 Scheme Example",
"version": "1.0"
},
"paths": {
"/hello-with-oauth2": {
"get": {
"operationId": "sayHelloOauth2",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
}
},
"security": [
{
"oauth-example": []
}
]
}
}
},
"components": {
"securitySchemes": {
"oauth-example": {
"type": "oauth2",
"flows": {
"clientCredentials": {
"authorizationUrl": "https://example.com/oauth",
"tokenUrl": "https://example.com/oauth/token",
"scopes": {}
}
}
}
}
}
}
この例で は、eHelloOauth2
操作は oauth-example
セキュリティースキームで保護されており、トークンベースの認証に clientCredentials
フローを使用します。
4.1.6.1. OIDC クライアントフィルターエクステンションを使用した OAuth 2.0 サポート
OAuth 2.0 トークン管理は、Quarkus OidcClient
によって処理されます。この統合を有効にするには、次の例に示すように、Quarkus OIDC Client Filter および Quarkus OpenApi Generator OIDC エクステンションをプロジェクトに追加する必要があります。
Maven を使用してエクステンションを追加する例
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-oidc-client-filter</artifactId> <version>3.15.4.redhat-00001</version> </dependency> <dependency> <groupId>io.quarkiverse.openapi.generator</groupId> <artifactId>quarkus-openapi-generator-oidc</artifactId> <version>2.9.0-lts</version> </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-oidc-client-filter</artifactId>
<version>3.15.4.redhat-00001</version>
</dependency>
<dependency>
<groupId>io.quarkiverse.openapi.generator</groupId>
<artifactId>quarkus-openapi-generator-oidc</artifactId>
<version>2.9.0-lts</version>
</dependency>
gitops
プロファイルを使用して拡張機能を追加する例
ワークフローイメージのビルド時に、QUARKUS_EXTENSIONS ビルド引数を以下の値で設定するようにしてください。
--build-arg=QUARKUS_EXTENSIONS=io.quarkus:quarkus-oidc-client-filter:3.15.4.redhat-00001,io.quarkiverse.openapi.generator:quarkus-openapi-generator-oidc:2.9.0-lts
$ --build-arg=QUARKUS_EXTENSIONS=io.quarkus:quarkus-oidc-client-filter:3.15.4.redhat-00001,io.quarkiverse.openapi.generator:quarkus-openapi-generator-oidc:2.9.0-lts
プレビュー
プロファイルを使用してエクステンションを追加する例
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform-example namespace: example-namespace spec: build: template: buildArgs: - name: QUARKUS_EXTENSIONS value: io.quarkus:quarkus-oidc-client-filter:3.15.4.redhat-00001,io.quarkiverse.openapi.generator:quarkus-openapi-generator-oidc:2.9.0-lts
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
name: sonataflow-platform-example
namespace: example-namespace
spec:
build:
template:
buildArgs:
- name: QUARKUS_EXTENSIONS
value: io.quarkus:quarkus-oidc-client-filter:3.15.4.redhat-00001,io.quarkiverse.openapi.generator:quarkus-openapi-generator-oidc:2.9.0-lts
SonataFlowPlatform
CR に追加された拡張機能は、プレビュー
プロファイルを使用してその namespace にデプロイするすべてのワークフローに含まれています。
4.1.6.2. OidcClient
の設定
セキュアな操作にアクセスするには、application.properties
ファイルに OidcClient
設定を定義します。この設定では、OpenAPI 仕様のサニタイズされたセキュリティースキーム名を使用します。この場合、以下のように oauth_example
になります。
adjust these configurations according with the authentication service.
# adjust these configurations according with the authentication service.
quarkus.oidc-client.oauth_example.auth-server-url=https://example.com/oauth
quarkus.oidc-client.oauth_example.token-path=/token
quarkus.oidc-client.oauth_example.discovery-enabled=false
quarkus.oidc-client.oauth_example.client-id=example-app
quarkus.oidc-client.oauth_example.grant.type=client
quarkus.oidc-client.oauth_example.credentials.client-secret.method=basic
quarkus.oidc-client.oauth_example.credentials.client-secret.value=secret
この設定では、以下のようになります。
-
oauth_example
は、OpenAPI ファイルのoauth-example
スキームのサニタイズされた名前と一致します。サニタイズされたスキーム名と対応するOidcClient
の間のリンクは、その単純な命名規則を使用して実現されます。 - OidcClient は、ワークフローの実行中にトークンの生成および更新を自動的に処理します。
4.1.7. 認可トークンの伝搬例
OpenShift Serverless Logic は、oauth2
または http
Bearer セキュリティースキームタイプを使用する OpenAPI 操作のトークン伝搬をサポートします。トークンの伝搬により、ワークフローの作成時に受信する認可トークンをダウンストリームサービスに転送できます。この機能は、リクエストを開始したクライアントに代わってワークフローがサードパーティーのサービスと対話する必要がある場合に役に立ちます。
セキュリティースキームごとに、トークン伝搬を個別に設定する必要があります。有効にすると、明示的にオーバーライドされない限り、同じスキームを使用して保護されたすべての OpenAPI 操作は伝播されたトークンを使用します。
以下の例は、security-example.json
ファイルで sayHelloOauth2
操作を定義します。この操作は、clientCredentials
フローで oauth-example
セキュリティースキームを使用します。
トークン伝搬を使用した OpenAPI 仕様の例
{ "openapi": "3.1.0", "info": { "title": "Oauth2 Scheme Example", "version": "1.0" }, "paths": { "/hello-with-oauth2": { "get": { "operationId": "sayHelloOauth2", "responses": { "200": { "description": "OK", "content": { "text/plain": { "schema": { "type": "string" } } } } }, "security": [ { "oauth-example": [] } ] } } }, "components": { "securitySchemes": { "oauth-example": { "type": "oauth2", "flows": { "clientCredentials": { "authorizationUrl": "https://example.com/oauth", "tokenUrl": "https://example.com/oauth/token", "scopes": {} } } } } } }
{
"openapi": "3.1.0",
"info": {
"title": "Oauth2 Scheme Example",
"version": "1.0"
},
"paths": {
"/hello-with-oauth2": {
"get": {
"operationId": "sayHelloOauth2",
"responses": {
"200": {
"description": "OK",
"content": {
"text/plain": {
"schema": {
"type": "string"
}
}
}
}
},
"security": [
{
"oauth-example": []
}
]
}
}
},
"components": {
"securitySchemes": {
"oauth-example": {
"type": "oauth2",
"flows": {
"clientCredentials": {
"authorizationUrl": "https://example.com/oauth",
"tokenUrl": "https://example.com/oauth/token",
"scopes": {}
}
}
}
}
}
}
4.1.7.1. 認可トークン伝搬でサポートされている設定プロパティー
以下の設定キーを使用して、トークンの伝搬を有効にしてカスタマイズできます。
トークンは、ワークフローがアクティブなときに自動的にダウンストリームサービスに渡されます。ワークフローがタイマーやイベントベースの一時停止などの待機状態になると、トークンの伝搬が停止します。ワークフローを再開した後、トークンは自動的に再取得されません。必要に応じて再認証を管理する必要があります。
プロパティーキー | 例 | 説明 |
---|---|---|
|
|
指定のスキームでセキュア化されたすべての操作に対してトークンの伝搬を有効にします。デフォルトは |
|
| (オプション)デフォルトの Authorization ヘッダーをカスタムヘッダー名でオーバーライドし、トークンの読み取りを行います。 |
[filename]
は、サニタイズされた OpenAPI ファイル名 security_example_json
に、[security_scheme_name]
は、サニタイズされたスキーム名 oauth_example
に置き換えることができます。
4.2. OAuth 2.0 を使用したサードパーティーサービスの認証
OAuth 2.0 でセキュリティーを確保した REST サービスでインタラクションをオーケストレートするワークフローを実装および設定できます。
第5章 サポートサービス
5.1. Job サービス
Job サービスは、クラウド環境でタスクをスケジュールして実行します。独立したサービスがこれらのタスクを実装し、HTTP 呼び出しや Knative イベント配信など、サポートされている任意の対話モードを通じて開始できます。
OpenShift Serverless Logic では、Job サービスはタイムトリガーアクションの実行を制御します。したがって、ワークフローで使用できる時間ベースの状態はすべて、ワークフローと Job サービス間の対話によって処理されます。
たとえば、ワークフローの実行が、設定されたタイムアウトのある状態に到達し、対応するジョブが Job サービスに作成されます。タイムアウトに達すると、HTTP コールバックが実行されてワークフローに通知します。
Job サービスの主な目的は、実行する必要のあるスケジュールされたジョブなどのアクティブなジョブを管理することです。ジョブが最終状態になると、Job サービスはそれを削除します。ジョブ情報を永続的なリポジトリーに保持するために、Job サービスは、Data Index Service などの外部サービスで記録できるステータス変更イベントを生成します。
OpenShift Serverless Operator を使用してワークフローをデプロイする場合は、Job サービスを手動でインストールしたり、設定したりする必要はありません。Operator はこれらのタスクを自動的に処理し、各ワークフローがこれに接続するために必要な設定をすべて管理します。
5.1.1. Job サービスリーダーの選出プロセス
Job サービスはシングルトンサービスとして動作します。つまり、1 つのアクティブなインスタンスのみが、ジョブをスケジュールおよび実行できることを意味します。
複数のインスタンスが実行されている可能性のあるクラウドにサービスがデプロイされる際の競合を防ぐために、Job サービスはリーダー選出プロセスをサポートします。リーダーとして選出されたインスタンスのみが、ジョブを受信およびスケジュールするために外部通信を管理します。
リーダー以外のインスタンスは、スタンバイ状態で非アクティブのままになりますが、選出プロセスを通じてリーダーになる試みは継続されます。新しいインスタンスの起動時に、リーダーシップがすぐには想定されるわけではありません。代わりに、リーダーの選出プロセスを入力して、リーダーロールを引き継ぐことが可能か判断します。
現在のリーダーが応答しなくなったり、シャットダウンしたりした場合に、実行中の別のインスタンスがリーダーとして引き継ぎます。
このリーダー選出メカニズムでは、基盤となる永続バックエンドが使用されます。これは現在、PostgreSQL 実装でのみサポートされています。
5.2. Data Index サービス
Data Index サービスは、ワークフローインスタンスとそれに関連付けられたジョブに関連するデータを保存する専用のサポートサービスです。このサービスは、GraphQL エンドポイントを提供します。これにより、ユーザーはそのデータをクエリーできます。
Data Index サービスは、イベントを介して受信するデータを処理します。このイベントは、任意のワークフローから、または直接 Job サービスから発生する場合があります。
Data Index は、ワークフローからの CloudEvents メッセージを消費する Apache Kafka または Knative Eventing をサポートします。このイベントデータをインデックス化してデータベースに格納し、GraphQL 経由でアクセスできるようにします。これらのイベントは、ワークフロー実行に関する詳細情報を提供します。Data Index サービスは、OpenShift Serverless Logic の検索、インサイトおよび管理機能の中心となります。
Data Index サービスの主な機能は以下のとおりです。
- 柔軟なデータ構造
- 分散可能なクラウド対応形式
- Apache Kafka、Knative、および CloudEvents を介したワークフローとのメッセージベースの通信
- 強力な GraphQL ベースのクエリー API
OpenShift Serverless Operator を使用してワークフローをデプロイする場合は、Data Index サービスを手動でインストールしたり、設定したりする必要はありません。Operator は、各ワークフローがこれに接続するために必要なすべての設定を自動的に管理します。
5.2.1. ワークフローインスタンスとジョブの GraphQL クエリー
ワークフローインスタンスとジョブに関するデータを取得するには、GraphQL クエリーを使用できます。
5.2.1.1. ワークフローインスタンスからのデータの取得
次のクエリー例を使用して、特定のワークフローインスタンスに関する情報を取得できます。
{ ProcessInstances { id processId state parentProcessInstanceId rootProcessId rootProcessInstanceId variables nodes { id name type } } }
{
ProcessInstances {
id
processId
state
parentProcessInstanceId
rootProcessId
rootProcessInstanceId
variables
nodes {
id
name
type
}
}
}
5.2.1.2. ジョブからのデータの取得
以下のクエリー例を使用して、特定のジョブインスタンスからデータを取得できます。
{ Jobs { id status priority processId processInstanceId executionCounter } }
{
Jobs {
id
status
priority
processId
processInstanceId
executionCounter
}
}
5.2.1.3. where パラメーターを使用してクエリーの結果をフィルタリングする
where
パラメーターを使用してクエリーの結果をフィルタリングし、ワークフロー属性に基づいて複数の組み合わせを許可できます。
状態別にフィルタリングするクエリーの例
{ ProcessInstances(where: {state: {equal: ACTIVE}}) { id processId processName start state variables } }
{
ProcessInstances(where: {state: {equal: ACTIVE}}) {
id
processId
processName
start
state
variables
}
}
ID 別にフィルタリングするクエリーの例
{ ProcessInstances(where: {id: {equal: "d43a56b6-fb11-4066-b689-d70386b9a375"}}) { id processId processName start state variables } }
{
ProcessInstances(where: {id: {equal: "d43a56b6-fb11-4066-b689-d70386b9a375"}}) {
id
processId
processName
start
state
variables
}
}
デフォルトでは、フィルターは AND Operator を使用して組み合わせています。この動作は、フィルターを AND Operator または OR Operator と組み合わせることで変更できます。
フィルターを OR Operator と組み合わせるクエリーの例
{ ProcessInstances(where: {or: {state: {equal: ACTIVE}, rootProcessId: {isNull: false}}}) { id processId processName start end state } }
{
ProcessInstances(where: {or: {state: {equal: ACTIVE}, rootProcessId: {isNull: false}}}) {
id
processId
processName
start
end
state
}
}
フィルターを AND Operator および OR Operator と組み合わせるクエリーの例
{ ProcessInstances(where: {and: {processId: {equal: "travels"}, or: {state: {equal: ACTIVE}, rootProcessId: {isNull: false}}}}) { id processId processName start end state } }
{
ProcessInstances(where: {and: {processId: {equal: "travels"}, or: {state: {equal: ACTIVE}, rootProcessId: {isNull: false}}}}) {
id
processId
processName
start
end
state
}
}
属性タイプに応じて、次の使用可能な Operator を使用できます。
属性タイプ | 利用可能な演算子 |
---|---|
String array |
|
String |
|
ID |
|
Boolean |
|
数値 |
|
Date |
|
5.2.1.4. orderBy パラメーターを使用してクエリー結果をソートする
orderBy
パラメーターを使用して、ワークフロー属性に基づいてクエリー結果をソートできます。昇順 (ASC
) または降順 (DESC
) でソート順序を指定することもできます。指定した順序で複数の属性が適用されます。
開始時刻を ASC
順序でソートするクエリーの例
{ ProcessInstances(where: {state: {equal: ACTIVE}}, orderBy: {start: ASC}) { id processId processName start end state } }
{
ProcessInstances(where: {state: {equal: ACTIVE}}, orderBy: {start: ASC}) {
id
processId
processName
start
end
state
}
}
5.2.1.5. pagination パラメーターを使用して結果の数を制限する
pagination
パラメーターを使用して、返される結果の数を制御し、オフセットを指定できます。
オフセット 0 から始まる結果を 10 に制限するクエリーの例
{ ProcessInstances(where: {state: {equal: ACTIVE}}, orderBy: {start: ASC}, pagination: {limit: 10, offset: 0}) { id processId processName start end state } }
{
ProcessInstances(where: {state: {equal: ACTIVE}}, orderBy: {start: ASC}, pagination: {limit: 10, offset: 0}) {
id
processId
processName
start
end
state
}
}
5.3. サポートサービスの管理
このセクションでは、OpenShift Serverless Logic に不可欠なサポートサービスの概要を説明します。これは、OpenShift Serverless Logic Operator を使用した Data Index サービスおよび Job Service のサポートサービスの設定およびデプロイに重点を置いています。
通常の OpenShift Serverless Logic インストールでは、ワークフローの実行が正常に実行されるように両方のサービスをデプロイする必要があります。Data Index サービスを使用すると、効率的なデータ管理が可能になりますが、Job Service は信頼性の高いジョブ処理を実現します。
5.3.1. サポートサービスとワークフローのインテグレーション
サポートサービスを特定の namespace にデプロイする場合、有効または無効のデプロイメントを選択できます。有効化されたデプロイメントは、OpenShift Serverless Logic Operator に対し、namespace 内で preview
または gitops
プロファイルを使用するワークフローのデプロイメントを自動的に検出し、それらをサービスに接続するよう設定する指示を送ります。
たとえば、Data Index サービスが有効化されている場合、ステータス変更イベントを送信するようにワークフローが自動的に設定されています。同様に Job Service を有効にすると、ワークフローでタイムアウトが必要なたびにジョブが作成されます。OpenShift Serverless Logic Operator は、イベントを Data Index サービスに送信するように Job Service を設定し、サービス間のシームレスなインテグレーションを容易にします。
OpenShift Serverless Logic Operator はサポートサービスをデプロイするだけでなく、ワークフローが正常に実行されるように他の必要な設定も管理します。これらの設定はすべて自動的に処理されます。SonataFlowPlatform
CR でサポートサービス設定のみを提供する必要があります。
サポートサービスの 1 つだけをデプロイすること、または無効化されたデプロイメントの使用は、高度なユースケースです。標準のインストールでは、スムーズなワークフローを実行するには、両方のサービスを有効にする必要があります。
5.3.2. SonataFlowPlatform CR を使用したサポートサービスのデプロイメント
サポートサービスをデプロイするには、SonataFlowPlatform
カスタムリソース (CR) の spec.services
セクション内で dataIndex
および jobService
サブフィールドを設定します。この設定は、SonataFlowPlatform
CR が適用される際に、各サービスをデプロイするように OpenShift Serverless Logic Operator に指示します。
サービスの各設定は独立して処理され、SonataFlowPlatform
CR の他の設定と共にこれらの設定をカスタマイズできます。
サポートサービスのデプロイは、以下のスキャフォールディングの設定例を参照してください。
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform-example namespace: example-namespace spec: services: dataIndex: enabled: true # Specific configurations for the Data Index Service # might be included here jobService: enabled: true # Specific configurations for the Job Service # might be included here
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
name: sonataflow-platform-example
namespace: example-namespace
spec:
services:
dataIndex:
enabled: true
# Specific configurations for the Data Index Service
# might be included here
jobService:
enabled: true
# Specific configurations for the Job Service
# might be included here
5.3.3. サポートサービスのスコープ
SonataFlowPlatform
カスタムリソース (CR) は、特定の namespace 内でのサポートサービスのデプロイメントを有効にします。つまり、自動的に設定されたサポートサービスとワークフロー通信はすべて、デプロイされたプラットフォームの namespace に制限されます。
この機能は、異なるワークフローセットごとにサポートサービスの個別のインスタンスが必要な場合に特に有用です。たとえば、ワークフローやサポートサービスと共にアプリケーションを分離してデプロイすることで、他のデプロイメントからの独立性を保つことができます。
5.3.4. サポートサービスの永続性設定
OpenShift Serverless Logic のサポートサービスの永続性設定は、環境のニーズに応じて、一時的または PostgreSQL のいずれかの設定になります。一時的な永続性は開発とテストに適していますが、実稼働環境には PostgreSQL 永続性が推奨されます。
5.3.4.1. 一時的な永続性設定
一時的な永続性は、各サービス専用の組み込み PostgreSQL データベースを使用します。OpenShift Serverless Logic Operator は、すべてのサービスの再起動でこのデータベースを再作成し、開発およびテストの目的でのみ適切になるようにします。次の SonataFlowPlatform
CR 以外の追加の設定は必要ありません。
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform-example namespace: example-namespace spec: services: dataIndex: enabled: true # Specific configurations for the Data Index Service # might be included here jobService: enabled: true # Specific configurations for the Job Service # might be included here
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
name: sonataflow-platform-example
namespace: example-namespace
spec:
services:
dataIndex:
enabled: true
# Specific configurations for the Data Index Service
# might be included here
jobService:
enabled: true
# Specific configurations for the Job Service
# might be included here
5.3.4.2. PostgreSQL の永続性設定
PostgreSQL の永続性の場合、クラスターに PostgreSQL サーバーインスタンスをセットアップする必要があります。このインスタンスの管理は、OpenShift Serverless Logic Operator 制御とは独立して維持されます。サポートサービスを PostgreSQL サーバーに接続するには、適切なデータベース接続パラメーターを設定する必要があります。
次の例を使用して、SonataFlowPlatform
CR で PostgreSQL の永続性を設定できます。
PostgreSQL の永続性設定の例
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform-example namespace: example-namespace spec: services: dataIndex: enabled: true persistence: postgresql: serviceRef: name: postgres-example namespace: postgres-example-namespace databaseName: example-database databaseSchema: data-index-schema port: 1234 secretRef: name: postgres-secrets-example userKey: POSTGRESQL_USER passwordKey: POSTGRESQL_PASSWORD jobService: enabled: true persistence: postgresql: # Specific database configuration for the Job Service # might be included here.
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
name: sonataflow-platform-example
namespace: example-namespace
spec:
services:
dataIndex:
enabled: true
persistence:
postgresql:
serviceRef:
name: postgres-example
namespace: postgres-example-namespace
databaseName: example-database
databaseSchema: data-index-schema
port: 1234
secretRef:
name: postgres-secrets-example
userKey: POSTGRESQL_USER
passwordKey: POSTGRESQL_PASSWORD
jobService:
enabled: true
persistence:
postgresql:
# Specific database configuration for the Job Service
# might be included here.
- 1
- PostgreSQL データベースサーバーに接続するためのサービスの名前。
- 2
- オプション: PostgreSQL Service の namespace を定義します。デフォルトは SonataFlowPlatform の namespace です。
- 3
- サポートサービスデータを格納する PostgreSQL データベースの名前を定義します。
- 4
- オプション: サポートサービスデータを格納するためのスキーマを指定します。デフォルト値は
SonataFlowPlatform
名で、接尾辞には-data-index-service
or-jobs-service
が付いています。たとえば、sonataflow-platform-example-data-index-service
などです。 - 5
- オプション: PostgreSQL Service と接続するポート番号。デフォルト値は
5432
です。 - 6
- データベースアクセスのユーザー名およびパスワードが含まれるシークレットの名前を定義します。
- 7
- データベースに接続するためのユーザー名を含むシークレットのキーの名前を定義します。
- 8
- データベースに接続するためのパスワードを含むシークレットのキーの名前を定義します。
それぞれの persistence フィールドを使用して、各サービスの永続性を個別に設定できます。
次のコマンドを実行して、PostgreSQL にアクセスするためのシークレットを作成します。
oc create secret generic <postgresql_secret_name> \ --from-literal=POSTGRESQL_USER=<user> \ --from-literal=POSTGRESQL_PASSWORD=<password> \ -n <namespace>
$ oc create secret generic <postgresql_secret_name> \
--from-literal=POSTGRESQL_USER=<user> \
--from-literal=POSTGRESQL_PASSWORD=<password> \
-n <namespace>
5.3.4.3. 一般的な PostgreSQL の永続性設定
OpenShift Serverless Logic Operator は、サポートサービスを spec.persistence
フィールドで設定された共通の PostgreSQL サーバーに自動的に接続します。
ルールの場合、以下の優先順位が適用されます。
-
サポートするサービス (例:
services.dataIndex.persistence
) に特定の永続性を設定すると、その設定が使用されます。 - サービスに永続性を設定しない場合、システムは現在のプラットフォームから共通の永続性設定を使用します。
共通の PostgreSQL 設定を使用する場合、各サービススキーマは SonataFlowPlatform
名として自動的に設定され、-data-index-service
または -jobs-service
の接尾辞が設定されます (例: sonataflow-platform-example-data-index-service
)。
5.3.5. サポートサービスイベントシステムの設定
OpenShift Serverless Logic インストールの場合、以下のタイプのイベントが生成されます。
- ビジネスロジックのワークフローに関連する発信イベントおよび着信イベント。
- ワークフローから Data Index および Job Service に送信されるイベント。
- Job Service から Data Index Service に送信されるイベント。
OpenShift Serverless Logic Operator は Knative Eventing システムを利用して、これらのイベントとサービス間のすべてのイベント通信を管理し、効率的で信頼性の高いイベント処理を実現します。
5.3.5.1. プラットフォームスコープのイベントシステム設定
プラットフォームスコープのイベントシステムを設定するには、SonataFlowPlatform
CR の spec.eventing.broker.ref
フィールドを使用して、Knative Eventing Broker を参照します。この設定は、指定されたブローカーを使用して、サポートサービスを自動的にリンクし、イベントを生成および消費するように OpenShift Serverless Logic Operator に指示します。
preview
または gitops
プロファイルで同じ namespace にデプロイされ、カスタムのイベントシステム設定がないワークフローは、自動的に指定されたブローカーにリンクされます。
実稼働環境では、Knative Kafka Broker などの実稼働環境対応のブローカーを使用して、スケーラビリティーと信頼性を強化します。
次の例は、プラットフォームスコープのイベントシステムに SonataFlowPlatform
CR を設定する方法を示しています。
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform-example namespace: example-namespace spec: eventing: broker: ref: name: example-broker namespace: example-broker-namespace apiVersion: eventing.knative.dev/v1 kind: Broker
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
name: sonataflow-platform-example
namespace: example-namespace
spec:
eventing:
broker:
ref:
name: example-broker
namespace: example-broker-namespace
apiVersion: eventing.knative.dev/v1
kind: Broker
5.3.5.2. サービススコープのイベントシステム設定
サービススコープのイベントシステム設定により、イベントシステム (特に Data Index または Job Service) を細かく制御できます。
OpenShift Serverless Logic インストールの場合は、プラットフォームスコープのイベントシステム設定の使用を検討してください。サービススコープの設定は、高度なユースケースのみを対象としています。
5.3.5.3. Data Index のイベントシステム設定
Data Index のサービススコープのイベントシステムを設定するには、SonataFlowPlatform
CR の spec.services.dataIndex.source.ref
フィールドを使用して、特定の Knative Eventing Broker を参照する必要があります。この設定は、OpenShift Serverless Logic Operator に対して、その Broker からの SonataFlow システムイベントを消費するように Data Index を自動的にリンクするように指示します。
実稼働環境では、Knative Kafka Broker などの実稼働環境対応のブローカーを使用して、スケーラビリティーと信頼性を強化します。
次の例は、Data Index イベントシステム設定を表示しています。
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform-example spec: services: dataIndex: source: ref: name: data-index-source-example-broker namespace: data-index-source-example-broker-namespace apiVersion: eventing.knative.dev/v1 kind: Broker
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
name: sonataflow-platform-example
spec:
services:
dataIndex:
source:
ref:
name: data-index-source-example-broker
namespace: data-index-source-example-broker-namespace
apiVersion: eventing.knative.dev/v1
kind: Broker
5.3.5.4. Job Service のイベントシステム設定
Job Service 用にサービススコープのイベントシステムを設定するには、SonataFlowPlatform
CR の spec.services.jobService.source.ref
および spec.services.jobService.sink.ref
フィールドを使用する必要があります。これらのフィールドは、指定された設定に基づいて、Job Service を自動的にリンクして SonataFlow システムイベントを消費するように、OpenShift Serverless Logic Operator に指示します。
実稼働環境では、Knative Kafka Broker などの実稼働環境対応のブローカーを使用して、スケーラビリティーと信頼性を強化します。
次の例は、Job Service のイベントシステム設定を表示しています。
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform-example spec: services: jobService: source: ref: name: jobs-service-source-example-broker namespace: jobs-service-source-example-broker-namespace apiVersion: eventing.knative.dev/v1 kind: Broker sink: ref: name: jobs-service-sink-example-broker namespace: jobs-service-sink-example-broker-namespace apiVersion: eventing.knative.dev/v1 kind: Broker
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
name: sonataflow-platform-example
spec:
services:
jobService:
source:
ref:
name: jobs-service-source-example-broker
namespace: jobs-service-source-example-broker-namespace
apiVersion: eventing.knative.dev/v1
kind: Broker
sink:
ref:
name: jobs-service-sink-example-broker
namespace: jobs-service-sink-example-broker-namespace
apiVersion: eventing.knative.dev/v1
kind: Broker
- 1
- Job Service がイベントを消費する Knative Eventing Broker を指定します。
- 2
- オプション: Knative Eventing Broker の namespace を定義します。値を指定しない場合、パラメーターはデフォルトで
SonataFlowPlatform
namespace に設定されます。SonataFlowPlatform
と同じ namespace に Broker を作成することを検討してください。 - 3
- Job Service がイベントを生成する Knative Eventing Broker を指定します。
- 4
- オプション: Knative Eventing Broker の namespace を定義します。値を指定しない場合、パラメーターはデフォルトで
SonataFlowPlatform
namespace に設定されます。SonataFlowPlatform
と同じ namespace に Broker を作成することを検討してください。
5.3.5.5. サポートサービス向けのクラスタースコープのイベントシステム設定
クラスタースコープのサポートサービスをデプロイする場合、サポートサービスは、SonataFlowClusterPlatform
CR によって参照される SonataFlowPlatform
CR で指定された Broker に自動的にリンクされます。
5.3.5.6. サポートサービスの Eventing システム設定の優先度ルール
OpenShift Serverless Logic Operator は定義された優先順位に従って、サポートサービスのイベントシステムを設定します。
Eventing システム設定の優先度ルールは以下のとおりです。
- サポートサービスに、Data Index イベントシステムまたは Job Service イベントシステム設定のいずれかを使用した独自のイベントシステム設定がある場合は、サポートサービスの設定が優先されます。
-
サポートサービスを囲む
SonataFlowPlatform
CR がプラットフォームスコープのイベントシステムで設定されている場合、その設定が優先されます。 - 現在のクラスターがクラスタースコープのイベントシステムで設定されている場合は、その設定が優先されます。
- 以前の設定がいずれも存在しない場合は、サポートサービスは直接 HTTP 呼び出しによってイベントを提供します。
5.3.5.7. Eventing システムのリンク設定
OpenShift Serverless Logic Operator は、サポートサービスをイベントシステムにリンクするために、Knative Eventing、SinkBindings
、およびトリガーを自動的に作成します。これらのオブジェクトにより、サポートサービスによるイベントの生成と消費が可能になります。
次の例は、SonataFlowPlatform
CR 用に作成された Knative Native イベントオブジェクトを示しています。
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform-example namespace: example-namespace spec: eventing: broker: ref: name: example-broker apiVersion: eventing.knative.dev/v1 kind: Broker services: dataIndex: enabled: true jobService: enabled: true
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
name: sonataflow-platform-example
namespace: example-namespace
spec:
eventing:
broker:
ref:
name: example-broker
apiVersion: eventing.knative.dev/v1
kind: Broker
services:
dataIndex:
enabled: true
jobService:
enabled: true
次の例は、SonataFlowPlatform
CR で使用する Knative Kafka Broker を設定する方法を示しています。
SonataFlowPlatform CR によって使用される Knative Kafka Broker の例
apiVersion: eventing.knative.dev/v1 kind: Broker metadata: annotations: eventing.knative.dev/broker.class: Kafka name: example-broker namespace: example-namespace spec: config: apiVersion: v1 kind: ConfigMap name: kafka-broker-config namespace: knative-eventing
apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
annotations:
eventing.knative.dev/broker.class: Kafka
name: example-broker
namespace: example-namespace
spec:
config:
apiVersion: v1
kind: ConfigMap
name: kafka-broker-config
namespace: knative-eventing
- 1
- Kafka クラスを使用して Kafka Knative Broker を作成します。
次のコマンドは、どのサービスがイベントにサブスクライブされているかを示す、Data Index および Job Service イベントにセットアップされたトリガーのリストを表示します。
oc get triggers -n example-namespace
$ oc get triggers -n example-namespace
出力例
NAME BROKER SINK AGE CONDITIONS READY REASON data-index-jobs-fbf285df-c0a4-4545-b77a-c232ec2890e2 example-broker service:sonataflow-platform-example-data-index-service 106s 7 OK / 7 True - data-index-process-definition-e48b4e4bf73e22b90ecf7e093ff6b1eaf example-broker service:sonataflow-platform-example-data-index-service 106s 7 OK / 7 True - data-index-process-error-fbf285df-c0a4-4545-b77a-c232ec2890e2 example-broker service:sonataflow-platform-example-data-index-service 106s 7 OK / 7 True - data-index-process-instance-mul35f055c67a626f51bb8d2752606a6b54 example-broker service:sonataflow-platform-example-data-index-service 106s 7 OK / 7 True - data-index-process-node-fbf285df-c0a4-4545-b77a-c232ec2890e2 example-broker service:sonataflow-platform-example-data-index-service 106s 7 OK / 7 True - data-index-process-state-fbf285df-c0a4-4545-b77a-c232ec2890e2 example-broker service:sonataflow-platform-example-data-index-service 106s 7 OK / 7 True - data-index-process-variable-ac727d6051750888dedb72f697737c0dfbf example-broker service:sonataflow-platform-example-data-index-service 106s 7 OK / 7 True - jobs-service-create-job-fbf285df-c0a4-4545-b77a-c232ec2890e2 example-broker service:sonataflow-platform-example-jobs-service 106s 7 OK / 7 True - jobs-service-delete-job-fbf285df-c0a4-4545-b77a-c232ec2890e2 example-broker service:sonataflow-platform-example-jobs-service 106s 7 OK / 7 True -
NAME BROKER SINK AGE CONDITIONS READY REASON
data-index-jobs-fbf285df-c0a4-4545-b77a-c232ec2890e2 example-broker service:sonataflow-platform-example-data-index-service 106s 7 OK / 7 True -
data-index-process-definition-e48b4e4bf73e22b90ecf7e093ff6b1eaf example-broker service:sonataflow-platform-example-data-index-service 106s 7 OK / 7 True -
data-index-process-error-fbf285df-c0a4-4545-b77a-c232ec2890e2 example-broker service:sonataflow-platform-example-data-index-service 106s 7 OK / 7 True -
data-index-process-instance-mul35f055c67a626f51bb8d2752606a6b54 example-broker service:sonataflow-platform-example-data-index-service 106s 7 OK / 7 True -
data-index-process-node-fbf285df-c0a4-4545-b77a-c232ec2890e2 example-broker service:sonataflow-platform-example-data-index-service 106s 7 OK / 7 True -
data-index-process-state-fbf285df-c0a4-4545-b77a-c232ec2890e2 example-broker service:sonataflow-platform-example-data-index-service 106s 7 OK / 7 True -
data-index-process-variable-ac727d6051750888dedb72f697737c0dfbf example-broker service:sonataflow-platform-example-data-index-service 106s 7 OK / 7 True -
jobs-service-create-job-fbf285df-c0a4-4545-b77a-c232ec2890e2 example-broker service:sonataflow-platform-example-jobs-service 106s 7 OK / 7 True -
jobs-service-delete-job-fbf285df-c0a4-4545-b77a-c232ec2890e2 example-broker service:sonataflow-platform-example-jobs-service 106s 7 OK / 7 True -
Job Service の SinkBinding
リソースを表示するには、以下のコマンドを使用します。
oc get sources -n example-namespace
$ oc get sources -n example-namespace
出力例
NAME TYPE RESOURCE SINK READY sonataflow-platform-example-jobs-service-sb SinkBinding sinkbindings.sources.knative.dev broker:example-broker True
NAME TYPE RESOURCE SINK READY
sonataflow-platform-example-jobs-service-sb SinkBinding sinkbindings.sources.knative.dev broker:example-broker True
5.3.6. 高度なサポートサービス設定
サポートサービス向けに高度な設定を適用する必要がある場合は、SonataFlowPlatform
カスタムリソース (CR) の podTemplate
フィールドを使用します。このフィールドでは、レプリカの数、環境変数、コンテナーイメージ、初期化オプションなどの設定を指定して、サービス Pod のデプロイメントをカスタマイズできます。
次の例を使用して、サービスの高度な設定を行うことができます。
Data Index サービスの高度な設定例
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform-example namespace: example-namespace spec: services: # This can be either 'dataIndex' or 'jobService' dataIndex: enabled: true podTemplate: replicas: 2 container: env: - name: <any_advanced_config_property> value: <any_value> image: initContainers:
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
name: sonataflow-platform-example
namespace: example-namespace
spec:
services:
# This can be either 'dataIndex' or 'jobService'
dataIndex:
enabled: true
podTemplate:
replicas: 2
container:
env:
- name: <any_advanced_config_property>
value: <any_value>
image:
initContainers:
要件に応じて、'services' フィールドを 'dataIndex' または 'jobService' に設定できます。設定の残りの部分は同じままとなります。
podTemplate
フィールドにより、各サポートサービスのデプロイメントを柔軟に調整できます。これは標準の PodSpec
API に準拠します。つまり、同じ API 検証ルールがこれらのフィールドに適用されます。
5.3.7. クラスタースコープのサポートサービス
SonataFlowClusterPlatform
カスタムリソース (CR) を使用して、さまざまな namespace にまたがるワークフローで使用できるクラスター全体のサポートサービスのセットを定義できます。既存の namespace 固有の SonataFlowPlatform
CR を参照すると、これらのサービスの使用をクラスター全体で拡張できます。
次の基本設定の例を使用すると、任意の namespace にデプロイされたワークフローが、example-namespace
などの特定の namespace にデプロイされたサポートサービスを利用できるようになります。
SonataFlowClusterPlatform
CR の例
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowClusterPlatform metadata: name: cluster-platform spec: platformRef: name: sonataflow-platform-example namespace: example-namespace
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowClusterPlatform
metadata:
name: cluster-platform
spec:
platformRef:
name: sonataflow-platform-example
namespace: example-namespace
SonataFlowPlatform.spec.services
でその namespace を設定することにより、これらのクラスター全体のサービスを任意の namespace 内でオーバーライドできます。
第6章 ワークフローサービスの設定
このセクションでは、OpenShift Serverless Logic Operator を使用してワークフローサービスを設定する方法について説明します。本セクションでは、環境やユースケースに応じてワークフローサービスをカスタマイズするために参照できる主要な概念および設定オプションを説明します。ワークフロー設定の編集、特定のプロパティーの管理、およびグローバル管理プロパティーの定義により、ワークフローの一貫性と効率的な実行が可能になります。
6.1. ワークフロー設定の変更
OpenShift Serverless Logic Operator は、ワークフローごとに 2 つの ConfigMap
に基づいてワークフロー設定を決定します。これは ユーザー定義
のプロパティーのワークフローであり、Operator managed-properties
のワークフローです。
-
ユーザー定義のプロパティー: ワークフローに特定の設定が必要な場合は、ワークフローをデプロイする前に、すべての設定が含まれる <
workflow-name>-props
という名前のConfigMap
を作成するようにしてください。たとえば、ワークフロー名がgreeting
の場合、ConfigMap
名はgreeting-managed-props
になります。このようなConfigMap
が存在しない場合、Operator は空またはデフォルトコンテンツを持つワークフローを作成します。 -
マネージドのプロパティー: Operator によって自動生成され、<
workflow-name>-managed-props という名前
のConfigMap
に保存されます。これらのプロパティーは通常、ワークフローの設定に関連します。プロパティーは、サポートサービスやイベント駆動型システムなどに接続します。
管理プロパティーは常に、同じキーを持つユーザー定義のプロパティーを上書きします。これらの管理プロパティーは読み取り専用であり、各調整サイクル中に Operator によってリセットされます。
前提条件
- OpenShift Serverless Logic Operator がクラスターにインストールされている。
- OpenShift Serverless Logic プロジェクトを作成している。
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
-
OpenShift CLI (
oc
) がインストールされている。 -
以前にワークフローの
ユーザー定義
のプロパティーConfigMap
を作成しているか、Operator がそれを作成している。
手順
ターミナルを開き、OpenShift Serverless Logic プロジェクトにアクセスします。ワークフローサービスがデプロイされている正しいプロジェクトである
namespace
内で機能していることを確認します。oc project <your-project-name>
$ oc project <your-project-name>
Copy to Clipboard Copied! 設定するワークフローの名前を特定します。
たとえば、ワークフローの名前が
greeting
の場合、ユーザー定義のプロパティーはgreeting-props
という名前のConfigMap
に保存されます。以下の例に示すコマンドを実行して、ワークフロー
ConfigMap
を編集します。oc edit configmap greeting-props
$ oc edit configmap greeting-props
Copy to Clipboard Copied! greeting
は、ワークフローの実際の名前に置き換えます。application.properties
セクションを変更します。data
セクションを見つけ、希望の設定でapplication.properties
フィールドを更新します。ConfigMap
の例apiVersion: v1 kind: ConfigMap metadata: labels: app: greeting name: greeting-props namespace: default data: application.properties: | my.properties.key = any-value ...
apiVersion: v1 kind: ConfigMap metadata: labels: app: greeting name: greeting-props namespace: default data: application.properties: | my.properties.key = any-value ...
Copy to Clipboard Copied! - プロパティーを更新したら、ファイルを保存してエディターを終了します。更新された設定は自動的に適用されます。
ワークフローランタイムは Quarkus をベースとしているため、application.properties
のすべてのキーは Quarkus プロパティー構文に従う必要があります。形式が無効な場合には、OpenShift Serverless Logic Operator は次の調整サイクル時にデフォルト値で変更を上書きする可能性があります。
検証
変更が正常に適用されたことを確認するには、以下のコマンド例を実行します。
oc get configmap greeting-props -o yaml
$ oc get configmap greeting-props -o yaml
Copy to Clipboard Copied!
6.2. ワークフローサービスの管理プロパティー
OpenShift Serverless Logic Operator は、管理プロパティーを使用して重要なランタイム動作を制御します。これらの値は個別に保存され、調整サイクルごとにユーザー定義のプロパティーが上書きされます。同じ名前空間内の SonataFlowPlatform
リソースを更新して、カスタム管理プロパティーをグローバルに適用することもできます。
OpenShift Serverless Logic Operator で使用される一部のプロパティーは管理プロパティーであり、標準のユーザー設定では変更できません。これらのプロパティーは専用の ConfigMap
に保存されます。通常は < ;workflow-name>-managed-props
という名前です。マネージドプロパティーを直接変更しようとすると、Operator は自動的にこれをデフォルト値に戻しますが、他のユーザー定義の変更は保持されます。
グローバル管理プロパティーを使用して、Operator によって設定されたデフォルトの管理プロパティーを上書きすることはできません。これらのデフォルトは、調整時に常に適用されます。
以下の表は、例としてコア管理プロパティーを示しています。
Property Key | Mtable Value | Profile |
---|---|---|
|
|
|
|
| |
|
|
|
他の管理プロパティーには、Kubernetes サービス検出設定、Data Index の場所プロパティー、Job Service の場所プロパティー、および Knative Eventing システム設定が含まれます。
6.3. global-managed-properties の定義
SonataFlowPlatform
リソースを編集して、特定の名前空間のすべてのワークフローのカスタムグローバル管理プロパティーを定義できます。これらのプロパティーは .spec.properties.flow
属性で定義され、同じ namespace 内のすべてのワークフローサービスに自動的に適用されます。
前提条件
- OpenShift Serverless Logic Operator がクラスターにインストールされている。
- OpenShift Serverless Logic プロジェクトを作成している。
- OpenShift Container Platform でアプリケーションやその他のワークロードを作成するための適切なロールと権限を持つ OpenShift Serverless Logic プロジェクトにアクセスできる。
-
OpenShift CLI (
oc
) がインストールされている。
手順
ワークフローサービスと同じ namespace で
SonataFlowPlatform
リソースを見つけます。ここで、グローバル管理プロパティーを定義します。
以下のコマンドを実行して、デフォルトのエディターで
SonataFlowPlatform
リソースを開きます。oc edit sonataflowplatform sonataflow-platform-example
$ oc edit sonataflowplatform sonataflow-platform-example
Copy to Clipboard Copied! カスタムグローバル管理プロパティーを定義します。
エディターで
spec.properties.flow
セクションに移動し、以下の例のように必要なプロパティーを定義します。フロープロパティーのある SonataFlowPlatform の例
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform-example spec: properties: flow: - name: quarkus.log.category value: INFO
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform-example spec: properties: flow:
1 - name: quarkus.log.category
2 value: INFO
3 Copy to Clipboard Copied! この設定は、
quarkus.log.category=INFO
プロパティーを、namespace のすべてのワークフローサービスの管理プロパティーに追加します。オプション:外部
ConfigMap
またはシークレット
を使用します。以下の例のように、
valueFrom
属性を使用して、既存のConfigMap
またはシークレット
リソースから値を参照することもできます。ConfigMap およびシークレットからの SonataFlowPlatform プロパティーの例
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform-example spec: properties: flow: - name: my.petstore.auth.token valueFrom: secretKeyRef: petstore-credentials keyName: AUTH_TOKEN - name: my.petstore.url valueFrom: configMapRef: petstore-props keyName: PETSTORE_URL
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform-example spec: properties: flow: - name: my.petstore.auth.token valueFrom:
1 secretKeyRef: petstore-credentials
2 keyName: AUTH_TOKEN - name: my.petstore.url valueFrom: configMapRef: petstore-props
3 keyName: PETSTORE_URL
Copy to Clipboard Copied!
第7章 ワークフローの永続性の管理
SonataFlow
インスタンスを設定して、永続性を使用し、ワークフローコンテキストをリレーショナルデータベースに保存することができます。
設計上、Kubernetes Pod はステートレスです。この動作は、Pod の再起動後もアプリケーションの状態を維持する必要があるワークロードに関する課題が生じる可能性があります。OpenShift Serverless Logic の場合、Pod がデフォルトで再起動するとワークフローコンテキストが失われます。
このようなシナリオでワークフローリカバリーを確保するには、ワークフローのランタイムの永続性を設定する必要があります。SonataFlowPlatform
カスタムリソース (CR) または SonataFlow
CR を使用してこの設定を指定します。設定のスコープは使用するリソースによって異なります。
7.1. SonataFlowPlatform CR を使用した永続性の設定
SonataFlowPlatform
カスタムリソース (CR) は、namespace レベルでの永続性設定を有効にします。このアプローチでは、namespace にデプロイされたすべてのワークフローに永続性設定が自動的に適用されます。これにより、特に namespace 内の複数のワークフローが同じアプリケーションに属する場合に、リソース設定が簡素化されます。この設定はデフォルトで適用されますが、namespace 内の個々のワークフローは SonataFlow
CR を使用してこれをオーバーライドできます。
OpenShift Serverless Logic Operator は、この設定を使用してサポートサービスの永続性もセットアップします。
永続性設定は、ワークフローのデプロイメント時にのみ適用されます。SonataFlowPlatform
CR への変更は、すでにデプロイされているワークフローには影響しません。
手順
-
SonataFlowPlatform
CR を定義します。 SonataFlowPlatform
CR 仕様の下にあるpersistence
フィールドに永続性設定を指定します。apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform-example namespace: example-namespace spec: persistence: postgresql: serviceRef: name: postgres-example namespace: postgres-example-namespace databaseName: example-database port: 1234 secretRef: name: postgres-secrets-example userKey: POSTGRESQL_USER passwordKey: POSTGRESQL_PASSWORD
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform-example namespace: example-namespace spec: persistence: postgresql: serviceRef: name: postgres-example
1 namespace: postgres-example-namespace
2 databaseName: example-database
3 port: 1234
4 secretRef: name: postgres-secrets-example
5 userKey: POSTGRESQL_USER
6 passwordKey: POSTGRESQL_PASSWORD
7 Copy to Clipboard Copied! - 1
- PostgreSQL データベースに接続する Kubernetes Service の名前。
- 2
- オプション: PostgreSQL Service の namespace。デフォルトは
SonataFlowPlatform
の namespace です。 - 3
- ワークフローデータを格納する PostgreSQL データベースの名前。
- 4
- オプション: PostgreSQL Service に接続するためのポート番号。デフォルトは
5432
です。 - 5
- データベース認証情報が含まれる Kubernetes シークレットの名前。
- 6
- データベースのユーザー名が含まれる
Secret
オブジェクトのキー。 - 7
- データベースのパスワードが含まれる
Secret
オブジェクトのキー。
ワークフロー用に生成された環境変数を表示します。
次の例は、以前の
SonataFlowPlatform
設定でデプロイされたexample-workflow
という名前のワークフロー用に生成された環境変数を示しています。これらの設定は永続性に特化したもので、OpenShift Serverless Logic Operator によって管理されます。これらの設定は、適用後は変更できません。
SonataFlowPlatform
の永続性を使用する場合、すべてのワークフローは、ワークフロー名と同じ PostgreSQL スキーマ名を使用するように設定されています。
env: - name: QUARKUS_DATASOURCE_USERNAME valueFrom: secretKeyRef: name: postgres-secrets-example key: POSTGRESQL_USER - name: QUARKUS_DATASOURCE_PASSWORD valueFrom: secretKeyRef: name: postgres-secrets-example key: POSTGRESQL_PASSWORD - name: QUARKUS_DATASOURCE_DB_KIND value: postgresql - name: QUARKUS_DATASOURCE_JDBC_URL value: >- jdbc:postgresql://postgres-example.postgres-example-namespace:1234/example-database?currentSchema=example-workflow - name: KOGITO_PERSISTENCE_TYPE value: jdbc
env:
- name: QUARKUS_DATASOURCE_USERNAME
valueFrom:
secretKeyRef:
name: postgres-secrets-example
key: POSTGRESQL_USER
- name: QUARKUS_DATASOURCE_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-secrets-example
key: POSTGRESQL_PASSWORD
- name: QUARKUS_DATASOURCE_DB_KIND
value: postgresql
- name: QUARKUS_DATASOURCE_JDBC_URL
value: >-
jdbc:postgresql://postgres-example.postgres-example-namespace:1234/example-database?currentSchema=example-workflow
- name: KOGITO_PERSISTENCE_TYPE
value: jdbc
この永続性設定が適用されると、OpenShift Serverless Logic Operator は preview
または gitops
プロファイルを使用して、この namespace にデプロイされたすべてのワークフローを設定し、関連する JDBC 接続パラメーターを環境変数として注入して PostgreSQL データベースに接続します。
現在、PostgreSQL は唯一永続性向けにサポートされているデータベースです。
preview
プロファイルを使用した SonataFlow
CR デプロイメントの場合、OpenShift Serverless Logic ビルドシステムには、永続性の有効化に必要な特定の Quarkus エクステンションが自動的に含まれます。これにより、永続性メカニズムとの互換性が確保され、ワークフローのデプロイメントプロセスが合理化されます。
7.2. SonataFlow CR を使用した永続性の設定
SonataFlow
カスタムリソース (CR) は、ワークフロー固有の永続性設定を有効にします。この設定は、SonataFlowPlatform
の永続性がすでに現在の namespace に設定されている場合でも、独立して使用できます。
手順
-
以下の例のように、
SonataFlow
CR 仕様のpersistence
フィールドを使用して永続性を設定します。
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlow metadata: name: example-workflow annotations: sonataflow.org/description: Example Workflow sonataflow.org/version: 0.0.1 spec: persistence: postgresql: serviceRef: name: postgres-example namespace: postgres-example-namespace databaseName: example-database databaseSchema: example-schema port: 1234 secretRef: name: postgres-secrets-example userKey: POSTGRESQL_USER passwordKey: POSTGRESQL_PASSWORD flow:
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlow
metadata:
name: example-workflow
annotations:
sonataflow.org/description: Example Workflow
sonataflow.org/version: 0.0.1
spec:
persistence:
postgresql:
serviceRef:
name: postgres-example
namespace: postgres-example-namespace
databaseName: example-database
databaseSchema: example-schema
port: 1234
secretRef:
name: postgres-secrets-example
userKey: POSTGRESQL_USER
passwordKey: POSTGRESQL_PASSWORD
flow:
- 1
- PostgreSQL データベースサーバーに接続する Kubernetes Service の名前。
- 2
- オプション: PostgreSQL Service を含む namespace。デフォルトはワークフロー namespace です。
- 3
- ワークフローデータが保存される PostgreSQL データベースの名前。
- 4
- オプション: ワークフローデータのデータベーススキーマの名前。デフォルトはワークフロー名です。
- 5
- オプション: PostgreSQL Service に接続するためのポート。デフォルトは
5432
です。 - 6
- データベース認証情報が含まれる Kubernetes シークレットの名前。
- 7
- データベースのユーザー名が含まれる
Secret
オブジェクトのキー。 - 8
- データベースのパスワードが含まれる
Secret
オブジェクトのキー。
この設定は、デプロイ時にワークフローが指定の PostgreSQL データベースサーバーに接続する必要があることを OpenShift Serverless Logic Operator に通知します。OpenShift Serverless Logic Operator は、関連する JDBC 接続パラメーターを環境変数としてワークフローコンテナーに追加します。
現在、PostgreSQL は唯一永続性向けにサポートされているデータベースです。
preview
プロファイルを使用した SonataFlow
CR デプロイメントの場合、OpenShift Serverless Logic ビルドシステムには、永続性を自動的に有効化するために必要な Quarkus エクステンションが含まれています。
7.3. 永続性設定の優先度ルール
SonataFlow
カスタムリソース (CR) の永続性は個別に使用することも、SonataFlowPlatform
CR 永続性と一緒に使用することもできます。SonataFlowPlatform
CR の永続性設定が現在の namespace に存在する場合、以下のルールによって、適用される永続性設定が決まります。
-
SonataFlow
CR に永続性設定が含まれている場合、その設定が優先されワークフローに適用されます。 -
SonataFlow
CR に永続性設定が含まれておらず、spec.persistence
フィールドがない場合、OpenShift Serverless Logic Operator は現在のSonataFlowPlatform
の永続性設定を使用します (存在する場合)。 -
ワークフローの永続性を無効にするには、
SonataFlow
CR でspec.persistence: {}
を明示的に設定します。この設定により、ワークフローはSonataFlowPlatform
CR から永続性設定を継承しません。
7.4. プロファイル固有の永続要件
SonataFlowPlatform
カスタムリソース (CR) と SonataFlow
CR の両方に提供される永続性設定は、preview
および gitops
プロファイルと同じように適用されます。ただし、dev
プロファイルはこれらの設定を完全に無視するため、dev プロファイルでは使用しないでください。
preview
および gitops
プロファイルの主な違いは、ビルドプロセスにあります。
gitops
プロファイルを使用する場合は、ビルドプロセス中に以下の Quarkus エクステンションがワークフローイメージに含まれていることを確認してください。
groupId | artifactId | version |
---|---|---|
|
|
|
|
|
|
|
|
|
registry.redhat.io/openshift-serverless-1/logic-swf-builder-rhel8:1.36.0 を使用してイメージを生成する場合は、以下のビルド引数を渡してこれらの拡張機能を含めることができます。
QUARKUS_EXTENSIONS=io.quarkus:quarkus-agroal:3.15.4.redhat-00001,io.quarkus:quarkus-jdbc-postgresql:3.15.4.redhat-00001,org.kie:kie-addons-quarkus-persistence-jdbc:9.103.0.redhat-00003
$ QUARKUS_EXTENSIONS=io.quarkus:quarkus-agroal:3.15.4.redhat-00001,io.quarkus:quarkus-jdbc-postgresql:3.15.4.redhat-00001,org.kie:kie-addons-quarkus-persistence-jdbc:9.103.0.redhat-00003
7.5. データベーススキーマの初期化
SonataFlow
を PostgreSQL の永続性で使用している場合は、Flyway を有効にするか、Data Definition Language (DDL) スクリプトを使用してデータベーススキーマの更新を手動で適用することで、データベーススキーマを初期化できます。
Flyway は kie-addons-quarkus-flyway
ランタイムモジュールで管理されており、デフォルトでは無効になっています。Flyway を有効にするには、以下のいずれかの方法で設定する必要があります。
7.5.1. ワークフロー ConfigMap での Flyway 設定
ワークフロー ConfigMap
で Flyway を有効化するには、以下のプロパティーを追加します。
ワークフロー ConfigMap
で Flyway を有効化する例
apiVersion: v1 kind: ConfigMap metadata: labels: app: example-workflow name: example-workflow-props data: application.properties: | kie.flyway.enabled = true
apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: example-workflow
name: example-workflow-props
data:
application.properties: |
kie.flyway.enabled = true
7.5.2. ワークフローコンテナーで環境変数を使用した Flyway 設定
次の例を使用して、SonataFlow
CR の spec.podTemplate.container
フィールドに環境変数を追加することで、Flyway を有効化できます。
ワークフローコンテナー環境変数を使用して Flyway を有効化する例
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlow metadata: name: example-workflow annotations: sonataflow.org/description: Example Workflow sonataflow.org/version: 0.0.1 spec: podTemplate: container: env: - name: KIE_FLYWAY_ENABLED value: 'true' flow: ...
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlow
metadata:
name: example-workflow
annotations:
sonataflow.org/description: Example Workflow
sonataflow.org/version: 0.0.1
spec:
podTemplate:
container:
env:
- name: KIE_FLYWAY_ENABLED
value: 'true'
flow: ...
7.5.3. SonataFlowPlatform プロパティーを使用した Flyway 設定
namespace 内のすべてのワークフローに共通の Flyway 設定を適用するには、以下の例に示されている SonataFlowPlatform
CR の spec.properties.flow
フィールドにプロパティーを追加します。
この設定は、ワークフローのデプロイメント中に適用されます。ワークフローをデプロイする前に Flyway プロパティーが設定されていることを確認します。
SonataFlowPlatform
プロパティーを使用して Flyway を有効化する例
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform spec: properties: flow: - name: kie.flyway.enabled value: true
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
name: sonataflow-platform
spec:
properties:
flow:
- name: kie.flyway.enabled
value: true
7.5.4. DDL スクリプトを使用した手動データベースの初期化
手動の初期化が必要な場合は、kie.flyway.enabled
プロパティーが未設定であるか、明示的に false
に設定されていることを確認して、Flyway を無効化する必要があります。
- デフォルトでは、各ワークフローはワークフロー名と同じスキーマ名を使用します。各ワークフローにスキーマの初期化を手動で適用してください。
-
SonataFlow
カスタムリソース (CR) の永続性設定を使用している場合は、カスタムスキーマ名を指定できます。
手順
- kogito-ddl-9.103.0.redhatApns-db-scripts.zip の場所から DDL スクリプト をダウンロードします。
- ファイルをデプロイメントします。
ターゲットである PostgreSQL データベースの root ディレクトリーにある
.sql
ファイルを実行します。ファイルがバージョン番号の順序で実行されることを確認してください。以下に例を示します。
-
V1.35.0__create_runtime_PostgreSQL.sql
-
V10.0.0__add_business_key_PostgreSQL.sql
V10.0.1__alter_correlation_PostgreSQL.sql
注記ファイルバージョン番号は、OpenShift Serverless Logic Operator のバージョン管理に関連付けられていません。
-
第8章 ワークフローのイベントシステム
SonataFlow
ワークフローのイベントシステムをセットアップできます。
OpenShift Serverless Logic のインストールでは、以下のタイプのイベントが生成されます。
- ビジネスロジックのワークフローに関連する発信イベントおよび着信イベント。
- ワークフローから Data Index および Job Service に送信されるイベント。
- Job Service から Data Index Service に送信されるイベント。
OpenShift Serverless Logic Operator は Knative Eventing システムを利用して、これらのサービス間のすべてのイベント通信を管理し、効率的で信頼性の高いイベント処理を実現します。
8.1. プラットフォームスコープのイベントシステム設定
プラットフォームスコープのイベントシステムを設定するには、SonataFlowPlatform
カスタムリソース (CR) の spec.eventing.broker.ref
フィールドを使用して、Knative Eventing Broker を参照します。
この設定は、preview
または gitops
プロファイルを使用して、指定された namespace にデプロイされたすべてのワークフローを自動的にリンクするように OpenShift Serverless Logic Operator に指示します。これにより、定義されたブローカーを使用してイベントを生成および消費できます。
カスタムイベント設定なしで namespace にデプロイされたサポートサービスもこのブローカーにリンクされます。
実稼働環境では、Knative Kafka Broker などの実稼働環境対応のブローカーを使用して、スケーラビリティーと信頼性を強化します。
次の例は、プラットフォームスコープのイベントシステムに SonataFlowPlatform
CR を設定する方法を示しています。
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform-example namespace: <example-namespace> spec: eventing: broker: ref: name: example-broker namespace: <example-broker-namespace> apiVersion: eventing.knative.dev/v1 kind: Broker
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
name: sonataflow-platform-example
namespace: <example-namespace>
spec:
eventing:
broker:
ref:
name: example-broker
namespace: <example-broker-namespace>
apiVersion: eventing.knative.dev/v1
kind: Broker
8.2. ワークフロースコープのイベントシステム設定
ワークフロースコープのイベントシステム設定を使用すると、特定のワークフローで生成および消費されるイベントの詳細なカスタマイズが可能になります。SonataFlow
CR の spec.sink.ref
および spec.sources[]
フィールドを使用して、発信および着信イベントを設定できます。
8.2.1. 発信イベントシステムの設定
発信イベントを設定するには、SonataFlow
CR の spec.sink.ref
フィールドを使用できます。この設定により、ワークフローは、指定された Knative Eventing Broker を使用して、システムイベントとワークフローのビジネスイベントの両方を含むイベントを生成するようになります。
次の例は、ワークフロースコープの発信イベントシステムの SonataFlow
CR を設定する方法を示しています。
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlow metadata: name: example-workflow namespace: example-workflow-namespace annotations: sonataflow.org/description: Example Workflow sonataflow.org/version: 0.0.1 sonataflow.org/profile: preview spec: sink: ref: name: outgoing-example-broker namespace: outgoing-example-broker-namespace apiVersion: eventing.knative.dev/v1 kind: Broker flow: start: ExampleStartState events: - name: outEvent1 source: '' kind: produced type: out-event-type1 ...
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlow
metadata:
name: example-workflow
namespace: example-workflow-namespace
annotations:
sonataflow.org/description: Example Workflow
sonataflow.org/version: 0.0.1
sonataflow.org/profile: preview
spec:
sink:
ref:
name: outgoing-example-broker
namespace: outgoing-example-broker-namespace
apiVersion: eventing.knative.dev/v1
kind: Broker
flow:
start: ExampleStartState
events:
- name: outEvent1
source: ''
kind: produced
type: out-event-type1
...
- 1
- SonataFlow システムイベントを含む、ワークフローによって生成されるすべてのイベントに使用する Knative Eventing Broker の名前。
- 2
- Knative Eventing Broker の namespace を定義します。値を指定しない場合、パラメーターはデフォルトで
SonataFlow
namespace に設定されます。SonataFlow
と同じ namespace にブローカーを作成することを検討してください。 - 3
SonataFlow
CR の Flow 定義フィールド。- 4
SonataFlow
CR のイベント定義フィールド。- 5
- 発信イベント
outEvent1
定義の例。 - 6
outEvent1
発信イベントのイベントタイプ。
8.2.2. 着信イベントシステム設定
着信イベントを設定するには、SonataFlow
CR の spec.sources[]
フィールドを使用します。特定の設定を必要とする各イベントタイプのエントリーを追加できます。このセットアップにより、ワークフローはイベントタイプに基づいて異なるブローカーからのイベントを消費できるようになります。
着信イベントタイプに特定の Broker 設定がない場合、システムはイベントシステム設定の優先度ルールを適用します。
次の例は、ワークフロースコープの着信イベントシステムの SonataFlow
CR を設定する方法を示しています。
spec.sources[]
エントリーとワークフローイベント間のリンクには、イベントタイプが使用されます。
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlow metadata: name: example-workflow namespace: example-workflow-namespace annotations: sonataflow.org/description: Example Workflow sonataflow.org/version: 0.0.1 sonataflow.org/profile: preview spec: sources: - eventType: in-event-type1 ref: name: incoming-example-broker1 namespace: incoming-example-broker1-namespace apiVersion: eventing.knative.dev/v1 kind: Broker - eventType: in-event-type2 ref: name: incoming-example-broker2 namespace: incoming-example-broker2-namespace apiVersion: eventing.knative.dev/v1 kind: Broker flow: start: ExampleStartState events: - name: inEvent1 source: '' kind: consumed type: in-event-type1 - name: inEvent2 source: '' kind: consumed type: in-event-type2 ...
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlow
metadata:
name: example-workflow
namespace: example-workflow-namespace
annotations:
sonataflow.org/description: Example Workflow
sonataflow.org/version: 0.0.1
sonataflow.org/profile: preview
spec:
sources:
- eventType: in-event-type1
ref:
name: incoming-example-broker1
namespace: incoming-example-broker1-namespace
apiVersion: eventing.knative.dev/v1
kind: Broker
- eventType: in-event-type2
ref:
name: incoming-example-broker2
namespace: incoming-example-broker2-namespace
apiVersion: eventing.knative.dev/v1
kind: Broker
flow:
start: ExampleStartState
events:
- name: inEvent1
source: ''
kind: consumed
type: in-event-type1
- name: inEvent2
source: ''
kind: consumed
type: in-event-type2
...
- 1
- 指定された Knative Eventing Broker を使用して
in-event-type1
タイプのイベントを消費するようにワークフローを設定します。 - 2
- このワークフローに送信された
in-event-type1
タイプのイベントを消費するために使用する Knative Eventing Broker の名前。 - 3
- オプション: 値を指定しない場合、パラメーターはデフォルトで
SonataFlow
namespace に設定されます。SonataFlow
ワークフローと同じ namespace にブローカーを作成することを検討してください。 - 4
- 指定された Knative Eventing Broker を使用して
in-event-type2
タイプのイベントを消費するようにワークフローを設定します。 - 5
- このワークフローに送信された
in-event-type2
タイプのイベントを消費するために使用する Knative Eventing Broker の名前。 - 6
- オプション: 値を指定しない場合、パラメーターはデフォルトで
SonataFlow
namespace に設定されます。SonataFlow
ワークフローと同じ namespace にブローカーを作成することを検討してください。 - 7
SonataFlow
CR の Flow 定義フィールド。- 8
SonataFlow
CR のイベント定義フィールド。- 9
- 着信イベント
inEvent1
定義の例。 - 10
- 着信イベント
inEvent1
のイベントタイプ。対応するspec.sources[]
エントリーを含むワークフローイベントのリンクは、イベントタイプ名in-event-type1
を使用します。 - 11
- 着信イベント
inEvent2
定義の例。 - 12
- 着信イベント
inEvent2
のイベントタイプ。対応する spec.sources[] エントリーを含むワークフローイベントのリンクは、イベントタイプ名 in-event-type2 を使用して作成されます。
8.3. クラスタースコープのイベントシステム設定
SonataFlowClusterPlatform
セットアップでは、ワークフローは関連付けられた SonataFlowPlatform
CR で指定された Broker に自動的にリンクされます。このリンクは、Eventing System 設定の優先度ルールに従います。
適切なインテグレーションを確保するには、SonataFlowClusterPlatform
CR によって参照される SonataFlowPlatform
CR に Broker
を設定できます。
次の例は、SonataFlowClusterPlatform
CR とその SonataFlowPlatform
CR への参照を設定する方法を示しています。
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: global-platform namespace: global-namespace spec: eventing: broker: ref: name: global-broker namespace: global-namespace apiVersion: eventing.knative.dev/v1 kind: Broker --- apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowClusterPlatform metadata: name: cluster-platform-example spec: platformRef: name: global-platform namespace: global-namespace ...
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
name: global-platform
namespace: global-namespace
spec:
eventing:
broker:
ref:
name: global-broker
namespace: global-namespace
apiVersion: eventing.knative.dev/v1
kind: Broker
---
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowClusterPlatform
metadata:
name: cluster-platform-example
spec:
platformRef:
name: global-platform
namespace: global-namespace
...
SonataFlowClusterPlatform
CR はすでにデプロイされている任意の SonataFlowPlatform
CR を参照できます。
8.4. Eventing システム設定の優先度ルール
OpenShift Serverless Logic Operator は、定義された優先順位に従って、ワークフローのイベントシステム設定を判別します。
Eventing システム設定の優先度ルールは以下のとおりです。
- ワークフロースコープの発信または着信イベントシステム設定のいずれかを使用して、定義されたイベントシステムがワークフローにある場合、選択した設定は他の設定よりも優先され、ワークフローに適用されます。
-
ワークフローを含む
SonataFlowPlatform
CR にプラットフォームスコープのイベントシステムが設定されている場合、この設定は次のステップに適用されます。 - 現在のクラスターがクラスタースコープのイベントシステムで設定されている場合は、ワークフロースコープまたはプラットフォームスコープの設定が存在しない場合に適用されます。
上記のいずれの設定も定義されていない場合は、以下の情報を確認してください。
- ワークフローでは、直接 HTTP 呼び出しを使用して、SonataFlow システムイベントをサポートサービスに提供します。
-
ワークフローは、ワークフローサービスの root パス
/
で HTTP POST 呼び出しによる着信イベントを消費します。 - ワークフローのビジネスイベントを生成するイベントシステムは設定されていません。このようなイベントを生成しようとしても、失敗する可能性があります。
8.5. イベントシステムへのワークフローのリンク
OpenShift Serverless Logic Operator は、Knative Eventing、SinkBinding、およびトリガーを使用してイベントシステムとワークフローをリンクします。これらのオブジェクトは OpenShift Serverless Logic Operator によって自動的に作成され、ワークフローイベントの生成および消費を単純化します。
以下の例は、プラットフォームスコープのイベントシステムで設定された example-workflow
ワークフロー用に作成された Knative Eventing オブジェクトを示しています。
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlowPlatform metadata: name: sonataflow-platform-example namespace: example-namespace spec: eventing: broker: ref: name: example-broker apiVersion: eventing.knative.dev/v1 kind: Broker services: dataIndex: enabled: true jobService: enabled: true ...
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlowPlatform
metadata:
name: sonataflow-platform-example
namespace: example-namespace
spec:
eventing:
broker:
ref:
name: example-broker
apiVersion: eventing.knative.dev/v1
kind: Broker
services:
dataIndex:
enabled: true
jobService:
enabled: true
...
example-broker
オブジェクトは Kafka クラス Broker で、その設定は kafka-broker-config
config map で定義されます。
次の例は、SonataFlowPlatform で使用する Kafka Knative Broker を設定する方法を示しています。
apiVersion: eventing.knative.dev/v1 kind: Broker metadata: annotations: eventing.knative.dev/broker.class: Kafka name: example-broker namespace: example-namespace spec: config: apiVersion: v1 kind: ConfigMap name: kafka-broker-config namespace: knative-eventing
apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
annotations:
eventing.knative.dev/broker.class: Kafka
name: example-broker
namespace: example-namespace
spec:
config:
apiVersion: v1
kind: ConfigMap
name: kafka-broker-config
namespace: knative-eventing
- 1
- Kafka クラスは、
example-broker
オブジェクトの作成に使用されます。
以下の例は、イベントの生成および消費用に、example-workflow
が example-namespace
の example-broker
に自動的にリンクされる方法を示しています。
apiVersion: sonataflow.org/v1alpha08 kind: SonataFlow metadata: name: example-workflow namespace: example-namespace annotations: sonataflow.org/description: Example Workflow sonataflow.org/version: 0.0.1 sonataflow.org/profile: preview spec: flow: start: ExampleStartState events: - name: outEvent1 source: '' kind: produced type: out-event-type1 - name: inEvent1 source: '' kind: consumed type: in-event-type1 - name: inEvent2 source: '' kind: consumed type: in-event-type2 states: - name: ExampleStartState ...
apiVersion: sonataflow.org/v1alpha08
kind: SonataFlow
metadata:
name: example-workflow
namespace: example-namespace
annotations:
sonataflow.org/description: Example Workflow
sonataflow.org/version: 0.0.1
sonataflow.org/profile: preview
spec:
flow:
start: ExampleStartState
events:
- name: outEvent1
source: ''
kind: produced
type: out-event-type1
- name: inEvent1
source: ''
kind: consumed
type: in-event-type1
- name: inEvent2
source: ''
kind: consumed
type: in-event-type2
states:
- name: ExampleStartState
...
以下のコマンドを使用して、example-workflow-sb
という名前の自動作成された SinkBinding
をリスト表示できます。
oc get sinkbindings -n example-namespace
$ oc get sinkbindings -n example-namespace
出力例
NAME TYPE RESOURCE SINK READY example-workflow-sb SinkBinding sinkbindings.sources.knative.dev broker:example-broker True
NAME TYPE RESOURCE SINK READY
example-workflow-sb SinkBinding sinkbindings.sources.knative.dev broker:example-broker True
以下のコマンドを使用して、イベント消費用に自動作成されたトリガーをリスト表示できます。
oc get triggers -n <example-namespace>
$ oc get triggers -n <example-namespace>
出力例
NAME BROKER SINK AGE CONDITIONS READY REASON example-workflow-inevent1-b40c067c-595b-4913-81a4-c8efa980bc11 example-broker service:example-workflow 16m 7 OK / 7 True example-workflow-inevent2-b40c067c-595b-4913-81a4-c8efa980bc11 example-broker service:example-workflow 16m 7 OK / 7 True
NAME BROKER SINK AGE CONDITIONS READY REASON
example-workflow-inevent1-b40c067c-595b-4913-81a4-c8efa980bc11 example-broker service:example-workflow 16m 7 OK / 7 True
example-workflow-inevent2-b40c067c-595b-4913-81a4-c8efa980bc11 example-broker service:example-workflow 16m 7 OK / 7 True