2016-06-23 2 views
1

При выполнении длительных процессов я получаю:Boto RequestExpired

... 
content_repl/replicate_content.py", line 667, in detach_and_delete 
    volumes = ec2_conn.get_all_volumes(volume_ids=volumes_ids) 
    File "/usr/lib/python2.7/site-packages/boto/ec2/connection.py", line 2158, in get_all_volumes 
    [('item', Volume)], verb='POST') 
    File "/usr/lib/python2.7/site-packages/boto/connection.py", line 1186, in get_list 
    raise self.ResponseError(response.status, response.reason, body) 
boto.exception.EC2ResponseError: EC2ResponseError: 400 Bad Request 
<?xml version="1.0" encoding="UTF-8"?> 
<Response><Errors><Error><Code>RequestExpired</Code><Message>Request has expired.</Message></Error></Errors><RequestID>xxxxxxxx</RequestID></Response> 

Обратите внимание, что многие операции выполняются по сценарию без проблем. В начале сценария у меня есть:

ec2_conn = boto.ec2.connect_to_region(AWS_REGION, 
    aws_access_key_id=assumedRoleObject.credentials.access_key, 
    aws_secret_access_key=assumedRoleObject.credentials.secret_key, 
    security_token=assumedRoleObject.credentials.session_token,proxy=PROXY,proxy_por=PROXY_PORT) 

Чтение Boto connect_xxx method and connection pools и Boto DOCS я понимаю, что Boto должен обрабатывать соединения внутри и получить новый, когда это необходимо. Это верно? Должен ли я добавить параметр для этого? Реализовать логику повторов самостоятельно?

Btw, я использую v2.40. Приложение однопоточное.

+1

Вы проверили время на этом компьютере, чтобы узнать, является ли оно точным? Запросы имеют временную метку для предотвращения повторных атак, поэтому мне интересно, может ли это быть причиной сообщения об истечении срока действия? –

+0

@JohnRotenstein У меня есть, поэтому я упомянул, что многие операции выполнялись раньше. Я думаю, что проблема заключается в тайм-ауте, но, похоже, это проблема, которую я не должен иметь, если соединения обрабатываются автоматически. – Federico

+1

Изучите содержимое ответа от 'предполагаетсяRoleObject.credentials.session_token'. Токены истекают. Не уверен, что это сообщение, которое вы получили бы, если это проблема, но они истекают. –

ответ

0

Я обнаружил, что в конце концов проблема была связана только с объектом соединения. Согласно моему тестированию, предполагаемый RoleObject можно было бы использовать без проблем. Однако на всякий случай, я воссоздал этот объект, когда я воссоздал соединение.

Соединения хороши в течение 1 часа, после чего они начинают сбой.