簡體   English   中英

如何在我的 Lambda Function 中使用帶有回調返回步驟 Function 的 Heartbeat?

[英]How do I use Heartbeat with a Callback Return Step Function in my Lambda Function?

我的 Lambda function 需要將令牌發送回步驟 function 才能繼續,因為這是 state 機器中的一項任務。

看着我的 lambda function 的try/catch塊,我正在考慮:

  1. SendTaskHeartbeatCommandSendTaskSuccessCommand的順序
  2. SendTaskHeartbeatCommand所需參數
  3. 我是否應該將SendTaskHeartbeatCommand添加到catch塊,然后如果是,它們應該按哪個順序添加 go。

當前代碼:

  try {
    const magentoCallResponse = await axios(requestObject);
    await stepFunctionClient.send(new SendTaskHeartbeatCommand(taskToken));
    await stepFunctionClient.send(new SendTaskSuccessCommand({output: JSON.stringify(magentoCallResponse.data), taskToken}));
    return magentoCallResponse.data;
  } catch (err: any) {
    console.log("ERROR", err);
    await stepFunctionClient.send(new SendTaskFailureCommand({error: JSON.stringify("Error Sending Data into Magento"), taskToken}));
    return false;
  }

我已閱讀 SendTaskHeartbeatCommand 的 AWS SendTaskHeartbeatCommand V3 文檔,但對所需的input感到困惑。

SendTaskHeartbeat 和 SendTaskSuccess API 操作有不同的用途。

當您的任務完成時,您調用 SendTaskSucces 以將此報告回 Step Functions 並提供您的工作流隨后可以處理的任務結果。 您不需要在 SendTaskSuccess 之前調用 SendTaskHeartbeat 並且上面代碼中的用法似乎沒有必要。

SendTaskHeartbeat 是可選的,當您在任務上設置“HeartbeatSeconds”時可以使用它。 當您這樣做時,您需要您的工作人員(即本例中的 Lambda function)在處理工作發回定期心跳。 我希望在上面的代碼運行 try 塊中的第一行時異步運行。 有心跳的原因是您可以設置比 HeartbeatSeconds 更長的 TimeoutSeconds(或動態使用 TimeoutSecondsPath),因此當工作人員死亡(心跳超時)時快速失敗/重試,同時您仍然允許您的任務花費更長的時間來完成。

也就是說,不清楚為什么要使用 Lambda 的 .waitForTaskToken。通常,您可以只使用默認的請求響應集成模式和 Lambda。這使用 Lambda 的同步調用模式,並且無需您即可將響應返回給您在您的 Lambda 代碼中與 Step Functions 集成。 可能您正在從 SQS 隊列中讀取這些內容以進行並發控制或其他操作。 但如果沒有,只需使用 Request Response。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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