在JSONata Step Function中配置SQS的MessageGroupId与MessageDeduplicationId异常
问题分析与修复方案
核心问题:参数路径错误
你的MessageGroupId和MessageDeduplicationId引用的$states.context.Execution.Input.requestId路径有误。对比MessageBody中requestId的取值$states.context.Execution.Input.request.requestId,说明requestId是嵌套在request对象下的,你少了一层request路径,导致无法正确获取值,进而这两个参数无法生效。
修复后的配置
修正这两个参数的JSONata表达式路径即可:
{ "Comment": "A description of my state machine", "StartAt": "SQS SendMessage", "States": { "SQS SendMessage": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Arguments": { "MessageBody": { "requestId": "{% $states.context.Execution.Input.request.requestId %}", "mslCallerId": "{% $states.context.Task.Token %}", "message": "message" }, "QueueUrl": "{% $states.context.Execution.Input.fifoQueue %}", "MessageGroupId": "{% 'msgGroup_' & $states.context.Execution.Input.request.requestId %}", "MessageDeduplicationId": "{% 'msgId_' & $states.context.Execution.Input.request.requestId %}" }, "End": true, "Output": "{% $states.result %}" } }, "QueryLanguage": "JSONata" }
额外验证点
- 确认输入的
fifoQueue是有效的FIFO队列URL(必须以.fifo结尾) - 检查执行输入结构是否为
{ "request": { "requestId": "xxx" }, "fifoQueue": "xxx.fifo" },确保路径完全匹配 - 可在Step Functions执行日志中查看
Arguments的实际输出,确认两个参数是否被正确赋值
内容的提问来源于stack exchange,提问作者David Marciel
相关产品推荐
相关产品推荐

