Boto 请求过期
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 文档我的理解是 Boto 应该在内部处理连接并在需要时获得一个新连接。那是对的吗?我应该为此添加一个参数吗?自己实现一些重试逻辑?
顺便说一句,我使用的是 v2.40。
该应用程序是单线程的。
我发现最终问题出在连接对象上。根据我的测试,assumedRoleObject 可以毫无问题地重复使用。但是,为了以防万一,我在重新创建连接时也重新创建了该对象。
连接正常 1 小时,然后开始失败。
当 运行 长进程时,我不断得到:
...
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 文档我的理解是 Boto 应该在内部处理连接并在需要时获得一个新连接。那是对的吗?我应该为此添加一个参数吗?自己实现一些重试逻辑?
顺便说一句,我使用的是 v2.40。 该应用程序是单线程的。
我发现最终问题出在连接对象上。根据我的测试,assumedRoleObject 可以毫无问题地重复使用。但是,为了以防万一,我在重新创建连接时也重新创建了该对象。
连接正常 1 小时,然后开始失败。