我尝试使用以下内容创建一个桶:
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问题,我会得到那个异常。
谁能给我指一下正确的方向?
3条答案
按热度按时间im9ewurl1#
请参考AWS Code Library,它包含了Python的最新SDK示例。在本文档中找到的所有代码示例都经过了多次测试,并且可以正常工作。
本文档是查找AWS SDK代码示例的参考文档,其中包含最新的代码示例。
请参阅此主题:
Create an Amazon S3 bucket using an AWS SDK
本示例包含许多不同的SDK示例,包括Python。
lskq00tm2#
当代码运行时,它会向所需区域中的AWS端点发送请求。
由于您的配置文件具有
region = us-east-1
,因此请求将发送到North Virginia地区。该区域中的Amazon S3 * 只能 * 在“自身”(
us-east-1
)中创建存储桶。因此,您需要指定{'LocationConstraint': 'us-east-2'}
* 或者 * 您需要连接到要创建存储桶的区域中的Amazon S3:简单地说,在创建Amazon S3 bucket时,您要连接到的区域必须与
LocationConstraint
匹配。jdgnovmf3#
只要我不尝试写入us-east-1,它就能工作,其他任何区域都能正常工作。