翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Step Functions ワークフローのパラメータを使用して状態データを操作する
InputPath
、、Parameters
および ResultSelector
フィールドは、ワークフロー内を移動JSONするときに を操作する方法を提供します。 は、パスを使用してJSON表記をフィルタリングすることで、渡される入力を制限InputPath
できます (「」を参照パスを使用した Step Functions ワークフローの入力へのアクセス)。Parameters
フィールドによって、ステートマシンで定義した静的値あるいはパスを使用した入力から選択された静的値のいずれかの値となるキー値ペアのコレクションを渡すことができるようになります。ResultSelector
フィールドは、ResultPath
が適用される前の状態を操作する方法を提供します。
AWS Step Functions は最初に InputPath
フィールドを適用し、次に Parameters
フィールドを適用します。最初に InputPath
を使用して raw 入力をフィルタリングしてから、Parameters
を適用して、入力をさらに操作するか、新しい値を追加します。その後、ResultSelector
フィールドを使って、ResultPath
を適用する前に、状態の出力を操作できます。
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オブジェクトと呼ばれる特別なオブジェクトにアクセスできます。コンテキストオブジェクトには、ステートマシン実行に関する情報が含まれています。「コンテキストオブジェクト」を参照してください。
コネクテッドリソース
Parameters
フィールドを使用して、接続されたリソースに情報を渡すこともできます。例えば、タスクの状態が をオーケストレーションしている場合、 AWS Batch ジョブでは、関連するAPIパラメータをそのサービスのAPIアクションに直接渡すことができます。詳細については、以下を参照してください。
Amazon S3
状態間で渡す Lambda 関数のデータが 262,144 バイトを超える場合、Amazon S3 を使用してデータを保存し、次のいずれかの方法を実装することを推奨いたします。
ワークフローで 分散マップ状態を使用して、
Map
ステートが Amazon S3 データソースからの入力を直接読み取れるようにします。詳細については、「分散モード」を参照してください。Payload
パラメータでバケットの Amazon リソースネーム (ARN) を解析して、バケット名とキー値を取得します。詳細については、「Step Functions で大きなペイロードを渡すARNs代わりに Amazon S3 を使用する」を参照してください。
または、実行時に小さいペイロードを渡すように実装を調整します。
ResultSelector
ResultPath
を適用する前に、ResultSelector
フィールドを利用して、状態の結果を操作します。ResultSelector
フィールドでは、キーバリューペアのコレクションを作成できます。ここでは、値は静的であるか、状態の結果から選択されます。ResultSelector
フィールドを使用すると、状態の結果のどの部分を ResultPath
フィールドに渡すかを選択できます。
注記
ResultPath
フィールドを使用すると、ResultSelector
フィールドの出力を元の入力に追加できます。
ResultSelector
は、次の状態のオプションのフィールドです。
例えば、Step Functions サービス統合は、結果のペイロードに加えてメタデータを返します。ResultSelector
は結果の一部を選択し、ResultPath
を含む状態の入力とマージできます。この例では、 resourceType
と のみを選択しClusterId
、それを Amazon createCluster.sync EMR からの状態入力とマージします。次のものがあるとします。
{
"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": {
"ClusterId": "AKIAIOSFODNN7EXAMPLE"
"ResourceType": "elasticmapreduce",
}
}
配列の配列の平坦化
ステートマシンの 並列ワークフローの状態 または マップワークフローの状態 状態により配列の配列が返される場合は、ResultSelector フィールドを使用してフラットな配列に変換できます。このフィールドを並列ステートまたはマップステートの定義に含めて、これらのステートの結果を操作できます。
配列をフラット化するには、次の例に示すように、 ResultSelector
フィールドで JMESPath構文[*]
"ResultSelector": { "flattenArray.$": "$[*][*]" }
配列をフラット化する方法を示す例については、以下のチュートリアルのステップ 3 を参照してください。