メニュー
AWS Step Functions
開発者ガイド

ステートマシンデータ

ステートマシンのデータは、次の形式です。

  • ステートマシンへの最初の入力

  • 状態間で渡されるデータ

  • ステートマシンからの出力

このセクションでは、ステートマシンのデータを AWS Step Functions でフォーマットして使用する方法について説明します。

データ形式

ステートマシンのデータは、JSON テキストで表されるため、JSON によりサポートされる任意のデータ型を使用して値を指定できます。

注記

  • JSON テキスト形式の数値は、JavaScript セマンティクスに準拠します。これらの数値は通常、倍精度 IEEE-854 値に対応しています。

  • 有効な JSON テキストは、スタンドアロン、引用符で区切られた文字列、オブジェクト、配列、数値、ブール値、null です。

  • 状態の出力は、次の状態への入力になります。ただし、「入力および出力処理」を使用することで、状態が入力データのサブセットでのみ機能するように制限することができます。

ステートマシンの入出力

実行を開始するときに StartExecution アクションにデータを渡すか、Step Functions コンソールを使用して初期データを渡すことにより、AWS Step Functions に初期入力データを与えることができます。初期データは、ステートマシンの StartAt 状態に渡されます。入力が提供されない場合、デフォルトは空のオブジェクト ({}) です。

実行の出力は、最後の状態 (terminal) により返されます。この出力は、実行の結果に JSON テキストとして表示されます。外部呼び出し元を使用して、実行履歴から実行結果を取得できます (DescribeExecution アクションなど)。実行結果は、Step Functions コンソールで確認できます。

状態の入出力

各状態の入力は、前の状態の JSON テキストで構成されます。または、StartAt 状態の場合、実行への入力で構成されます。特定のフロー制御状態は、その出力への入力をエコーします。

次の例では、ステートマシンが 2 つの数値を同時に追加します。

  1. Lambda 関数を定義します。

    function Add(input) { var numbers = JSON.parse(input).numbers; var total = numbers.reduce( function(previousValue, currentValue, index, array) { return previousValue + currentValue; }); return JSON.stringify({ result: total }); }
  2. ステートマシンを定義します。

    { "Comment": "An example that adds two numbers together.", "StartAt": "Add", "Version": "1.0", "TimeoutSeconds": 10, "States": { "Add": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Add", "End": true } } }
  3. 次の JSON テキストで実行を開始します。

    { "numbers": [3, 4] }

    Add 状態が JSON テキストを受け取り、Lambda 関数に渡します。

    Lambda 関数は、計算の結果をその状態に返します。

    状態は、その出力で次の値を返します。

    { "result": 7 }

    Add はステートマシンの最終状態でもあるため、この値はステートマシンの出力として返されます。

    最終状態が出力を返さない場合、ステートマシンは空のオブジェクト ({}) を返します。

フィルタ

Task などの一部の状態には、InputPathResultPathOutputPath の各フィールドがあります。これらのフィールドの値は、パスです。

  • InputPath フィールドは、状態の入力の一部を選択し、状態の処理ロジック (アクティビティ、Lambda 関数など) に渡します。フィールドが null の場合、空のオブジェクト ({}) が渡されます。

    注記

    InputPath フィールドを省略した場合、状態入力全体 ($) がデフォルトで選択されます。

  • ResultPath フィールドは、状態の入力の一部を選択し、状態の処理ロジックの結果データで上書きするか、その結果データに追加します。

    ResultPath フィールドの値は、null にすることができます。この場合、状態の処理ロジックからの出力は、状態の入力に追加されるのではなく破棄されます。このシナリオでは、OutputPath フィールドがデフォルト値であれば、状態の出力は状態の入力と同じです。

    注記

    オプションの ResultPath フィールドを省略した場合、入力全体を上書きする $ がデフォルトで設定されます。ただし、入力が状態の出力として送信される前に、OutputPath フィールドを使用して入力の一部を選択できます。

  • OutputPath フィールドの値が null の場合、空のオブジェクト ({}) が状態の出力として送信されます。

    注記

    オプションの OutputPath フィールドを省略した場合、デフォルトの $ に設定されます。この場合、入力全体が選択され (ResultPath フィールドによって変更されています)、状態の出力として入力が送信されます。

次の例では、状態は入力値の合計を出力します。

  1. InputPathResultPath、および OutputPath を定義します。

    "InputPath": "$.numbers", "ResultPath": "$.sum", "OutputPath": "$"
  2. 状態の入力データを追加します。

    { "numbers": [3, 4] }

    状態の出力データは次のようになります。

    { "numbers": [3, 4], "sum": 7 }
  3. 状態の入力データを変更しないで OutputPath を調整します。

    "InputPath": "$.numbers", "ResultPath": "$.sum", "OutputPath": "$.sum"

    状態の出力データは次のように変更されます。

    { 7 }

ステートマシンデータ内のデータメンバーの名前は、InputPath フィールドと ResultPath フィールドを使用してデータを処理する関数から分離できます。