AWS步骤函数处理Lambda.Unknown

时间:2018-04-10 03:45:58

标签: 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
      }
  }
}

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

"Error": "Lambda.Unknown",
"Cause": "The cause could not be determined because Lambda did not return an error type."

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

2 个答案:

答案 0 :(得分:1)

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

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

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

  

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

答案 1 :(得分:0)

你的lambda需要抛出相关的错误,以便step函数提供更好的输出,documentation使用c#

解释了这个场景

实施例

namespace Example {            
   public class AccountAlreadyExistsException : Exception {
      public AccountAlreadyExistsException(String message) :
         base(message) {
      }
   }
} 

namespace Example {
   public class Handler {
     public static void CreateAccount() {
       throw new AccountAlreadyExistsException("Account is in use!");
     }
   }
}