请求时间和当前时间之间的差异太大

时间:2014-12-08 01:51:17

标签: amazon-s3 boto

我从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

2 个答案:

答案 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/

在评论中,还有另一个建议是使用更短的套接字超时来解决这个问题。

我对根本原因的猜测:偶尔,一个请求挂在亚马逊一侧的队列中,然后以极大的延迟处理。一些安全检查会启动并阻止执行,并以错误响应。因此,我们可能无法真正“修复”我们的一面。