У меня есть приложение Elastic Beanstalk рабочего уровня, подключенное к SQS. Снова и снова я получаю сообщение об ошибке 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"}
Любые идеи?
EDIT: мне удалось решить CloudWatch:Errors:AccessDenied, добавив роль в файл ec2. Но это не решило проблему, я все еще получаю HTTP 400 на всех запросах, даже если я максимально упрощаю свой код, удаляя все лишние модули, кроме Flask, и просто пытаюсь вывести «успех» и вернуть 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"
...
Я все еще получаю сообщение об ошибке. Так что, похоже, он участвует в запросе POST json, который SQS отправляет на мой EC2.