2017-03-10 13 views
0

我想列出一個桶的對象。 我用下面的代碼在伯特和它工作得很好列出一個桶的對象通過boto工作,但通過boto3拋出錯誤

from boto.s3.connection import S3Connection 
from boto.s3.connection import OrdinaryCallingFormat 
from boto.s3.key import Key 

destination = S3Connection(aws_access_key_id=aws_access_key_id, aws_secret_access_key='lokesh', is_secure=False, port=9090, host=host, calling_format=OrdinaryCallingFormat()) 
destination_bucket = destination.get_bucket(bucket_name) 

destination_all_keys = destination_bucket.get_all_keys() 
print destination_all_keys 
for key in destination_all_keys: 
    print key 

但是,如果我使用boto3,然後我得到錯誤

botocore.exceptions.ClientError:發生錯誤(MethodNotAllowed)調用時ListObjects操作:指定的方法不允許針對此資源。下面

是boto3代碼,讓錯誤

import boto3 
destination = boto3.client('s3', 
        endpoint_url=endpoint, 
        aws_access_key_id=aws_access_key_id, 
        aws_secret_access_key=aws_secret_access_key, 
        use_ssl=False, 
        config=timeout_config 
        ) 

destination.list_objects(Bucket=bucket_name)['Contents'] 

回答

0

正確的方式做,這是boto3使用boto3 session

import boto3 
sess = boto3.session(
    endpoint_url=endpoint, 
    aws_access_key_id=aws_access_key_id, 
    aws_secret_access_key=aws_secret_access_key, 
    use_ssl=False, 
    config=timeout_config) 

s3 = sess.client("s3") 
s3.list_objects(Bucket=bucket_name) 

另外,傳遞API密鑰是一個糟糕的設計。如果您將應用程序部署到使用IAM角色的任何AWS服務中,accesskey行將讓您頭疼。

只需設置您的本地.aws憑證文件,您就可以使用此類簡單設置。

import boto3 
sess = boto3.session(
     endpoint_url=endpoint, 
     use_ssl=False, 
     config=timeout_config) 

    s3 = sess.client("s3") 
    s3.list_objects(Bucket=bucket_name) 
+0

我嘗試使用會話,而是我得到了錯誤 類型錯誤:「模塊」對象不是可調用 好像boto3.session是不可呼叫 – user3463896

+0

@ user3463896:我。始終使用'virtualenv'或'conda'虛擬開發環境。 II。使用'pip install boto3 --upgrade'更新你的boto3 – mootmoot

相關問題