如何在AWS Step Functions的catch分支中向异常处理函数传递变量
有两种可行方案可以实现item变量的传递:
方案1:将自定义数据嵌入错误信息
该方案适合item是在CreateNewItem函数内部生成的场景,直接修改函数的异常抛出逻辑即可:
- 修改
CreateNewItem的catch块代码,将item序列化后嵌入错误信息:
catch(e) { // 构造包含业务数据的错误元信息 const errorPayload = JSON.stringify({ item: item, rawErrorMessage: e.message }) const createItemError = new Error(errorPayload); createItemError.name = "CreateItemError"; throw createItemError; }
- 在
CreateNewItemFail函数中解析嵌套的JSON字段获取item:
exports.handler = async (event) => { // 第一步解析Step Functions传入的Cause字段 const cause = JSON.parse(event.Cause); // 第二步解析错误信息里的自定义元数据 const errorPayload = JSON.parse(cause.errorMessage); const targetItem = errorPayload.item; // 后续直接使用targetItem构造邮件内容即可 }
方案2:通过Step Functions状态机配置传递上下文
如果你的item是从Step Functions的上游步骤传入CreateNewItem的,不需要嵌入错误信息,直接修改状态机定义的异常捕获配置即可:
在CreateNewItem对应的状态块中添加ResultPath配置:
"Catch": [ { "ErrorEquals": ["CreateItemError"], "ResultPath": "$.errorDetail", "Next": "CreateNewItemFail" } ]
该配置会把错误信息追加到原始输入数据的errorDetail字段下,传入CreateNewItemFail的参数会同时包含原始输入(含item)和错误信息,直接取值使用即可。
内容的提问来源于stack exchange,提问作者Satoru Kikuchi
相关产品推荐
相关产品推荐

