2017-08-24 63 views
1

AWS步驟中有沒有一種方法將輸出從一種狀態映射到下一個狀態的輸入,超出了InputPath,OutputPath,, ResultPathAWS之間精煉的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。

基本上我需要這樣的東西:

"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良好的通用方法。正如你所說,如果Pass的「結果」值可能更具表現力,這將是有用的。

您可以製作一箇中間步驟的lambda來生成您需要的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"設置的訪問令牌字符串。不幸的是,狀態機與每個狀態的輸入和輸出之間存在緊密的耦合(以及並行狀態陣列中的順序,這使得我不知所措)。