【发布时间】:2021-05-13 21:44:34
【问题描述】:
场景:
我想要一个将 HTTP POST 调用请求正文转发到 AWS SQS 服务的 AWS API 网关路由。 我使用 API 网关的新 AWS 控制台界面和 Amazon Simple Queue Service 作为集成目标成功地做到了这一点。
现在,问题是我想将特定的请求标头值作为 Message 属性发送给 SQS,但是控制台中可接受的格式是模棱两可的!
我尝试了在我能找到的文档、线程和书籍上找到的任何内容,甚至尝试了其他服务值格式中的一些类似符号,但没有任何效果。
当我尝试为 Message 属性设置不同的值时,如下所示,它开始返回 400 错误状态代码以响应之前工作的 HTTP 请求。
我只想将请求标头沿请求正文发送到 SQS,因此我有存储在请求标头中的基本数据来处理消息。
尝试过的值:
- $request.header.valueX
- {"somename":"$request.header.valueX"}
- {"Name":"somename","Value":{"DataType":"String","StringValue":"$request.header.valueX"}}
在 AWS 控制台中,对于 SQS 的 API 网关集成中的消息属性(可选)高级设置,上述格式均不可接受。
我找不到任何适合消息属性的值格式。
非常感谢
更新:
我尝试了一个适合我的解决方案:
因为我可以控制服务的客户端,所以我定义了一个新的自定义标头 (sample1),其值采用以下格式:
{"CUSTOM-ATTRIBUTE-NAME": {"DataType": "String", "StringValue": "CUSTOM-ATTRIBUTE-VALUE"}}
在 API Gateway 的 SQS 集成页面的 Message 属性 - 可选 中,我将值设置为 $request.header.sample1
custom-attribute-name 将是 SQS 消息属性名称,CUSTOM-ATTRIBUTE-VALUE 将是值。
现在,当我收到来自 SQS 的消息时,消息属性中有完整的请求消息正文和我的自定义标头。
【问题讨论】:
标签: amazon-web-services aws-api-gateway integration amazon-sqs