'key'에 해당되는 글 1건

  1. 2012.02.23 [S3] key.copy와 bucket.copy_key에서 발생하는 NoSuchKey 에러

[S3] key.copy와 bucket.copy_key에서 발생하는 NoSuchKey 에러


배경:

아마존의 클라우드 서비스를 프로젝트에 적용하면서, 프로젝트가 Python 기반의 장고이기에 AWS를 제어하기 위하여 boto를 사용하고 있다. 지금까지는 무탈하게 사용하여 왔으나, S3의 데이터를 다른 위치로 복사하는 기능을 구현하기 위하여 작업하던 중 난감한 에러를 만나게 되었다.
복사를 위하여 Key의 copy와 Bucket의 copy_key를 모두 사용하여 보았는데, 지속적으로 아래와 같은 에러를 발생하는 것이었다.

S3ResponseError: 404 Not Found

<Error>

<Code>NoSuchKey</Code>

<Message>The specified key does not exist.</Message>

<Key>/path/of/file/in/bucket</Key>

<RequestId>****************</RequestId>

<HostId>****************************************************************</HostId>

</Error>


특별히 사용법이 어려운 것도 아니고, 개인적으로 오픈소스를 무한 신뢰하는 성격이라서 boto를 최신 버전으로 업데이트까지 해가며 몇 시간을 삽질하다가 결국 boto의 함수를 직접 열어 보았다.


환경:
Mac OS X Lion
Python 2.6
boto 2.2.2


원인:
본인은 일반적으로 bucket의 key를 열 때, 키의 문자열을 다음과 같이 만들어 연다.
대부분의 API에서는 아래와 같이 사용했을 때, key도 바르게 열리고 문제가 발생하지 않는다.

keypath = os.path.join('/', project_id, filename)

 
그런데 문제는 copy와 copy_key API 내부에서 복사 리퀘스트를 날릴 때, bucket 이름과 key를 연결하여 인자로 날리는데, 위와 같이 key를 지정할 경우 'bucket//project_id/filename'으로 인자를 만들어 날리고, S3에서는 존재하지 않는 key라고 응답을 하는 것이다. 이런 황당할 때가...


해결:
코드를 아래와 같이 수정한다.

keypath = os.path.join(project_id, filename)

 
 

이걸 버그라고 신고해야하나 말아야 하나... ㅋ