AWS SAM配置FIFO SNS/SQS时设置MessageGroupId报错求助
API Gateway集成FIFO SNS时设置MessageGroupId报错
问题背景
原本非FIFO类型的SNS/SQS配置运行正常:用户通过API Gateway提交设备状态更新,API Gateway设置destSQS消息属性后发布至SNS主题,SQS队列通过过滤策略接收对应消息。
现已将SQS队列和SNS主题改为FIFO类型,希望通过路径参数device_id设置MessageGroupId,实现同一设备的状态更新按顺序处理,添加了如下映射配置:
integration.request.querystring.MessageAttributes.entry.2.Name: "MessageGroupId" integration.request.querystring.MessageAttributes.entry.2.Value.DataType: "'String'" integration.request.querystring.MessageAttributes.entry.2.Value.StringValue: method.request.path.device_id
但部署时出现报错:
Resource handler returned message: "Errors found during import: Unable to put integration on 'POST' for resource at path '/devices/{device_id}/status': Invalid mapping expression specified: Validation Result: warnings : [], errors : [Invalid mapping expression specified: MessageGroupId]
解决方案
问题核心是**MessageGroupId是FIFO SNS主题的顶层请求参数,不属于MessageAttributes的范畴**,你错误地把它放到了消息属性的映射里。
需要修改配置,直接将MessageGroupId作为顶层查询字符串参数映射:
# 正确设置MessageGroupId(顶层参数) integration.request.querystring.MessageGroupId: method.request.path.device_id # 保留原有的其他MessageAttributes配置(比如destSQS) integration.request.querystring.MessageAttributes.entry.1.Name: "destSQS" integration.request.querystring.MessageAttributes.entry.1.Value.DataType: "'String'" integration.request.querystring.MessageAttributes.entry.1.Value.StringValue: "'your-queue-name.fifo'"
额外注意事项:
- FIFO SNS主题的名称必须以
.fifo结尾 - 如果需要严格保证消息不重复,需同时设置
MessageDeduplicationId,可以用API Gateway的请求ID生成:integration.request.querystring.MessageDeduplicationId: context.requestId
内容的提问来源于stack exchange,提问作者cionzo
相关产品推荐
相关产品推荐

