有没有一种方法可以直接处理States.StringToJson函数的结果?
目前在一个step函数中,我试图处理来自另一个同步step函数调用的错误:
"OtherStepFunction": {
"Type": "Task",
"Resource": "arn:aws:states:::states:startExecution.sync:2",
"Parameters": {
"StateMachineArn": "otherstepFunctionCall",
"Input.$": "$"
},
"End": true,
"Catch": [
{
"ErrorEquals": [
"States.ALL"
],
"Comment": "OtherStepFunctionFailed",
"Next": "StatusStepFunctionFailed",
"ResultPath": "$.error"
}
]
},
所有错误都在名为StatusStepFunctionFailed的过程流中,错误输出在$.error路径中。
$.error由错误类型和作为escapedJson字符串的原因组成。
"error": {
"Error": "States.TaskFailed",
"Cause": "{"ExecutionArn":"otherfunctionarm:executionid","Input":"foooooo"}"
}
是否有任何方法可以从该输入中仅提取ExecutionARN?在我的pass步骤中,我将Cause路径转换为json,但我没有找到直接选择ExectionARN部分的方法。以下内容:
"reason.$": "States.JsonMerge($.error.Cause).ExecutionArn"
返回The value for the field 'reason.$' must be a valid JSONPath or a valid intrinsic function call (at /States/HandleResource/Iterator/States/StatusStepFunctionFailedHandleJSON/Parameters)
我目前的解决方法是使用2遍流,首先转换输出,然后格式化。
我也遇到了类似的问题。
我所做的是创建一个任务,使用StringToJSON将Cause放入一个新的路径参数中。我将该任务作为错误中的下一个,然后调用该错误中的后续任务。
使用变量名称和值:
在Catch中,将Next从StatusStepFunctionFailed更改为parseErrorCause
然后parseErrorCause是这样的:
"parseErrorCause": {
"Type": "Pass",
"Parameters": {
"Result.$": "States.StringToJson($.error.Cause)"
},
"ResultPath": "$.parsedJSON",
"Next": "StatusStepFunctionFailed"
},
StatusStepFunctionFailed访问
"Variable": "$.parsedJSON.Result.Input",
获取foooooo