簡體   English   中英

AWS Step Functions:將任務輸入與 *部分* 任務輸出相結合

[英]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
  }
}

我了解如何使用ResultPathOutputPath將輸入與輸出組合,或將輸出分配給特定節點,但我找不到的是一種僅將結果中的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM