2016-07-13 2 views
1

python 및 boto를 사용하여 동료 S3 버킷에 연결하려고합니다. 이전에는 문제없이이 작업을 수행 할 수 있었지만 최근에는 접두사/디렉토리를 버킷에 추가 했으므로 더 이상 키에 액세스 할 수 없습니다.python/boto에서 알려진 키를 검색 할 수 없습니다.

bucket.get_key (keyname)로 키를 얻으려고하면 NoneType을 반환합니다. bucket.get_all_keys()로 모든 키를 얻으면 긴 키 목록을 얻습니다.

>>> s3 = boto.connect_s3() 
>>> bucket = s3.get_bucket('bucket_name') 
>>> keys=bucket.get_all_keys() 
>>> len(keys) 
1000 
>>> keys[5:7] 
[<Key: bucketname,/prod/keyname>, <Key: bucketname,/prod/keyname>] 
>>> keys[6].get_contents_as_string() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/home/myusername/.pyenv/versions/2.7.8/lib/python2.7/site-packages/boto/s3/key.py", line 1782, in get_contents_as_string 
    response_headers=response_headers) 
    File "/home/myusername/.pyenv/versions/2.7.8/lib/python2.7/site-packages/boto/s3/key.py", line 1650, in get_contents_to_file 
    response_headers=response_headers) 
    File "/home/myusername/.pyenv/versions/2.7.8/lib/python2.7/site-packages/boto/s3/key.py", line 1482, in get_file 
    query_args=None) 
    File "/home/myusername/.pyenv/versions/2.7.8/lib/python2.7/site-packages/boto/s3/key.py", line 1514, in _get_file_internal 
    override_num_retries=override_num_retries) 
    File "/home/myusername/.pyenv/versions/2.7.8/lib/python2.7/site-packages/boto/s3/key.py", line 343, in open 
    override_num_retries=override_num_retries) 
    File "/home/myusername/.pyenv/versions/2.7.8/lib/python2.7/site-packages/boto/s3/key.py", line 303, in open_read 
    self.resp.reason, body) 
boto.exception.S3ResponseError: S3ResponseError: 404 Not Found 
<?xml version="1.0" encoding="UTF-8"?> 
<Error><Code>NoSuchKey</Code><Message>The specified key does not exist. 

나는 몇 가지 정보를 가려하지만, 키 이름과 접두사/자극/워드 123-123, 이름에 대시와 숫자가의 형태를 취한다.

이런 이유가있을 수 있습니까? 접두사/디렉토리가 있기 때문에 다르게 취급해야합니까?

편집 : 그냥 접두사가없는 항목을 추가하는 동료가있어서 성공적으로 가져올 수있었습니다.

>>> bucket.get_key('test-bucket-item') 
<Key: bucketname,test-bucket-item> 
>>> key=bucket.get_key('test-bucket-item') 
>>> key.get_contents_as_string() 
'test contents' 
+0

접두사를 포함한 S3 객체 키. – mootmoot

+0

/prod/ecommerce-1077229-1 – neelshiv

+1

미안하지만, S3 Object Key는 모든 것입니다. "접두어"(일명 폴더 이름)로 작성하는 것은 중요하지 않습니다. 그래서 이것은 열쇠와 관련이 없습니다. 버킷 정책을 사용자의 자격 증명과 대조하여 확인하십시오. – mootmoot

답변