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 SenderAccessDenied
Access
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
我正在尝试将 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-cd1b561d2069Connection #0 to host sqs.us-east-1.amazonaws.com left intact Sender
AccessDenied
Access 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