Amazon SQS 作为 IoT 消息入口点

Amazon SQS as IoT message entrypoint

我正在尝试将 Elasticsearch Service、Logstash 和 Amazon SQS 组合在一起,作为来自各种 IoT 设备的消息的接收点,发送需要存储在 ES 中的消息。

我希望作为概念的初始证明,我可以使用 SQS 作为一种方法来 a) 缓冲任何 Elasticsearch 停机时间(即在它恢复时保留消息)和 b) 将消息分发到 ES以比简单地打开 Elasticsearch 进行 public 插入更均匀、统一的方式。

由于Elasticsearch不能拉取消息,SQS不能推送消息,所以我使用安装在EC2实例上的Logstash作为中间人拉取再推送。这似乎有效,但仅当消息通过 SQS "Send Message" 控制台或我订阅 SQS 的 SNS 主题发送时才有效。

尝试通过 cURL 向 SQS 发送消息时,我收到 "AccessDenied" 或 "UnknownOperationException"。我将策略设置为 Principal: * 和 Action:SQS:*。以下是我对 SQS 的许可政策:

{
  "Version": "2012-10-17",
  "Id": "arn:aws:sqs:us-east-1:843348267853:testQueue/SQSDefaultPolicy",
  "Statement": [
    {
      "Sid": "Sid1445050222773",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "SQS:*",
      "Resource": "arn:aws:sqs:us-east-1:843348267853:testQueue"
    }
  ]
}

我尝试了多种不同的 cURL 命令:

curl -H "Accept: application/json" -d "key=value&key1=value1" https://sqs.us-east-1.amazonaws.com/843348267853/testQueue

< UnknownOperationException />

curl -k -vv -XPOST 'https://sqs.us-east-1.amazonaws.com/843348267853/testQueue' -d '{\"name\":\"Mike\"}'

upload completely sent off: 131 out of 131 bytes
HTTP/1.1 403 Forbidden
Server Server is not blacklisted
Server: Server Date: Sat, 17 Oct 2015 02:53:44 GMT
Content-Type: text/xml Content-Length: 341
Connection: keep-alive x-amzn-RequestId: 61f08380-ec65-5229-8732-cd1b561d2069

Connection #0 to host sqs.us-east-1.amazonaws.com left intact SenderAccessDeniedAccess to the resource https://sqs.us-east-1.amazonaws.com/843348267853/testQueue is denied.61f08380-ec65-5229-8732-cd1b561d2069

我尝试了 cURL 命令的多种其他变体,但没有成功。

我的印象是,为 * (ALL) 用户选择 * (ALL) 权限会允许 public / 匿名消息发送权限?

显然,我的目标是将其限制为特定用户,但目前,我还没有达到这一点,我们还没有达到从 IoT 设备签署消息的程度.

我的问题是:

1) 无法通过 cURL 发送消息,我做错了什么? 2) 我的架构是否正确(即 Public msg -> SQS -> EC2 Logstash -> ES)?或者我应该以不同的方式处理这个问题?

谢谢。

据我所知,SQS 没有直接的 POST 机制来简单地接受消息负载,就像您在这里尝试做的那样。

API 需要更像 Web 表单的东西。

http://postdocs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html

这个语法似乎工作正常:

curl -d "Action=SendMessage&Version=2011-10-01&MessageBody=example" https://sqs.us-east-1.amazonaws.com/843348267853/testQueue