【问题标题】:Setting SNS message attributes via query params when calling the HTTP API调用 HTTP API 时通过查询参数设置 SNS 消息属性
【发布时间】:2021-07-10 16:18:55
【问题描述】:

所以我使用 SNS HTTP API 来发布消息,消息格式如下:

POST https://sns.ap-south-1.amazonaws.com/
    ?Action=Publish
    &Message=%7B%22hello%22:%22World%22%7D
    &TopicArn=arn:aws:sns:ap-south-1:1234567890:sns-topic-name
    &Subject=some-subject

我不能将他们的标准 API 与请求正文一起使用的原因是 API Gateway -> SNS 集成似乎不支持它,或者实际上需要大量的请求重写,我什至不确定这是否可能没有在两者之间放置 Lambda。而且我不能在两者之间添加一个 lambda,因为对于这个特定的管道有一个仅 HA 服务的严格要求。

上面的集成工作完美,没有问题。现在的问题是,我也想发送消息属性,但是我几乎找不到关于在调用 HTTP 端点时如何在查询字符串中编码它们的文档。我尝试了以下方法:

   &MessageAttribute.entry.1.Name=message-key
   &MessageAttribute.entry.1.Value=message-value
   &MessageAttribute.entry.1.Name=message-key
   &MessageAttribute.entry.1.DataType=String
   &MessageAttribute.entry.1.Value=message-value
   &MessageAttribute.entry.1.Name=message-key
   &MessageAttribute.entry.1.DataType=String
   &MessageAttribute.entry.1.StringValue=message-value

当我第一次尝试使用 entry.0 时,我收到一个错误“0 是无效索引” - 所以我尝试使用 1。我现在得到的错误总是“复杂结构的意外结束”,即使在搜索时也没有找到任何地方。

我尝试将aws cli 与--debug 一起使用,看起来他们正在使用带有特定于SNS 的主体的POST 请求,正如我上面提到的,这并不是一个真正的选择。任何帮助将不胜感激。

【问题讨论】:

  • 您找到解决方案了吗?它把我逼疯了……据我所知,它应该是MessageAttributes.entry.1.Value.DataType=String 和MessageAttributes.entry.1.Value.StringValue=message-value。复数。
  • 哎呀!我的参数名称有问题。确保它是 MessageAttributes,并且您在两个值部分中有 .Value。
  • 我的 API DefinitionBody 的要点,其中包括对 SNS 的请求重写(没有 lambda)。 gist.github.com/datashaman/054f128968311cc7c4a20c51f7bd21ee

标签: aws-api-gateway amazon-sns


【解决方案1】:

这是为 SNS 发布字符串消息属性的正确方法:

&MessageAttributes.entry.1.Name=message-key
&MessageAttributes.entry.1.Value.DataType=String
&MessageAttributes.entry.1.Value.StringValue=message-value

特别注意它是一个复数 MessageAttributes,单词entry,还有Value。

【讨论】:

    猜你喜欢
    • 2014-11-17
    • 2020-03-27
    • 1970-01-01
    • 2017-10-23
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 2022-08-20
    • 2011-09-09
    相关资源
    最近更新 更多