列出存储桶的对象通过boto工作,但通过boto3抛出错误

时间:2017-03-10 12:32:54

标签: amazon-web-services amazon-s3 boto3

我想列出一个桶的对象。 我在boto中使用了以下代码,它工作正常

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:调用ListObjects操作时发生错误(MethodNotAllowed):不允许对此资源使用指定的方法。

下面的

是给出错误的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']

1 个答案:

答案 0 :(得分: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服务中,则访问键行会让您头疼。

只需设置您的本地.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)