翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Step Functions で Workflow Studio を使用して状態の入力と出力を設定する
ステートの管理とデータの変換
変数を使用したステート間のデータ受け渡しと 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 FunctionsResultPath を適用し、$.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 のデフォルト値を適宜変更する必要があります。