翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
状態の管理とデータの変換
変数を使用して状態間でデータを渡す方法と、JSONata を使用してデータを変換する方法について説明します。
各状態は、受け取った入力に基づいて決定を下すか、アクションを実行します。ほとんどの場合、出力を他の状態に渡します。Workflow Studio では、インスペクターパネル パネルの [入力] タブおよび [出力] タブでステートが入力と出力データをフィルタリングし、操作する方法を設定できます。[Info] リンクを使用して、入力と出力を設定する時にコンテキストヘルプにアクセスします。

Step Functions の入出力処理方法の詳細については、Step Functions の入力および出力処理 を参照してください。
状態へ入力を構成する
各状態は、前の状態からの入力を JSON として受け取ります。入力をフィルターする場合は、インスペクターパネル パネルの [入力] タブで InputPath
フィルターを使用できます。InputPath
は文字列であり、$
で始まり、特定の JSON ノードを識別します。これらはリファレンスパス と呼ばれ、JsonPath 構文をフォローします。
入力をフィルターするには、次の手順を実行します。
-
[InputPath で入力をフィルタリング] を選択します。
-
InputPath
フィルターに有効な JsonPathを入力してください。例えば、 $.data
と指定します。
ご自分の InputPath
フィルターがご自分のワークフローに追加されます。
例 1: Workflow Studio スタジオの InputPath フィルターを使用する
ステートへの入力に次の JSON データが含まれているとします。
{
"comment": "Example for InputPath",
"dataset1": {
"val1": 1,
"val2": 2,
"val3": 3
},
"dataset2": {
"val1": "a",
"val2": "b",
"val3": "c"
}
}
InputPath
フィルターを適用するには、[InputPath で入力をフィルタリング] を選択し、適切なリファレンスパスを入力します。$.dataset2.val1
に入ると、次の JSON が状態への入力として渡されます。
{"a"}
リファレンスパスでは、値の選択もできます。リファレンスが { "a":
[1, 2, 3, 4] }
で、リファレンスパス$.a[0:2]
を InputPath
フィルターとして適用した場合、結果は次のようになります。
[ 1, 2 ]
Parallel ワークフローの状態、Map 状態のワークフロー、Pass ワークフロー状態 フローには、[入力] タブで Parameters
と呼ばれる追加の入力フィルタリングオプションがあります。このフィルターは InputPath フィルターの後に有効になり、1 つ以上のキーバリューペアで構成されるカスタム JSON オブジェクトを構築するために使用できます。各ペアの値は、静的な値のいずれかとなり、入力から選択するか、パスを使って Step Functions の Context オブジェクトからの実行データへのアクセス から選択することができます。
注記
パラメータでリファレンスパスを使用して入力内の JSON ノードを参照するように指定するには、パラメータ名の末尾を .$
で終了します。
例 2: パラレルステート用のカスタム JSON 入力の作成
次の JSON データがパラレルステートへの入力であるとします。
{
"comment": "Example for Parameters",
"product": {
"details": {
"color": "blue",
"size": "small",
"material": "cotton"
},
"availability": "in stock",
"sku": "2317",
"cost": "$23"
}
}
この入力の一部を選択し、静的な値を使って追加のキーバリューペアを渡すには、[パラメータ] フィールドで [並列] 状態の [入力] タブ で次のように指定できます。
{
"comment": "Selecting what I care about.",
"MyDetails": {
"size.$": "$.product.details.size",
"exists.$": "$.product.availability",
"StaticValue": "foo"
}
}
次の JSON データが結果になります。
{
"comment": "Selecting what I care about.",
"MyDetails": {
"size": "small",
"exists": "in stock",
"StaticValue": "foo"
}
}
状態の出力を構成
状態ごとに、次の状態に渡される前にフィルタリングできる JSON 出力を生成します。複数のフィルタが使用でき、それぞれ異なる方法で出力に影響します。各状態で使用可能な出力フィルターは、[Inspector] 内の [出力] タブでリストされます。Task ワークフロー状態 状態では、選択した出力フィルターは次の順序で処理されます。
-
ResultSelector
: 状態の結果を操作するためにこのフィルターを使用します。結果の一部を使用して新しい JSON オブジェクトを作成できます。 -
Step Functions で ResultPath を使用して状態出力を指定する
: このフィルターを使用して、出力に渡す状態入力とタスク結果の組み合わせを選択します。 -
OutputPath を使用した状態出力のフィルタリング
: このフィルターを使用して、JSON 出力をフィルターして、結果からどの情報を次の状態に渡すのか選択します。
ResultSelector の使用
ResultSelector
は、次の状態に対するオプションの出力フィルターです。
-
Task ワークフロー状態 状態とは、[State browser] (状態ブラウザ) の [アクション] タブにあげられているすべての状態です。
-
状態ブラウザの [フロー] タブにある Map 状態のワークフロー 状態。
-
状態ブラウザの [フロー] タブにある Parallel ワークフローの状態 状態。
ResultSelector
を使用して、1 つ以上のキーバリューペアで構成されるカスタム JSON オブジェクトを作成できます。各ペアの値は、静的な値にすることも、状態の結果からパスで選択することもできます。
注記
パラメータでパスを使用して、結果内の JSON ノードをリファレンスにするように指定するには、パラメータ名の末尾を .$
で終了します。
例 ResultSelector フィルターの使用例
この例では、ResultSelector
を使って、Amazon EMR CreateCluster
状態の Amazon EMR CreateCluster API コールからのレスポンスを操作します。以下は、Amazon EMR CreateCluster
API コールからの結果です。
{
"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] フィールドで次のように指定します。
{
"result": "found",
"ClusterId.$": "$.output.ClusterId",
"ResourceType.$": "$.resourceType"
}
ResultSelector
を使用すると、次の結果になります。
{
"result": "found",
"ClusterId": "AKIAIOSFODNN7EXAMPLE",
"ResourceType": "elasticmapreduce"
}
ResultPath の使用
状態の出力は、入力のコピー、生成される結果、またはその入力と結果の組み合わせです。ResultPath
を使用して、上記のうち、状態出力に渡す組み合わせを制御します。その他の ResultPath
ユースケースについては、Step Functions で ResultPath を使用して状態出力を指定する を参照してください。
ResultPath
は、次の状態に対するオプションの出力フィルターです。
-
Task ワークフロー状態 状態は、状態ブラウザの [アクション] パネルにあげられているすべての状態です。
-
状態ブラウザの [フロー] タブにある Map 状態のワークフロー 状態。
-
状態ブラウザの [フロー] タブにある Parallel ワークフローの状態 状態。
-
状態ブラウザの [フロー] タブにある Pass ワークフロー状態 状態。
ResultPath
は、結果を元の状態の入力に追加するために使用できます。指定されたパスは、結果を追加する場所を示します。
例 ResultPath フィルターの使用例
次のものがタスクステートへの入力であるとします。
{
"details": "Default example",
"who": "AWS Step Functions"
}
タスクステートの結果は次のとおりです。
Hello, AWS Step Functions
ResultPath
を適用し、$.taskresult
のように、結果を追加する場所を示すリファレンスパスを入力して、状態の入力にこの結果を追加します。
この ResultPath
を使って、状態の出力として渡される JSON を次に示します。
{
"details": "Default example",
"who": "AWS Step Functions",
"taskresult": "Hello, AWS Step Functions!"
}
OutputPath を使用する
OutputPath
フィルターを使うと、不要な情報をフィルターして、必要な一部の JSON のみを渡すことができるようになります。OutputPath
は $
で始まる文字列で、JSON テキスト内のノードを識別します。
例 OutputPath フィルターの使用例
Lambda Invoke API コールが Lambda 関数の結果に加えてメタデータを返すとしましょう。
{
"ExecutedVersion": "$LATEST",
"Payload": {
"foo": "bar",
"colors": [
"red",
"blue",
"green"
],
"car": {
"year": 2008,
"make": "Toyota",
"model": "Matrix"
}
},
"SdkHttpMetadata": {
"AllHttpHeaders": {
"X-Amz-Executed-Version": ["$LATEST"]
...
OutputPath
を使用して、追加のメタデータをフィルターで除外します。デフォルトでは、Workflow Studio で作成された Lambda Invoke 状態の [OutputPath] フィルターの値は $.Payload
です。このデフォルト値では、追加のメタデータが削除され、Lambda 関数を直接実行するのに等しい出力が返されます。
Lambda 呼び出しタスクの結果の例と [出力] フィルターの $.Payload
の値は、次の JSON データを出力として渡します。
{
"foo": "bar",
"colors": [
"red",
"blue",
"green"
],
"car": {
"year": 2008,
"make": "Toyota",
"model": "Matrix"
}
}
注記
OutputPath
フィルターは、最後に有効になる出力フィルターであるため、ResultSelector
または ResultPath
のような追加出力フィルターを使用する場合は、OutputPath
フィルターの $.Payload
のデフォルト値を適宜変更する必要があります。