例: Step Functions ワークフローでの状態データの操作 - AWS Step Functions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

例: Step Functions ワークフローでの状態データの操作

このトピックでは、、 InputPath ResultPath、および OutputPath フィールドJSONを使用して状態の入力と出力を操作する方法の例を示します。

ワークフローの状態の失敗 状態または ワークフロー状態が成功 状態以外のすべての状態には、InputPathResultPathOutputPathなどの入力および出力処理フィールドを含めることができます。また、ワークフロー状態を待機する および 選択ワークフローの状態 状態は ResultPath フィールドをサポートしていません。これらのフィールドでは、 を使用してJsonPath、ワークフロー内を移動するJSONデータをフィルタリングできます。

Parameters フィールドを使用して、ワークフロー内を移動するJSONデータを操作することもできます。Parameters の使用の詳細については、「Step Functions ワークフローのパラメータを使用して状態データを操作する」を参照してください。

例えば、 AWS Lambda Lambda を使用する Step Functions ステートマシン状態の作成 チュートリアルで説明されている 関数とステートマシン。次の InputPathResultPathOutputPath が含まれるように、ステートマシンを変更します。

{ "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction", "InputPath": "$.lambda", "ResultPath": "$.data.lambdaresult", "OutputPath": "$.data", "End": true } } }

次の入力を使用して実行を開始します。

{ "comment": "An input comment.", "data": { "val1": 23, "val2": 17 }, "extra": "foo", "lambda": { "who": "AWS Step Functions" } }

comment ノードと extraノードは破棄できるが、Lambda 関数の出力を含めて、dataノードに情報を保持するとします。

更新されたステートマシンで、Task 状態は、タスクへの入力を処理するように変更されます。

"InputPath": "$.lambda",

ステートマシン定義のこの行によって、タスク入力は、状態入力から lambda ノードのみに制限されます。Lambda 関数はJSON、 オブジェクトのみを入力{"who": "AWS Step Functions"}として受け取ります。

"ResultPath": "$.data.lambdaresult",

この ResultPath は、元のステートマシン入力の data ノードの子として、Lambda 関数の結果を lambdaresult という名前のノードに挿入するよう指示します。を使用して元の入力と結果に対して他の操作を実行していないためOutputPath、 状態の出力に元の入力を持つ Lambda 関数の結果が含まれるようになりました。

{ "comment": "An input comment.", "data": { "val1": 23, "val2": 17, "lambdaresult": "Hello, AWS Step Functions!" }, "extra": "foo", "lambda": { "who": "AWS Step Functions" } }

ただし、目的はdataノードのみを保持し、Lambda 関数の結果を含めることでした。 は、状態出力に渡すJSON前に、この組み合わせをOutputPathフィルタリングします。

"OutputPath": "$.data",

これにより、出力に渡される、元の入力の data ノード (例: lambdaresult によって挿入される ResultPath の子) のみ選択されます。状態出力は、次のようにフィルタリングされます。

{ "val1": 23, "val2": 17, "lambdaresult": "Hello, AWS Step Functions!" }

この Task 状態では次のようになります。

  1. InputPath では、Lambda 関数への入力から lambda ノードのみ送信します。

  2. ResultPath では、元の入力の data ノードの子として結果を挿入します。

  3. OutputPath では、data ノードのみが状態出力に渡されるように、状態入力 (現在は Lambda 関数の結果が含まれる) がフィルタリングされます。

例 を使用して元のステートマシンの入力、結果、最終出力を操作するには JsonPath

保険申請者の身元と住所を検証する以下のステートマシンを考えてみましょう。

注記

完全な例を表示するには、「Step Functions JSON のパスの使用方法」を参照してください。

{ "Comment": "Sample state machine to verify an applicant's ID and address", "StartAt": "Verify info", "States": { "Verify info": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Verify identity", "States": { "Verify identity": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:check-identity:$LATEST" }, "End": true } } }, { "StartAt": "Verify address", "States": { "Verify address": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:check-address:$LATEST" }, "End": true } } } ] } } }

次の入力を使用してこのステートマシンを実行すると、検証を実行する Lambda 関数は検証が必要なデータのみを入力として想定するため、実行は失敗します。したがって、適切な を使用して検証する情報を含むノードを指定する必要があります JsonPath。

{ "data": { "firstname": "Jane", "lastname": "Doe", "identity": { "email": "jdoe@example.com", "ssn": "123-45-6789" }, "address": { "street": "123 Main St", "city": "Columbus", "state": "OH", "zip": "43219" }, "interests": [ { "category": "home", "type": "own", "yearBuilt": 2004 }, { "category": "boat", "type": "snowmobile", "yearBuilt": 2020 }, { "category": "auto", "type": "RV", "yearBuilt": 2015 }, ] } }

check-identity Lambda 関数が使用する必要があるノードを指定するには、以下のように InputPath フィールドを使用します。

"InputPath": "$.data.identity"

加えて、check-address Lambda 関数が使用する必要があるノードを指定するには、以下のように InputPath フィールドを使用します。

"InputPath": "$.data.address"

ここで、検証結果を元のステートマシン入力内に保存する場合は、以下のように ResultPath フィールドを使用します。

"ResultPath": "$.results"

ただし、ID と検証の結果のみが必要で、元の入力を破棄する場合は、以下のように OutputPath フィールドを使用します。

"OutputPath": "$.results"

詳細については、「Step Functions での入力と出力の処理」を参照してください。