我想知道boto3中的示例存储桶名称

时间:2018-01-10 12:00:09

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

我是AWS的新手,我使用boto3将文件上传到s3。但在配置boto3连接时我有点困惑。以下是代码。

import boto3
s3 = boto3.resource(
    's3',
    aws_access_key_id='access_key',
    aws_secret_access_key='secret_key'
)

data = open('test.txt', 'rb')
s3.Bucket('bucketname').put_object(Key='test.txt', Body=data)

I tried to print the bucket names using below code and it worked well.

for bucket in s3.buckets.all():
    print(bucket.name)

但是,如果我给出了桶名 s3.Bucket('xxxxxx').put_object(Key='test.txt', Body=data)

我得到错误:

botocore.exceptions.ParamValidationError: Parameter validation failed:
Invalid bucket name "xxxxxx": Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$"

我需要帮助。

2 个答案:

答案 0 :(得分:2)

从例外情况看,您传递的Bucket Name似乎没有遵循S3 Bucket Name限制。

Rules for S3 Bucket name

从上面链接:

  

符合DNS的存储桶名称的规则如下:

     

•存储桶名称长度必须至少为3且不超过63个字符。

     

•存储桶名称必须是一系列一个或多个标签。相邻标签   由一个句点(。)分隔。存储桶名称可以包含   小写字母,数字和连字符。每个标签必须开始和结束   用小写字母或数字。

     

•不得将存储桶名称格式化为IP地址(例如,   192.168.5.4)。

也...

  

重要

     

2018年3月1日,我们正在更新S3的命名约定   在美国东部(弗吉尼亚北部)地区的水桶匹配命名   我们在所有其他全球AWS区域中使用的约定。在这之后   日期,Amazon S3将不再支持创建存储桶名称   包含大写字母或下划线。这种变化确保了这一点   可以使用虚拟主机样式寻址来寻址每个桶   为https://myawsbucket.s3.amazonaws.com。我们强烈推荐你   检查您现有的存储桶创建过程,以确保您的   遵守我们符合DNS标准的命名约定。

答案 1 :(得分:0)

如果存储桶为s3://my-bucket-x/,请在my-bucket-x中使用boto3作为存储桶名称。