翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
InputPath、パラメータと ResultSelector
JSON はワークフローを通して動くため、InputPath
、Parameters
、および ResultSelector
フィールドから JSON の操作方法を提供します。InputPath
は、パスを使用して JSON 表記をフィルタリングして渡される入力を制限できます (パス を参照)。Parameters
フィールドによって、ステートマシンで定義した静的値あるいはパスを使用した入力から選択された静的値のいずれかの値となるキー値ペアのコレクションを渡すことができるようになります。ResultSelector
フィールドは、ResultPath
が適用される前の状態を操作する方法を提供します。
AWS Step Functions は InputPath
フィールド、そして Parameters
フィールドの順に適用します。最初に InputPath
を使用して raw 入力をフィルタリングしてから、Parameters
を適用して、入力をさらに操作するか、新しい値を追加します。その後、ResultSelector
フィールドを使って、ResultPath
を適用する前に、状態の出力を操作できます。
ヒント
Step Functions コンソールのデータフローシミュレーターを使用して
InputPath
状態入力の一部を選択するには、InputPath
を使用します。
例えば、状態への入力に以下が含まれているとします。
{
"comment": "Example for InputPath.",
"dataset1": {
"val1": 1,
"val2": 2,
"val3": 3
},
"dataset2": {
"val1": "a",
"val2": "b",
"val3": "c"
}
}
InputPath
を適用できます。
"InputPath": "$.dataset2",
上記の InputPath
を使用すると、入力として渡される JSON は次のようになります。
{
"val1": "a",
"val2": "b",
"val3": "c"
}
注記
パスは値の選択になる場合があります。次の例を考えます。
{ "a": [1, 2, 3, 4] }
パス $.a[0:2]
を適用すると、結果は次のとおりです。
[ 1, 2 ]
パラメータ
このセクションでは、[Parameters] (パラメータ) フィールドを使用するさまざまな方法を示します。
キーバリューペア
入力として渡されるキーバリューのペアのコレクションを作成するには、Parameters
フィールドを使用します。それぞれの値は、ステートマシンの定義に含める静的な値、または入力からパスまたはコンテキストオブジェクトで選択した静的な値を使用できます。パスを使用して値を選択するキーと値のペアの場合、キーの名前は .$
で終わる必要があります。
例えば、以下の入力を使用するとします。
{
"comment": "Example for Parameters.",
"product": {
"details": {
"color": "blue",
"size": "small",
"material": "cotton"
},
"availability": "in stock",
"sku": "2317",
"cost": "$23"
}
}
いくつかの情報を選択するには、これらのパラメータをステートマシン定義で指定できます。
"Parameters": {
"comment": "Selecting what I care about.",
"MyDetails": {
"size.$": "$.product.details.size",
"exists.$": "$.product.availability",
"StaticValue": "foo"
}
},
前の入力と Parameters
フィールドを指定する場合、これが渡される JSON となります。
{
"comment": "Selecting what I care about.",
"MyDetails": {
"size": "small",
"exists": "in stock",
"StaticValue": "foo"
}
},
入力に加えて、コンテキストオブジェクトとして知られる特別な JSON にアクセスできます。コンテキストオブジェクトには、ステートマシン実行に関する情報が含まれています。Context オブジェクト を参照してください。
コネクテッドリソース
Parameters
フィールドを使用して、接続されたリソースに情報を渡すこともできます。例えば、タスクの状態で AWS Batch ジョブを調整する場合は、該当する API パラメータをそのサービスの API アクションに直接渡すことができます。詳細については、以下を参照してください。
Amazon S3
状態間で渡す Lambda 関数データが 262,144 バイトを超える可能性がある場合は、Amazon S3 を使用してデータを保存し、次のいずれかの方法を実装することをお勧めします。
ワークフローで Distributed Map 状態を使用して、
Map
状態が Amazon S3 データソースからの入力を直接読み取れるようにします。詳細については、「分散モードでのマップステートの使用」を参照してください。Payload
パラメータ内のバケットの Amazon リソースネーム (ARN) を解析して、バケット名とキー値を取得します。詳細については、「ラージペイロードを渡す代わりに Amazon S3 ARNs を使用する」を参照してください。
または、実行時に小さいペイロードを渡すように実装を調整します。
ResultSelector
ResultPath
を適用する前に、ResultSelector
フィールドを利用して、状態の結果を操作します。ResultSelector
フィールドでは、キーバリューペアのコレクションを作成できます。ここでは、値は静的であるか、状態の結果から選択されます。ResultSelector
フィールドを使用して、状態の結果のどの部分をフィールドに渡すかを選択できます。ResultPath
注記
ResultPath
フィールドを使用すると、フィールドの出力を元の入力に追加できます。ResultSelector
ResultSelector
は、次の状態のオプションのフィールドです。
例えば、Step Functions サービス統合は、結果のペイロードに加えてメタデータを返します。ResultSelector
は結果の一部を選択し、ResultPath
を含む状態の入力とマージできます。この例では、resourceType
と ClusterId
だけを選択し、Amazon EMR CreateCluster.sync からの状態入力とマージします。次のものがあるとします。
{
"resourceType": "elasticmapreduce",
"resource": "createCluster.sync",
"output": {
"SdkHttpMetadata": {
"HttpHeaders": {
"Content-Length": "1112",
"Content-Type": "application/x-amz-JSON-1.1",
"Date": "Mon, 25 Nov 2019 19:41:29 GMT",
"x-amzn-RequestId": "1234-5678-9012"
},
"HttpStatusCode": 200
},
"SdkResponseMetadata": {
"RequestId": "1234-5678-9012"
},
"ClusterId": "AKIAIOSFODNN7EXAMPLE"
}
}
その後、ResultSelector
を使って resourceType
と ClusterId
を選択できます。
"Create Cluster": {
"Type": "Task",
"Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync",
"Parameters": {
<some parameters>
},
"ResultSelector": {
"ClusterId.$": "$.output.ClusterId",
"ResourceType.$": "$.resourceType"
},
"ResultPath": "$.EMROutput",
"Next": "Next Step"
}
与えられた入力で、ResultSelector
を使用して以下を生成します。
{
"OtherDataFromInput": {},
"EMROutput": {
"ResourceType": "elasticmapreduce",
"ClusterId": "AKIAIOSFODNN7EXAMPLE"
}
}
配列の平坦化
ステートマシンの 並行 or マッピング ステートが配列を返す場合は、その配列をフィールド付きのフラット配列に変換できます。ResultSelectorこのフィールドを Parallel または Map ステート定義に含めて、これらのステートの結果を操作できます。
配列をフラット化するには、[*]
ResultSelector
次の例のようにフィールドで JMESPath 構文を使用します
"ResultSelector": { "flattenArray.$": "$[*][*]" }
配列をフラット化する方法を示す例については、以下のチュートリアルのステップ 3 を参照してください。