6.6. カスタム関数
OpenShift Serverless Logic は custom
関数タイプをサポートしており、これにより実装で関数定義機能を拡張できるようになります。operation
文字列と組み合わせることで、定義済みの関数タイプのリストを使用できます。
カスタム関数型は、他のランタイム実装間で移植できない可能性があります。
6.6.1. sysout カスタム関数
以下の例のように、sysout
関数をロギングに使用できます。
sysout
関数定義の例
{ "functions": [ { "name": "logInfo", "type": "custom", "operation": "sysout:INFO" } ] }
:
の後の文字列はオプションであり、ログレベルを示すために使用されます。使用可能な値は TRACE
、DEBUG
、INFO
、WARN
、および ERROR
です。値が存在しない場合は、INFO
がデフォルトになります。
state
定義では、次の例に示すように、同じ sysout
関数を呼び出すことができます。
状態内の sysout
関数参照の例
{ "states": [ { "name": "myState", "type": "operation", "actions": [ { "name": "printAction", "functionRef": { "refName": "logInfo", "arguments": { "message": "\"Workflow model is \\(.)\"" } } } ] } ] }
上記の例では、message
引数は、補間を使用した jq 式または jq 文字列にすることができます。
6.6.2. Java カスタム関数
OpenShift Serverless Logic は、ワークフローサービスを定義する Apache Maven プロジェクト内の Java
関数をサポートします。
次の例は、Java
関数の宣言を示しています。
Java
関数宣言の例
{ "functions": [ { "name": "myFunction", 1 "type": "custom", 2 "operation": "service:java:com.acme.MyInterfaceOrClass::myMethod" 3 } ] }
6.6.3. Knative カスタム関数
OpenShift Serverless Logic は knative-serving
アドオンを通じてカスタム関数の実装を提供し、Knative サービスを起動します。これにより、HTTP リクエストの実行に使用される、Knative サービスを定義する静的 URI を取得できるようになります。URI で定義された Knative サービスは、現在の Knative クラスターでクエリーされ、有効な URL に変換されます。
次の例では、デプロイされた Knative サービスを使用します。
$ kn service list NAME URL LATEST AGE CONDITIONS READY REASON custom-function-knative-service http://custom-function-knative-service.default.10.109.169.193.sslip.io custom-function-knative-service-00001 3h16m 3 OK / 3 True
以下の例のように、Knative サービス名を使用して OpenShift Serverless Logic カスタム関数を宣言できます。
"functions": [ { "name": "greet", 1 "type": "custom", 2 "operation": "knative:services.v1.serving.knative.dev/custom-function-knative-service?path=/plainJsonFunction", 3 } ]
この関数は POST
リクエストを送信します。パスを指定しない場合、OpenShift Serverless Logic はルートパス (/) を使用します。演算で method=GET
を設定して GET
リクエストを送信することもできます。この場合、引数はクエリー文字列を介して転送されます。
6.6.4. REST カスタム関数
OpenShift Serverless Logic は、ショートカットとして REST
カスタムタイプを提供します。カスタム REST を使用する場合は、関数定義で、呼び出す HTTP URI と使用する HTTP メソッド (get、post、patch、または put) を指定します。これは、operation
文字列を使用して行います。関数が呼び出されるとき、OpenAPI 関数を使用する場合と同じように、リクエスト引数を渡します。
次の例は、REST
関数の宣言を示しています。
{ "functions": [ { "name": "multiplyAllByAndSum", 1 "type": "custom", 2 "operation": "rest:post:/numbers/{multiplier}/multiplyByAndSum" 3 } ] }
相対エンドポイントを使用する場合は、ホストをプロパティーとして指定する必要があります。ホストプロパティーの形式は kogito.sw.functions.<function_name>
.host です。この例では、kogito.sw.functions.multiplyAllByAndSum.host
がホストプロパティーキーです。必要に応じて、kogito.sw.functions.multiplyAllAndSum.port
プロパティーを指定して、デフォルトのポート (80) を上書きできます。
このエンドポイントは、numbers
フィールドが整数の配列である JSON オブジェクトを本体として受け取り、配列内の各項目を multiplier
で乗算し、乗算されたすべての項目の合計を返します。