我从S3存储桶下载和删除文件。该存储桶有大约50000个文件。下载并删除每10000或奇数文件后,我收到此错误。
File "/Library/Python/2.7/site-packages/boto/s3/key.py", line 544, in delete
headers=headers)
File "/Library/Python/2.7/site-packages/boto/s3/bucket.py", line 760, in delete_key
query_args_l=None)
File "/Library/Python/2.7/site-packages/boto/s3/bucket.py", line 779, in _delete_key_internal
response.reason, body)
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>RequestTimeTooSkewed</Code><Message>The difference between the request time and the current time is too large.</Message><RequestTime>Sun, 07 Dec 2014 20:09:54 GMT</RequestTime><ServerTime>2014-12-07T21:09:56Z</ServerTime><MaxAllowedSkewMilliseconds>900000</MaxAllowedSkewMilliseconds>
我已经在Mac上运行NTP,它与time.apple.com同步。我还能做些什么才能让它消失?是否有一种更有效的方法来删除S3存储桶中的大量文件/密钥,而不是清除?相关代码块:
try:
f.get_contents_to_filename(fname)
if (choice=="y"): f.delete()
except OSError,e:
print e
答案 0 :(得分:1)
猜猜,也许boto缓存时间,而mac中的振荡器在同一时间内是不准确的。
尝试&#34; Delete Multiple Objects&#34; AWS S3提供的API操作,是删除多个对象的更有效方法。在boto中,它是&#34; boto.s3.bucket.Bucket.delete_keys&#34;。
答案 1 :(得分:1)
我们偶尔会看到此错误,但执行代码的计算机肯定与NTP同步并使用UTC时区。我们在错误消息中看到的偏移量可能是30分钟。
请参阅此处以获取一些观察结果,并建议如何使用超时装饰器在Python中解决此问题:
http://www.saltycrane.com/blog/2010/04/using-python-timeout-decorator-uploading-s3/
在评论中,还有另一个建议是使用更短的套接字超时来解决这个问题。
我对根本原因的猜测:偶尔,一个请求挂在亚马逊一侧的队列中,然后以极大的延迟处理。一些安全检查会启动并阻止执行,并以错误响应。因此,我们可能无法真正“修复”我们的一面。