【问题标题】:What is the specific format Message attributes in AWS api gateway integration with AWS SQS?AWS api 网关与 AWS SQS 集成中的具体格式消息属性是什么?
【发布时间】: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


    【解决方案1】:

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

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

    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 之间的这种集成是可能的。

    【讨论】:

    • 谢谢,虽然它不适用于大多数标准标题值,但它适用于以下格式的自定义标题值。 {"CUSTOM-ATTRIBUTE-NAME": {"DataType": "String", "StringValue": "CUSTOM-ATTRIBUTE-VALUE"}} 和消息属性 - 可选我确实设置了 $request.header.myheader
    • @Khatibzadeh 感谢您现在的安排。很高兴它解决了:-)
    【解决方案2】:

    晚了一年...但我刚刚在消息属性字段中使用了这种语法:

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

    AWS Console

    Resulting SQS message

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-23
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 2020-05-01
    • 2021-07-27
    • 2019-12-01
    相关资源
    最近更新 更多