2014-12-08 1 views
0

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에서는 이미 time.apple.com과 동기화되는 NTP를 실행하고 있습니다. 이 문제를 해결하기 위해 내가 할 수있는 또 다른 조치는 무엇입니까? S3 버킷의 많은 수의 파일/키를 지우는 것보다 더 효율적인 방법이 있습니까? 관련 코드 블록 :

+0

명령이 실행 된 시간은 얼마입니까? – helloV

+0

실행하는 데 시간이 걸립니다. 한 시간 이상. –

답변

1

시간을 보토 캐쉬하고 Mac의 오실레이터가 같은 시간에 정확하지 않습니다.

AWS S3에서 제공하는 API 작업 ""을 사용해보십시오. 많은 객체를 삭제하는 것이 더 효율적입니다. boto에서는 "boto.s3.bucket.Bucket.delete_keys"입니다.

+0

"boto cache the time"문장을 자세히 설명해 주시겠습니까? 예를 들면? –

1

코드를 실행하는 시스템이 NTP와 확실히 동기화되어 있고 UTC 시간대를 사용하더라도이 오류가 간혹 발생합니다. 오류 메시지에보고 된 오프셋은 30 분이 될 수 있습니다.

몇 가지 관찰 여기를 참조 제안은 어떻게 시간 제한 장식을 사용하여 파이썬에서이 문제를 해결하기 위해 : 코멘트에

http://www.saltycrane.com/blog/2010/04/using-python-timeout-decorator-uploading-s3/

는 또한 짧은 소켓 타임 아웃을 사용하여이 문제를 해결하는 또 다른 제안이있다.

내 생각 엔 근본 원인에 대해 생각해보십시오. 매 순간마다 아마존 측의 대기열에 요청이 지연되고 거대한 지연으로 처리됩니다. 일부 보안 검사가 실행되어 이행을 방해하고 대신 오류로 응답합니다. 그래서 우리 편에서 정말로 "고칠"수는 없습니다.