amazon-web-services - 如何将并行任务中步骤的输出传递给 Catch?
问题描述
我有一个包含几个不同步骤的并行状态,并且我掌握了该并行状态,而不是单个步骤。我注意到当它击中 Catch 时,只有并行任务的输入被传递。直到失败为止的步骤的输出都丢失了。反正有没有把这个传给渔获?我有这样的东西。
try {
step1()
step2()
step3()
} catch (States.Timeout) {
...
} catch (States.ALL) {
...
}
解决方案
没有办法。并行任务本身就是连接到捕获的东西。因此,如果其中的任何部分失败,则该任务就是失败的原因(并行任务中的所有分支) - 因此,Step Functions/状态机无法知道发生了什么 - 不是真的。
什么会继续你的捕获是导致失败的错误消息。虽然这只会为您提供失败的特定 lambda 的信息,但可以创建一个自定义异常,其中包含您要发送到 Catch 处理程序的信息。当这个异常被抛出(而不是在 lambda 中捕获)时,它会在您的输入 json 的末尾生成以下结构(至少对于抛出自定义异常的 Python Lambda - 格式可能会根据其他语言如何将其异常字符串化):
{
...
your input json
...
"error":
{
"errorType": "MyCustomException",
"Cause": "A stringified version of you error"
}
}
这允许您在错误发生时将您可用的任何信息传递给您的 lambda。
如果您需要更多(例如该过程的其他部分已完成),那么您将需要使用某种数据库 - 要么在您的 catch 块中为您的 lambdas 中的任何未处理的错误数据库同步或其他存储状态机当前状态/状态的方法。
推荐阅读
- javascript - 顶部的 func bike() 是否已被底部的另一个函数覆盖
- jquery - 解析动态构建的表,跳过一列,并将其值存储在数组中下一列的位置
- amazon-web-services - Lambda 函数被执行两次
- javascript - 在 url 中插入 javascript 警报
- keras - 如何正确设置 LSTM 层的 input_shape?
- python - 尝试从字符列表中获取特定数量的字符,然后传递随机函数
- java - 我应该为这个框架使用什么类型的布局管理器?
- java - 如何通过单击按钮打开 JFrame
- go - 访问同一结构的不同字段但在不同的 goroutine 中是否需要 sync.Mutex?
- javascript - 在 React JS 中苦苦挣扎的条件渲染