如何解决AWS Step Functions-捕获错误时如何忽略“ ResultSelector”?
我有一个AWS Step Functions状态机,作为第一个状态,它启动了Lambda函数。该函数执行某些操作,然后返回JSON,例如{ temp_a: "temporary a" }
。
此输出应发送到该状态机的第二个状态,但是,我不想将temp_a
作为键发送,而是想将其重命名为a
,因此第一个结果状态应为{ a: "temporary a" }
。
这很简单,可以使用ResultSelector完成。为此,“步骤功能”将如下所示:
{
"StartAt": "State1","States": {
"State1": {
"Next": "State2","Resource": "arn:aws:lambda:eu-west-1:XXX:function:sfexample-LambdaFunction","ResultSelector": {
"a.$": "$.temp_a"
},"Type": "Task"
},"State2": {
"End": true,"Type": "Pass"
}
}
}
和Lambda一样,因为它只包含一条指令return { temp_a: "temporary a" };
,所以会尽可能地简单。
一旦启动状态机,由于temp_a
成功地重命名到a
(感谢ResultSelector
)中,一切都变得像魅力一样然后将其发送到State2
。太好了!
有时候,Lambda会抛出一个CustomError
异常,而我会在状态机中捕获该异常。捕获到错误后,必须将流转移到状态CustomErrorState
。
为了使事情变得可能,我在Catch
中添加了一个State1
语句,并添加了一个类型为CustomErrorState
的状态Fail
。
{
"StartAt": "State1","States": {
"CustomErrorState": {
"Cause": "Error happens","Type": "Fail"
},"State1": {
"Catch": [
{
"ErrorEquals": [
"CustomError"
],"Next": "CustomErrorState"
}
],"Next": "State2","Type": "Pass"
}
}
}
这似乎是合理的,但是当Lambda抛出CustomError
时,由于State1
无法执行我在ResultSelector
属性中指定的操作,我遇到了运行时错误。
是什么意思?如果发现错误,我该如何处理结果?当我在某种状态下遇到错误时,可以忽略ResultSelector's
指令吗?
更多详细信息: Here,您可以获取所有必要的文件以将其测试到您的帐户中。
解决方法
问题已解决。请参见下面的帖子。
我已经发布了same question on AWS discussion forum,表示该行为看起来像个错误。他们确认了这个问题,实际上:
,“ ResultSelector”字段仅应应用于成功 任务,地图或并行状态的结果。在被抓住的情况下 错误,不应应用“ ResultSelector”。
我是Step Functions的工程师,并希望更新此信息,以使您知道该问题已解决。
ResultSelector字段将不会应用于捕获的错误输出,并且以前的行为是错误。
感谢您提出来。
,幸运的是,今天我遇到了同样的问题。我相信您要做的是在代码中手动处理异常,无法忽略ResultSelector
。如果失败,则必须从代码中返回相同的dict / json,只有SFN会被完全执行。这是我尝试过的:
我故意提出一个异常来检查状态机的行为。
下面是我运行该代码时状态机的执行情况:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。