デフォルトでは、マップステートはインラインモードで実行されます。インラインモードは、データをバッチ処理し、データの変換と処理を効率化するために使用できます。このモードは単一ノードに焦点を当てており、コレクション内の各要素を処理する必要があるシナリオに適しています。
概要
マップステートは、入力の配列タイプの パラメーター をトラバースし、配列内のすべての要素に対して プロセッサ ステートを並列に実行するために使用されます。マップステートは、プログラミング言語の foreach ステートメントに似ています。ただし、マップの反復は並列に実行されます。
マップステートが実行されると、入力パラメーター内のすべての要素のプロセッサステートが同時に実行されます。デフォルトでは、すべてのブランチの結果を含む map[string]any 出力が、すべてのブランチが実行された後に返されます。次に、システムは出力コンストラクターを使用して結果をさらに処理します。
次の表に、インラインモードのフィールドを示します。
フィールド | タイプ | 必須 | 説明 | 例 |
Name | string | はい | ステートの名前。 | my-state-name |
Description | string | いいえ | ステートの説明。 | ここに記述します |
Type | string | はい | ステートのタイプ。 | Map |
InputConstructor | map[string]any | いいえ | 入力コンストラクター。 | 詳細については、入力と出力 をご参照ください。 |
ItemsPath | string | はい | 入力内の配列を抽出するために使用される式。 | 詳細については、ItemsPath をご参照ください。 |
Processor | Processor | はい | 反復プロセッサ。 | 詳細については、Processor をご参照ください。 |
OutputConstructor | map[string]any | いいえ | 出力コンストラクター。 | 詳細については、State OutputConstructor をご参照ください。 |
Next | string | いいえ | 現在のステートが完了した後に実行される次のステート。 End フィールドの値が true の場合は、このフィールドを指定する必要はありません。 | my-next-state |
End | bool | いいえ | ステートが現在のスコープの終端ステートであるかどうかを指定します。 | true |
Retry | Retry | いいえ | エラー再試行ポリシー。 | 詳細については、エラー処理 をご参照ください。 |
Catch | Catch | いいえ | エラーキャッチポリシー。 | 詳細については、エラー処理 をご参照ください。 |
MaxConcuccency | int | いいえ | 最大同時実行レベル。 | 28 |
インラインモードの重要なフィールド
ItemsPath
入力内の配列を抽出するために使用される式。 ItemsPath 式の実行後に JSON 配列が返された場合、その配列に対して反復処理が行われます。配列内の各要素は、処理のために ItemProcessor に渡されます。次の例に示すように、$Context および $Input 式変数を使用できます。
$Input.FieldAProcessor
反復プロセッサ。このフィールドには、次の表に示す 2 つのフィールドが含まれています。
フィールド | タイプ | 必須 | 説明 | 例 |
States | array | はい | ステートの配列。 | |
StartAt | string | はい | ワークフローの実行を開始するステート。 | 開始タスク |
MaxConcuccency
同時実行されるサブフローの最大数。このフィールドの最大値は 40 です。
サンプルコード
次のサンプルフローでは、マップステートを定義しています。 MapProcessor には Pass ステートが含まれています。
Type: StateMachine
Name: my-wkfl
SpecVersion: v1
StartAt: Map1
States:
- Type: Map
Name: Map1
End: true
InputConstructor:
FieldA:
- a : b
- c : d
- e : f
ItemsPath: $Input.FieldA
Processor:
StartAt: Pass1
States:
- Type: Pass
Name: Pass1
End: true次のサンプルコードは、フローの入力構築結果の例を示しています。
{
"FieldA": [
{
"a": "b"
},
{
"c": "d"
},
{
"e": "f"
}
]
}マップの場合、システムはすべての反復プロセッサの出力をマージします。デフォルトでは、Items キーワードがキーとして使用され、マージされた結果が値として使用されます。次のサンプルコードは、Map1 の出力の例を示しています。これは、フローが実行された後の最終出力でもあります。
{
"Items": [
{
"a": "b"
},
{
"c": "d"
},
{
"e": "f"
}
]
}