我有一個連接到SQS的工作層Elastic Beanstalk應用程序。一遍又一遍,我不斷收到在我的日誌中返回的HTTP 400錯誤,但是我在日誌中根本沒有收到任何錯誤消息。我的工作層返回400錯誤,CloudWatch錯誤?
[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": "*"
}
]
}
我不知道他們是否是指該用戶在錯誤信息時,它說:「彈性beanstalk-ec2-role「,但我找不到任何其他用戶配置文件。我也不確定這是否是導致任何問題的錯誤。
這是我正在嘗試運行的代碼:http://pastebin.com/Tsnnht8b。沒什麼特別的。它在本地機器上正常運行。
我的隊列中的消息是這樣{domain:"http://www.example.com"}
任何想法?
編輯:我能夠通過向ec2添加角色來解決CloudWatch:Errors:AccessDenied。但是這並沒有解決問題,即使我儘可能簡化我的代碼,我仍然可以獲得HTTP 400,除了Flask之外,還可以刪除所有額外的模塊,只是試圖打印「成功」並返回200.
編輯2:我已經能夠認識到這個問題似乎與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請求。
對於存取遭拒,你需要修改你的角色,讓CloudWatch的PutMetricAccess。 http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.iam.roles.aeb.html#AWSHowTo.iam.policies.actions.worker –