如何重命名AWS S3 Bucket

14 浏览
0 Comments

如何重命名AWS S3 Bucket

经过所有的迁移等艰难工作后,我意识到我需要使用CNAME来提供内容(例如media.abc.com)。桶名称需要以media.abc.com/S3/amazon.com开头,以确保它可以完美地工作。

我刚刚意识到S3不允许直接在控制台中重命名。

有没有什么方法可以解决这个问题?

admin 更改状态以发布 2023年5月23日
0
0 Comments

我认为唯一的方法是创建一个名称正确的新存储桶,然后将旧存储桶中的所有对象复制到新存储桶中。您可以使用AWS CLI完成此操作。

0
0 Comments

解决方案

aws s3 mb s3://[new-bucket]
aws s3 sync s3://[old-bucket] s3://[new-bucket]
aws s3 rb --force s3://[old-bucket]

解释

由于 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

0