2017-08-24 5 views
1

AWSでの方法がありますか?ある状態から次の状態の入力への出力をInputPathOutputPathResultPathとマッピングするステップ。AWS間の洗練されたjsonPathマッピングステップ

最初の状態からの出力例:

{ 
    "status": "1", 
    "body": { 
      "access_token":"example_token" 
    } 
} 

次の状態は、フォームの入力を期待:

{ 
    "method": "foo", 
    "payload": { 
     "access_token":<my_access_token>, 
     "other_key":"other_value" 
    }, 
    "other_params":["a","b","c"] 
} 

それは任意に別の入力に1つの状態の出力をマップする方法は明らかではありません。唯一の解決策は、Lambdasを書き換えることです。私は現在の状態の言語の中からJSONを操作するための良い一般的な方法があるとは思わない

"Remap": { 
    "Type": "Pass",  
    "Result": { 
    "method":"foo", 
    "payload":{ 
     "access_token":"$.body.access_token", 
     "other_key":"other_value" 
    }, 
    "other_params":["a","b","c"] 
    }, 
    "Next": "NextStage" 
}, 

答えて

0

は基本的に私のようなものが必要。あなたが言うように、パスの「結果」値がより表現力豊かである場合、それは有用です。

必要なJSONを生成する中間段階のラムダを作成できます。 "set-json-path"アクティビティのような汎用的なものを作成した場合、そのパラメータを設定するために余分なPassステップが必要となるので扱いにくく、残りの入力に追加する必要があるというのは残念です。状態言語に必要と思われるものは、それ自身の入力/出力で「サブマシン」を実行する方法です。

ほとんどの場合、この機能はParallelを使用して取得できますが、残念なことに結果は常に配列になります。このほとんど作品が、それだけではなく、文字列の配列にaccess_tokenは置く:

{ 
    "StartAt": "Setup", 

    "States": { 

    "Setup": { 
     "Type": "Pass", 
     "Result": { 
     "method":"foo", 
     "payload":{ 
      "other_key":"other_value" 
     }, 
     "other_params":["a","b","c"] 
     }, 
     "Next": "Step1" 
    }, 

    "Step1": { 
     "Type": "Parallel", 
     "Branches": [ 
     { 
      "StartAt": "GetToken", 
      "States": { 
      "GetToken": { 
       "Type": "Pass", 
       "Result": { 
       "status": "1", 
       "body": { 
        "access_token":"example_token" 
       } 
       }, 
       "OutputPath": "$.body.access_token", 
       "End": true 
      } 
      } 
     } 
     ], 
     "ResultPath": "$.payload.access_token", 
     "Next": "Step2" 
    }, 

    "Step2": { 
     "Type": "Task", 
     "Resource": "arn:....foo", 
     "End": true 
    } 
    } 
} 

収量:あなたのケースでは

{ 
    "output": { 
    "method": "foo", 
    "payload": { 
     "other_key": "other_value", 
     "access_token": [ 
     "example_token" 
     ] 
    }, 
    "other_params": [ 
     "a", 
     "b", 
     "c" 
    ] 
    } 
} 

を、私は最も簡単な方法は、あなたの最初のラムダタスクを変更することだと思いますResultPath": "$.payload.access_token"を使用して設定できるアクセストークン文字列を返すだけです。残念ながら、ステートマシンと各状態の入力と出力の間には密接なつながりがあります(パラレル状態の配列の順序は、私を終わらせないようにします)

関連する問題