如何在 Step 函数调用的 Lambda 函数中抛出 TaskFailed 错误

问题描述

我有一个由步进函数调用的 lambda 函数。在内部,lambda 调用 api 并捕获错误

但是,如果 api 调用失败,我想向 step 函数抛出/返回 TaskFailed 错误,以便稍后重试。我该怎么办? (或者有没有其他方法可以让步骤稍后重试?)

解决方法

取这个定义,如果 lambda 抛出精确的错误 MY_CUSTOM_ERROR,它会被重试,对于 Lambda 错误,它也会被重试。我们可以针对不同的错误类型设置不同的重试机制。

{
  "StartAt": "invoke-lambda","States": {
    "invoke-lambda": {
      "End": true,"Retry": [
        {
          "ErrorEquals": [
            "Lambda.ServiceException","Lambda.AWSLambdaException","Lambda.SdkClientException"
          ],"IntervalSeconds": 2,"MaxAttempts": 6,"BackoffRate": 2
        },{
          "ErrorEquals": [
            "MY_CUSTOM_ERROR"
          ],"IntervalSeconds": 2
        }
      ],"Type": "Task","Resource": "arn:aws:lambda:us-east-1:111122223333:function:HelloWorld"
    }
  }
}

这里是 Lambda 代码,我们只需要将错误对象传递给回调

  exports.handler = (event,context,callback) => {
    console.log('event',event)
    let e = new Error();
    e.name = 'MY_CUSTOM_ERROR';
    callback(e)
  }