如何无需Postman通过API Gateway URL直接向SQS队列发送MessageBody?
问题分析与解决办法
是的,你的判断完全正确——当前/sqs_send路由的配置确实只支持从请求Body中读取消息内容,再加上两个额外因素导致了你遇到的404错误:
导致404的两个核心原因
- 请求方法不匹配:你用浏览器访问URL时发送的是GET请求,但该路由仅配置了接收PUT请求(你在Postman中用的是PUT),API Gateway会因HTTP方法不匹配返回404。
- 参数传递路径不匹配:你的SQS集成映射规则应该设置了从
body提取MessageBody,而非从URL查询参数(query string)提取,所以即使方法正确,用URL参数传递也无法被识别。
两种解决方式
方式1:修改路由支持GET请求+URL参数传递
- 进入API Gateway控制台,找到
/sqs_send路由,新增GET方法(或修改现有PUT方法的配置)。 - 配置SQS集成的请求映射模板:
- 选择Content-Type为
application/json,添加如下映射代码:{ "MessageBody": "$input.params('MessageBody')" }
MessageBody查询参数映射到SQS SendMessage接口所需的字段。 - 选择Content-Type为
- 重新部署API,之后即可通过以下格式的URL发送消息:
https://86bwtlv5ya.execute-api.us-east-1.amazonaws.com/sqs_send?MessageBody=This+is+a+test+message
方式2:保持PUT方法,不用Postman直接发送
如果不想修改路由方法,可通过命令行或浏览器控制台直接发送PUT请求:
- curl命令:
curl -X PUT -d "This is a test message" https://86bwtlv5ya.execute-api.us-east-1.amazonaws.com/sqs_send - 浏览器控制台fetch请求:
fetch('https://86bwtlv5ya.execute-api.us-east-1.amazonaws.com/sqs_send', { method: 'PUT', body: 'This is a test message' })
注:你提到的“Message attributes为空”不影响当前问题,因为这仅用于传递额外的消息属性,和消息体的传递路径无关。
内容的提问来源于stack exchange,提问作者ERJAN
相关产品推荐
相关产品推荐

