aws-step-functions - 在 AWS Stepfunctions 中,当 Catch 错误时,如何识别哪个状态引发了错误?(传递一个字符串文字加上当前状态名称)
问题描述
在下面简化的 AWS Step Function 中,如果三个状态、或中的任何一个抛出错误,该状态将捕获错误。foo1
foo2
foo3
fooerr
我的问题是,如何通知它从fooerr
哪个州捕获错误?
fooerr
(在这个例子中,所有四个 foo* 状态都调用了一个 lambda,所以如果foo2
有错误,我想将状态名称“foo2”和一个字符串文字(如“foo2_literal”)传递给lambda。)
例如,如果foo2
定义了状态:
"foo2": {
"Type": "Task",
"Resource": "arn:aws:states:::lambda:invoke",
"Parameters": {
"FunctionName": "arn:aws:lambda:us-east-1:11111111111:function:foo2:$LATEST",
"Payload": {
"Input.$": "$"
}
},
"Next": "foo3",
"Catch": [
{
"ErrorEquals": [
"States.ALL"
],
"Next": "fooerr"
}
]
},
我在 Catch 中找不到任何用于插入将传递给的标识符字符串的语法示例fooerr
。
同样,我看不到导致错误的状态名称如何/在何处传递给捕获错误的状态 (fooerr)。
在此示例中foo2
,foorerr
如果foo2
.
解决方案
不完全是您正在寻找的东西,但我可以想到这 3 种选择:
- 您可以使用不同
ResultPath
的 in和foo1
,例如使用这个:foo2
foo3
foo1
"Catch": [
{
"ErrorEquals": [
"States.ALL"
],
"ResultPath": "$.foo1-error",
"Next": "fooerr"
}
]
这样,fooerr
您可以使用选择状态并检查是否foo1-error
存在。
- 为每个状态( 和 )创建单独的错误
foo1
捕获foo2
器foo3
。foo1
-catch->fooerr1
foo2
-catch->fooerr2
foo2
-catch->fooerr3
- 不要在 catch 块中使用
fooerr
asNext
step,而是在两者之间使用另一个步骤来添加每个步骤所需的数据。所以创建这样的东西:
foo1
-catch-> foo1-with-error-data
->fooerr
foo2
-catch-> foo2-with-error-data
->fooerr
foo2
-catch-> foo2-with-error-data
->fooerr
推荐阅读
- rxjs - rxjs - 点击与订阅
- powershell - 检查 UNC 路径/服务器文件夹是否存在
- java - 对 jtextfield 代码执行有限的字符范围不起作用
- reactjs - 带有动态标题和描述的 Whatsapp 共享
- php - PHP:取消链接资源暂时不可用
- java - 字符串不能转换为 double[]
- php - getenv() 在浏览器中工作,但不在命令行中
- javascript - 使用 javascript 函数返回格式化 json 数据的数据表
- javascript - 如何创建一个将任何给定字符串与第二个参数连接起来的函数?
- pdf - 如何让 Adobe Reader 生成高效的 XPS