DataService Studio のサービスオーケストレーション機能は、ワークフローを構築するための視覚的なドラッグアンドドロップインターフェイスを提供します。お客様のビジネスロジックに合わせて、複数の API や関数を順次、並列、分岐構造でワークフローに配置できます。
前提条件
-
サービスオーケストレーション機能には、DataWorks Enterprise Edition 以降のバージョンが必要です。詳細については、「エディションと課金」をご参照ください。
-
サービスオーケストレーション機能は、中国 (上海) リージョンでのみ利用可能です。この機能は現在アップグレード中であり、一時的に利用できません。ご不便をおかけいたしますが、ご了承ください。
背景情報
Service arrangement API サービスを呼び出すと、システムは設定されたサービスノードを順次実行し、それらの間でパラメーターを渡し、状態遷移を自動的に管理します。サービスオーケストレーション機能は、複数のサービスを組み合わせる際の開発および運用保守コストを大幅に削減し、お客様がビジネスロジックに集中できるようにします。
サービスオーケストレーションには、以下の利点があります。
-
API 開発コストの削減
視覚的なドラッグアンドドロップインターフェイスでワークフローを構築します。追加のコードを記述することなく、API 呼び出しを順次、並列、または分岐構造で配置できるため、開発コストが大幅に削減されます。
-
サービス呼び出しパフォーマンスの向上
同じコンテナインスタンス内で複数の API または関数呼び出しを実行すると、独自のワークフローサービスを構築する場合と比較してネットワークオーバーヘッドが削減され、パフォーマンスが大幅に向上します。
-
サーバーレスアーキテクチャ
サービスオーケストレーションは、auto scaling を備えたサーバーレスアーキテクチャを使用します。基盤となる実行環境を管理する必要がないため、ビジネスロジックのみに集中できます。
入出力ルール
DataService Studio は JSONPath を使用してパラメーター値を取得します。JSONPath は、JSON ドキュメントからデータを抽出するための式言語です。詳細については、公式の JSONPath ドキュメントをご参照ください。
たとえば、A、B、C の 3 つのノードが順に並んでいるとします。ノード C は、ノード A とノード B の両方の出力にアクセスする必要があります。
-
ノード A の出力: {"namea":"valuea"}。
ノード A の出力にアクセスするには、${A.namea} を使用します。
-
ノード B の出力: {"nameb":"valueb"}。
ノード B の出力にアクセスするには、$.nameb または ${B.nameb} を使用します。
システムには、ワークフローの初期入力パラメーターを提供する組み込みの 開始ノード が含まれています。たとえば、ワークフローの入力が {"namewf":"valuewf"} の場合、どのノードも式 ${START.namewf} を使用してこの値にアクセスできます。
開始ノード と 終了ノード は組み込みのシステムノードです。名前の変更は可能ですが、削除はできません。開始ノード は、ワークフローの最初のステップ、つまりノード 0 です。
パラメーター
-
ワークフローリクエストパラメーター
サービスオーケストレーション編集ページの右側にある Request Parameters をクリックし、Add manually または Automatic analysis を選択してリクエストパラメーターを設定します。
-
Add manually: Add Parameter をクリックして、ワークフローのリクエストパラメーターを追加します。
-
Automatic analysis: ワークフローの最初のノードが API ノードの場合、Automatically parse request parameters をクリックして、API のリクエストパラメーターをワークフローにマッピングします。
-
-
API ノードのリクエストパラメーター
API ノードをクリックし、表示されるパネルで Input Request Parameters をクリックして、リクエストパラメーターの値を設定します。
-
デフォルトでは、システムは名前ベースのマッピングを実行し、前のノードの JSON 出力の最上位レベルにある同じ名前のフィールドとパラメーターを照合します。
説明現在のノードがワークフローの最初のノードである場合、そのパラメーターはワークフローのメインリクエストパラメーターから名前でマッピングされます。
-
パラメーター値を設定した場合、システムは指定した値を使用します。
説明現在のノードのパラメーター値を、指定された上流ノードの特定のパラメーター値に設定するには、JSONPath 式を使用する必要があります。
-
-
API ノードのレスポンスパラメーター
API ノードをクリックし、set output results チェックボックスをオンにして、JSONPath 式を使用して出力をカスタマイズします。例:
{ "return1":"$.data.rows.user_id", "return2":"$.data.rows.user_name" } -
Python ノードのリクエストパラメーター
Python ノードをクリックし、Request Parameters エディターにリクエストパラメーターのコンテンツを入力します。
-
Python ノードのレスポンスパラメーター
Python ノードをクリックし、set output results チェックボックスをオンにして、JSONPath 式を使用して出力をカスタマイズします。例:
{ "return1":"$.data.rows.user_id", "return2":"$.data.rows.user_name" }
次の表に、パラメーター値を取得するための一般的な JSONPath 式を示します。
|
JSONPath 式 |
リクエストでの使用法 |
レスポンスでの使用法 |
|
$. |
前のノードの出力のルートオブジェクトを参照します。 |
現在のノードの出力のルートオブジェクトを参照します。 |
|
$.param |
前のノードの出力から param パラメーターの値を取得します。 |
現在のノードの出力から param パラメーターの値を取得します。 |
|
${START} |
ワークフローのリクエストパラメーターを取得します。これは 開始ノード の出力です。 |
|
|
${NodeID} |
指定された ID のノードの出力を取得します。 |
|
|
${NodeID.param} |
指定された ID のノードの出力から param パラメーターの値を取得します。 |
|
例
DataWorks コンソールにログインします。対象のリージョンで、左側のナビゲーションウィンドウで をクリックします。ドロップダウンリストからワークスペースを選択し、入力 データサービス をクリックします。
-
API を登録します。
この例では、既存のエンドポイントから API を登録します。
-
左側のナビゲーションウィンドウで、
アイコンをクリックして Service Development ページに移動します。 -
アイコンにカーソルを合わせ、 を選択します。 -
Register API ダイアログボックスで、パラメーターを設定します。詳細については、「外部 API サービスの登録」をご参照ください。
-
Determine をクリックします。
-
-
関数を登録します。
-
Service Development ページで、
アイコンにカーソルを合わせ、 を選択します。または、関連するビジネスプロセスを見つけ、Function を右クリックして を選択することもできます。
-
Create Python Function ダイアログボックスで、パラメーターを設定します。詳細については、「関数の管理」をご参照ください。
-
OK をクリックします。
-
関数の設定ページで、Edit Code エリアに次のコードを入力します。
# -*- coding: utf-8 -*- # event (str) : フィルターでは API の結果、それ以外の場合はパラメーター # context : 一部の環境情報、現在は使用されません # インポートモジュールの制限: json,time,random,pickle,re,math import json def handler(event,context): # str を json オブジェクトにロード obj = json.loads(event) # ここにコードを追加 # 追加終了 return obj -
Environment Configuration セクションで、Memory と Timeout を設定します。
-
ツールバーの
アイコンをクリックします。
-
-
ワークフローを作成します。
-
Service Development ページで、
アイコンにカーソルを合わせ、Create Workflow をクリックします。または、関連するビジネスプロセスを見つけ、Service arrangement を右クリックして Create Workflow を選択することもできます。
-
Service arrangement ダイアログボックスで、パラメーターを設定します。
パラメーター
説明
API Name
長さは 4~50 文字で、漢字、英字、数字、アンダースコア (_) を使用できます。漢字または英字で始める必要があります。
APIPath
API が格納されるパスです。例:/user。
説明パスは最大 200 文字で、英字、数字、アンダースコア (_)、ハイフン (-) を使用できます。スラッシュ (/) で始める必要があります。
Protocol
サポートされているプロトコルは HTTP と HTTPS です。
HTTPS 経由で API を呼び出すには、API をゲートウェイに公開し、独立ドメインをバインドし、API Gateway コンソールで SSL 証明書をアップロードします。詳細については、「HTTPS サポートの有効化」をご参照ください。
Request Method
サポートされているメソッドは GET と POST です。
Response Type
JSON レスポンスタイプのみがサポートされています。
Visibility Scope
オプションには Workspace と Private があります。
-
Workspace: このワークスペース内のすべてのメンバーに API が表示されます。
-
Private: API は API の所有者にのみ表示されます。他のユーザーへの権限付与は現在サポートされていません。
説明表示範囲がプライベートに設定されている場合、ディレクトリツリーには自分にしか API が表示されず、ワークスペースの他のメンバーには表示されません。
Tag
Tag リストから適切なタグを選択します。
説明タグ名には、漢字、英字、数字、アンダースコア (_) を使用できます。最大 5 つのタグを追加でき、各タグの長さは最大 20 文字です。
Description
API の簡単な説明を 2,000 文字以内で入力します。
Location
サービスオーケストレーションワークフローが格納されるディレクトリです。
-
-
OK をクリックします。
-
-
ワークフローを編集します。
-
ワークフローエディターページで、対応するモジュールを以下の順序でドラッグして接続します。
ノードは上から順に、開始、API、SWITCH、PYTHON、終了です。これらのノードをキャンバス上でこの順序でドラッグして接続します。
-
API1 ノードをクリックして編集します。Select API リストから、登録した API を選択します。set output results チェックボックスをオンにして、
{"user_id":"$.data[0].id"}と入力します。出力は JSONPath を使用して処理されます。ノード値を取得するための構文 (例:${NodeA.namea}) は、入力パラメーターと同じです。式
{"user_id":"$.data[0].id"}は、現在のノードの結果の data 配列の最初の要素の id を user_id に割り当てます。その後、ノードは {"user_id":"value"} のフォーマットで JSON データを出力します。 -
PYTHON1 ノードをクリックし、Select Function リストから登録した関数を選択します。
-
SWITCH1 ノードをクリックし、エディターダイアログで Set branch conditions をクリックします。
条件式は、前のノードの出力を評価します。例:
${NodeID.OutputName}>1または$.OutputName>1。サポートされている演算子には、==、!=、>=、>、<=、<、&&、!、()、+、-、*、/、% があります。この例では、上流ノードから出力された user_id が下流ノードのリクエストパラメーターとして使用されます。
新しいブランチ 1: $.user_id != 1 # 上流の user_id が 1 でない場合に実行されます。 新しいブランチ 2: $.user_id == 1 # 上流の user_id が 1 の場合に実行されます。 -
Complete ノードをクリックし、ページの右側にある Response Parameters をクリックしてレスポンスパラメーターを設定します。
-
-
ワークフローをテストします。
-
ページの右上隅にある Test をクリックします。
-
Test APIs ダイアログボックスで、Determine をクリックします。
-
ページの下部にある Runtime Log と Execution results を表示します。
-