为什么从AWS CLI订阅到SNS主题会产生意外的有效负载?

时间:2017-01-20 14:20:11

标签: amazon-web-services amazon-sns aws-cli

我必须做一些可怕的错误,但当我尝试使用AWS CLI订阅SNS主题时,如下所示:

aws sns subscribe --topic-arn <valid-arn> --protocol http --endpoint-url <valid, accessible URL>

我得到了一个完全出乎意料的POST负载:

POST /api/aws/sns HTTP/1.1
Host: <censored>
Accept-Encoding: identity
User-Agent: aws-cli/1.11.38 Python/3.6.0 Linux/4.8.13-1-ARCH botocore/1.5.1
X-Amz-Date: 20170120T140758Z
Authorization: <censored>
Content-Length: 127
Content-Type: application/x-www-form-urlencoded

Action=Subscribe&Version=2010-03-31&TopicArn=censored&Protocol=http[!http]

根据the documentation

  

您的代码应该读取HTTP POST请求的HTTP标头   Amazon SNS发送到您的终端。你的代码应该寻找   标题字段x-amz-sns-message-type,它告诉你的类型   Amazon SNS发送给您的消息。

所以它应该是一个至少包含x-amz-sns-message-type标题的JSON文档。

此外,验证POST请求是从我的主机到URL端点,这看起来很奇怪。

从AWS CLI订阅SNS主题与Web控制台之间是否存在根本区别?

1 个答案:

答案 0 :(得分:2)

您应该使用--notification-endpoint而不是--endpoint-urlendpoint-url参数用于告知AWSCLI将实际subscribe请求发送到何处。这就是你所看到的。

aws sns subscribe --topic-arn <valid-arn> --protocol http --notification-endpoint <valid, accessible URL>