我的工作层返回400错误,CloudWatch错误?

时间:2014-04-14 18:12:27

标签: amazon-web-services amazon-ec2 amazon-sqs

我有一个连接到SQS的工作层Elastic Beanstalk应用程序。一遍又一遍,我一直在我的日志中返回HTTP 400错误,但我在日志中根本没有收到任何错误消息。

[14/Apr/2014:18:03:26 +0000] "POST /customer-registered HTTP/1.1" 400 192 "-" "aws-sqsd"

我在error_log中没有收到任何错误,我在日志中找到的唯一错误是以下内容,位于/var/log/aws-sqsd/default.log:

2014-04-14T18:02:58Z error: AWS::CloudWatch::Errors::AccessDenied: User: arn:aws:sts::809571490243:assumed-role/aws-elasticbeanstalk-ec2-role/i-a00fffe2 is not authorized to perform: cloudwatch:PutMetricData

如果我去我的IAM用户(我只有1),我有以下政策:

{
   "Version": "2012-10-17",
   "Statement": [
   {
     "Effect": "Allow",
     "Action": "*",
     "Resource": "*"
   }
]
}

我不确定他们在显示“elasticbeanstalk-ec2-role”时是否在错误消息中引用此用户,但我找不到任何其他用户配置文件。我也不确定这是否是造成任何问题的错误。

以下是我正在尝试运行的代码:http://pastebin.com/Tsnnht8b。没什么特别的。它在本地机器上运行良好。

我的队列消息类似于{domain:"http://www.example.com"}

有什么想法吗?

编辑:我能够通过向ec2添加角色来解决CloudWatch:错误:AccessDenied。但这并没有解决问题,即使我尽可能地简化了我的代码,仍然可以获得所有请求的HTTP 400,删除除Flask之外的所有额外模块,只是尝试打印“success”并返回200.

EDIT2:我已经明白这个问题似乎与json = request.get_json()request.json有关。我一使用这一行,就会在日志中收到以下信息:

[Tue Apr 15 06:01:12 2014] [notice] caught SIGTERM, shutting down
[Tue Apr 15 06:01:13 2014] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Tue Apr 15 06:01:13 2014] [notice] Digest: generating secret for digest authentication ...
[Tue Apr 15 06:01:13 2014] [notice] Digest: done
[Tue Apr 15 06:01:13 2014] [notice] Apache/2.2.25 (Unix) DAV/2 mod_wsgi/3.4 Python/2.7.5 configured -- resuming normal operations

如果我甚至没有使用请求中收到的信息,甚至会发生这种情况。例如,如果我执行以下操作:

domain = request.json
domain = "http://staticdomain.com"
...

我仍然得到错误。所以它似乎涉及到SQS发送给我的EC2的POST json的请求。

2 个答案:

答案 0 :(得分:2)

我"解决了#34;这可以通过更改SQS设置以text / plain而不是application / json发送消息。然后我通过以下方式收到数据:

domain = base64.b64decode(request.data) 

我使用b64decode,因为消息是base64编码的。但重点是,当以纯文本形式发送SQS消息时,您可以通过request.data获取它。

它不能解决json问题。我无法找到json导致这些问题的原因,但在我的情况下,如果我用json或text发送它并不重要,因为它只是一个正在发送的字符串。希望这有助于某人。

答案 1 :(得分:1)

以下策略应该为您的EBS实例提供对SQS实例的访问权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "QueueAccess",
            "Action": [
                "sqs:ChangeMessageVisibility",
                "sqs:DeleteMessage",
                "sqs:ReceiveMessage"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Sid": "MetricsAccess",
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}