Answers:
我认为唯一的方法是使用正确的名称创建一个新存储桶,然后将所有对象从旧存储桶复制到新存储桶。您可以使用Aws CLI执行此操作。
aws s3 mb s3://[new-bucket]
aws s3 sync s3://[old-bucket] s3://[new-bucket]
aws s3 rb --force s3://[old-bucket]
S3没有重命名存储桶功能,因为从技术上讲,S3中没有文件夹,因此我们必须处理存储桶中的每个文件。
上面的代码将1.创建一个新存储桶,2.复制文件,并3.删除旧存储桶。而已。
如果您的存储桶中有很多文件,并且担心成本,请继续阅读。在幕后发生的情况是,首先复制存储桶中的所有文件,然后再删除它们。如果您有几千个文件,它的成本应该微不足道。否则,请检查此答案以查看对您的影响。
在以下示例中,我们创建并填充了旧存储桶,然后将文件同步到新存储桶。检查命令的输出以查看AWS的功能。
> # bucket suffix so we keep it unique
> suffix="ieXiy2" # used `pwgen -1 -6` to get this
>
> # populate old bucket
> echo "asdf" > asdf.txt
> echo "yxcv" > yxcv.txt
> aws s3 mb s3://old-bucket-$suffix
make_bucket: old-bucket-ieXiy2
> aws s3 cp asdf.txt s3://old-bucket-$suffix/asdf.txt
upload: ./asdf.txt to s3://old-bucket-ieXiy2/asdf.txt
> aws s3 cp yxcv.txt s3://old-bucket-$suffix/yxcv.txt
upload: ./yxcv.txt to s3://old-bucket-ieXiy2/yxcv.txt
>
> # "rename" to new bucket
> aws s3 mb s3://new-bucket-$suffix
make_bucket: new-bucket-ieXiy2
> aws s3 sync s3://old-bucket-$suffix s3://new-bucket-$suffix
copy: s3://old-bucket-ieXiy2/yxcv.txt to s3://new-bucket-ieXiy2/yxcv.txt
copy: s3://old-bucket-ieXiy2/asdf.txt to s3://new-bucket-ieXiy2/asdf.txt
> aws s3 rb --force s3://old-bucket-$suffix
delete: s3://old-bucket-ieXiy2/asdf.txt
delete: s3://old-bucket-ieXiy2/yxcv.txt
remove_bucket: old-bucket-ieXiy2
--acl bucket-owner-full-control
(在类似的答案)
aws --region ap-southeast-2 s3 mb s3://new-bucket
可能是更高版本的AWS CLI工具箱提供了该mv
选项。
$ aws --version
aws-cli/1.15.30 Python/3.6.5 Darwin/17.6.0 botocore/1.10.30
我正在使用以下命令重命名存储桶:
aws s3 mv s3://old-bucket s3://new-bucket --recursive
new-bucket
必须在运行命令之前先创建。此外,old-bucket
则将为空,但不会删除。如果要在传输所有文件后将其删除,请使用以下命令(不带尖括号):aws s3api delete-bucket --bucket <old-bucket> --region <region id>
aws s3 mv
实际上是复制和删除,因此财务成本应该相同(我认为)。