python 创建s3 Bucket时出现Boto3异常

mzaanser  于 2023-03-11  发布在  Python
关注(0)|答案(3)|浏览(175)

我尝试使用以下内容创建一个桶:

s3_client = boto3.client('s3',
                         aws_access_key_id=api_id,
                         aws_secret_access_key=apikey,
                         region_name='us-east-1')

bucket_name = 'test1'

s3_client.create_bucket(Bucket=bucket_name)

我在SO和Github上到处都看到了同样的代码,它本来是可以工作的,但是我遇到了这个异常:

botocore.exceptions.ClientError: An error occurred (IllegalLocationConstraintException) when calling the CreateBucket operation: The unspecified location constraint is incompatible for the region specific endpoint this request was sent to.

根据我的研究,这意味着我应该指定区域(我在这里的客户端中这样做了),我还尝试了以下行(使用us-east-2只是为了测试不同的区域):

s3_client.create_bucket(Bucket=bucket_name, CreateBucketConfiguration={'LocationConstraint': 'us-east-2'})

但这仍然会抛出一个异常:

botocore.exceptions.ClientError: An error occurred (IllegalLocationConstraintException) when calling the CreateBucket operation: The us-east-2 location constraint is incompatible for the region specific endpoint this request was sent to.

我也试过这个代码:

s3_client = boto3.client('s3',
                         aws_access_key_id=api_id,
                         aws_secret_access_key=apikey)

bucket_name = 'test1'

s3_client.create_bucket(Bucket=bucket_name)

并且指定了我的.aws配置文件:

[default]
region = us-east-1
output = json

据我所知,这些方法中的一个应该可以工作,如果这是一个auth问题,我会得到那个异常。
谁能给我指一下正确的方向?

im9ewurl

im9ewurl1#

请参考AWS Code Library,它包含了Python的最新SDK示例。在本文档中找到的所有代码示例都经过了多次测试,并且可以正常工作。
本文档是查找AWS SDK代码示例的参考文档,其中包含最新的代码示例。
请参阅此主题:
Create an Amazon S3 bucket using an AWS SDK
本示例包含许多不同的SDK示例,包括Python。

lskq00tm

lskq00tm2#

当代码运行时,它会向所需区域中的AWS端点发送请求。
由于您的配置文件具有region = us-east-1,因此请求将发送到North Virginia地区。
该区域中的Amazon S3 * 只能 * 在“自身”(us-east-1)中创建存储桶。因此,您需要指定{'LocationConstraint': 'us-east-2'} * 或者 * 您需要连接到要创建存储桶的区域中的Amazon S3:

s3_client = boto3.client('s3', region_name='us-east-2')

简单地说,在创建Amazon S3 bucket时,您要连接到的区域必须与LocationConstraint匹配。

jdgnovmf

jdgnovmf3#

只要我不尝试写入us-east-1,它就能工作,其他任何区域都能正常工作。

相关问题