AWS Step Function 句柄 Lambda.Unknown

Lan*_*onC 5 amazon-web-services aws-lambda aws-step-functions

我有一个简单的 AWS 状态机,其中有两个执行 C# lambda 函数的任务状态,以及一个传递状态错误处理程序来处理“States.ALL”:

{
  "Comment": "StateMachine1",
  "StartAt": "step1",
  "States": {
    "step1": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-2:0000:function:step1",
      "Catch": [ {
            "ErrorEquals": ["States.ALL"],
            "Next": "CatchAllFallback"
         } ],
      "Next": "step2"
    },
      "step2": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:us-east-2:0000:function:step2",
        "Catch": [ {
            "ErrorEquals": ["States.ALL"],
            "Next": "CatchAllFallback"
         } ],
      "End": true
    },
     "CatchAllFallback": {
         "Type": "Pass",
         "Result": "This is a fallback from any error code",
         "End": true
      }
  }
}
Run Code Online (Sandbox Code Playgroud)

当其中一个步骤失败时,我会得到以下内容作为“CatchAllFallback”的输入:

"Error": "Lambda.Unknown",
"Cause": "The cause could not be determined because Lambda did not return an error type."
Run Code Online (Sandbox Code Playgroud)

当我查看 Cloudwatch 日志时,我发现该步骤超时。我的问题是:如何在错误处理程序中获取该信息而不仅仅是“Lambda.Unknown”?我知道这一定是可能的,但在花了几个小时搜索网络后,我不知道该怎么做。任何意见,将不胜感激。

Mai*_*KaY 3

我不认为这是默认支持的(但也许有人可以证明我错了?)。这是因为问题的根源。AWS Step Functions 期望有效的错误类型将其传递到下一个状态,但您的 Lambda 超时,因此无法传递有效的错误类型。

但!您可以在 Lambda 内部构建解决方法。

只需检查内部的RemainingTime ,Context Object一旦接近超时,您就会抛出一个异常,然后该异常可以映射到有效的错误类型。

有关函数执行剩余时间的信息可用于指定函数在接近超时时的行为