我想列出一个桶的对象。 我在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']
答案 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)