如何从API网关集成请求向SNS发布添加消息属性

Pat*_*ick 3 amazon-sns aws-api-gateway

我可以使用CLI找到这种格式

aws sns publish --topic-arn arn:aws:sns:us-west-2:111111111111:test
    --message "Testing the CLI" 
    --subject "From the CLI" --message-attributes "{\"somename\":
        {\"DataType\":\"String\",\"StringValue\":\"somevalue\"}}"
Run Code Online (Sandbox Code Playgroud)

但我无法找到(或弄清楚)的是如何从API网关上的集成请求中执行此操作.

我认为它需要作为集成请求的查询参数来完成,但语法与为SQS添加消息属性不同.我通过使用此示例的参数命名符号来测试它:

MessageBody=This+is+a+test+message
MessageAttribute.1.Name=test_attribute_name_1
MessageAttribute.1.Value.StringValue=test_attribute_value_1
MessageAttribute.1.Value.DataType=String
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

MessageAttributes   '{"store":{"DataType":"String","StringValue":"example_corp"}}'
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

到目前为止无法让它工作,任何帮助都非常感激.

Lar*_*ars 7

在对AWS文档进行深入研究后,我发现没有准确的文档将API网关资源方法中的SNS Publish MessageAttributes设置为URL查询字符串参数.

根据他们在这里给出的部分语法示例:https://docs.aws.amazon.com/sns/latest/api/API_Publish.html,然后我就能把它扔到它上面,直到出现问题为止.

这是您需要使用的正确的点符号语法和参数:

MessageAttributes.entry.1.Name = "Attribute1"
MessageAttributes.entry.1.Value.DataType = 'String'
MessageAttributes.entry.1.Value.StringValue = 'Test'
Run Code Online (Sandbox Code Playgroud)

需要"Name"和"DataType"的地方.

在此输入图像描述

干杯!

  • 所以最重要的是,在SQS中有MessageAttribute.#.在SNS中它的MessageAttributes.entry.#.谢谢! (2认同)