【发布时间】: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