[英]AWS Step Functions: Combine task input with *partial* task output
我正在研究 AWS Step 函數。 我已閱讀有關InputPath、OutputPath 和 ResultPath 的文檔。 我的問題是我想將輸入到 Lambda 任務的值與任務的部分輸出相結合。
任務的輸入類似於以下內容。 我想繼續將這些值傳遞給后續任務。
{
"previous_task_result": 100,
"next_task_input": "asdf"
}
我想要的是讓我的 Lambda 任務的輸出看起來像這樣:
{
"previous_task_result": 100,
"next_task_input": "asdf",
"current_task_result": {
"val1": "ghjk",
"val2": [0,2,13,100]
}
}
具體問題是 Lambda 任務的原始輸出看起來像這樣。 我只關心Payload
節點。 其余的輸出是樣板文件,我寧願不通過 Step Function。
{
"resourceType": "lambda",
"resource": "invoke",
"output": {
"ExecutedVersion": "$LATEST",
"Payload": {
"val1": "ghjk",
"val2": [0,2,13,100]
},
"SdkHttpMetadata": {
"HttpHeaders": {
"Connection": "keep-alive",
"Content-Length": "42",
"Content-Type": "application/json",
"Date": "Tue, 25 Feb 2020 14:36:29 GMT",
"X-Amz-Executed-Version": "$LATEST",
"x-amzn-Remapped-Content-Length": "0"
},
"HttpStatusCode": 200
},
"SdkResponseMetadata": {
"RequestId": "redacted"
},
"StatusCode": 200
}
}
我了解如何使用ResultPath
和OutputPath
將輸入與輸出組合,或將輸出分配給特定節點,但我找不到的是一種僅將結果中的Payload
節點與現有輸入合並的方法。
使用 Lambda 任務狀態時,您可以通過 3 種方式構建任務狀態:
1. 請求響應:
此方法返回完整的 API 響應,包括 SdkHttpMetadata 字段。 我懷疑返回完整 HTTP 響應的原因是因為這是您可以從 Step Function 異步調用 Lambda 函數的唯一方法(異步 Lambda 調用僅返回狀態代碼)。 例子:
"CallLambda": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "MyFunction",
"InvocationType": "Event|RequestResponse|DryRun",
"Payload.$": "$"
},
"End": true
}
2. Lambda ARN 作為資源:
我相信這就是你正在尋找的。 將 Lambda 函數的 ARN 指定為資源時,Step Functions 將同步調用您的 Lambda 函數並僅返回來自您的 Lambda 函數的結果,而沒有 API 響應元數據。 在這種情況下,您的狀態輸入將作為負載傳遞給您的 Lambda 函數,或者您可以使用 InputPath/Parameters 過濾/修改作為負載發送的數據。
"CallLambda": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-west-2:123456789012:function:my-function",
"ResultPath": "$.current_task_result",
"End": true
}
使用您的示例中的輸入,上述任務將為您提供如下輸出:
{
"previous_task_result": 100,
"next_task_input": "asdf",
"current_task_result": {
<Your Lambda Functions Result>
}
}
3. .WaitForTaskToken:
將令牌傳遞給您的函數,暫停執行,直到收到對 SendTaskSuccess 或 SendTaskFailed 的調用(此方法將僅返回來自 SendTaskSuccess 或 SendTaskFailed 的結果/錯誤,而沒有額外的 HTTP 元數據)。
"CallLambda": {
"Type": "Task",
"Resource":"arn:aws:states:::lambda:invoke.waitForTaskToken",
"Parameters": {
"FunctionName": "MyFunction",
"Payload":{
"token.$":"$$.Task.Token"
}
},
"End": true
}
對於現在發現此問題的任何人, ResultSelector
(自 2020 年 8 月起新增)執行的功能正是我在發布時正在尋找的功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.