我是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}$"
我需要帮助。
答案 0 :(得分:2)
从例外情况看,您传递的Bucket Name似乎没有遵循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
作为存储桶名称。