AWS api 网关与 AWS SQS 集成中的消息属性的具体格式是什么?

What is the specific format Message attributes in AWS api gateway integration with AWS SQS?

场景:

我想要一个 AWS API 网关路由,用于将 HTTP POST 调用请求 body 转发到 AWS SQS 服务。 我使用 API 网关的新 AWS 控制台界面和 Amazon Simple Queue 服务作为集成目标成功地做到了这一点。

现在,问题 是我想将特定请求 header 值作为消息属性发送到 SQS,但控制台中可接受的格式非常模糊!

我尝试了我能找到的文档、主题和书籍中的任何内容,甚至尝试了其他服务值格式中的一些类似符号,但没有任何效果。

当我尝试像下面这样为 Message 属性设置不同的值时,它开始返回 400 错误状态代码以响应之前有效的 HTTP 请求。

我只想将请求 header 连同请求 body 一起发送到 SQS,因此我有存储在请求 header 上的基本数据来处理消息。

尝试值:

 - $request.header.valueX
 - {"somename":"$request.header.valueX"}
 - {"Name":"somename","Value":{"DataType":"String","StringValue":"$request.header.valueX"}}

none 以上格式在 API SQS 网关集成中的消息属性(可选)高级设置的 AWS 控制台中是可接受的。

我找不到任何合适的消息属性值格式。

非常感谢

更新:

我尝试了一个对我有用的解决方案:

因为我可以控制服务的客户端,所以我定义了一个新的自定义 header(示例 1),其值采用以下格式:

{"CUSTOM-ATTRIBUTE-NAME": {"DataType": "String", "StringValue": "CUSTOM-ATTRIBUTE-VALUE"}}

Message属性-optional在API Gateway的SQS集成页面中,我将值设置为$request.header .sample1

custom-attribute-name 将是 SQS 消息属性名称,CUSTOM-ATTRIBUTE-VALUE 将是值。

现在当我收到来自 SQS 的消息时,我在消息属性中同时拥有完整的请求消息 body 和我的自定义 header。

目前看来,在 HTTP API 中手动定义此类集成是不可能的,如 this 最近的 reddit post 所示。 post 还表示这已得到 AWS 支持人员的确认。

通过 HTTP api 将属性添加到 SQS 消息的唯一方法是 post 它们与消息一起简单地添加,例如使用卷曲:

curl -i -X POST https://44444444.execute-api.ap-southeast-2.amazonaws.com/sqs -H "Content-Type: application/json" --data '{"MessageBody":"ggg","MessageAttributes":{"newattribte":{"StringValue":"safffmple","DataType":"String"}}}'

Message attributes - optional 设置为 $request.body.MessageAttributes 时。

备选方案是更改为 REST API,后者在未来的应用范围更大,并且 API 和 SQS 之间的这种集成是可能的。

晚了一年...但我刚刚在“消息属性”字段中使用了以下语法:

{
  "product":
  {
    "DataType":"String",
    "StringValue":"${request.path.product}"
  }
}

AWS Console

Resulting SQS message