如何重命名AWS S3存储桶名称


150

毕竟,在进行了艰苦的移植工作之后,只需意识到如果需要使用CNAME来提供内容(例如media.abc.com)。存储桶名称需要以media.abc.com/S3/amazon.com开头,以确保其正常工作。

只需意识到S3不允许从控制台直接重命名即可。

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

Answers:


104

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


2
上述解决方案@navjot是否要收费?
pavitran

@pavitran nope,那仍然是要走的路
Tashows

8
@Tashows pavitran询问的是挑战,而不是挑战。据我所知,复制存储桶项目确实要收费,我相信每个项目需要1 GET和1 PUT操作成本。
吉瓦尔

5
@Tashows实际上,在S3价格表上实际上有一个COPY操作条目,实际上与执行PUT的成本相同(因此没有额外的GET成本)。
吉瓦尔

3
请注意,对于不想通过CLI执行此操作的用户,也可以使用Web控制台进行剪切和粘贴。
mahemoff '18

241

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

8
该答案与已接受的答案相同,除了此发布提供了一个非常有用的逐步说明示例。(不过,示例应缩短。没有必要显示示例旧存储桶的创建并使用后缀变量。)但是,此答案的解释部分并不令我满意。它说在S3中缺少文件夹是为什么需要此笨拙的过程的原因。由于最初的问题没有提到文件夹,所以我不明白该怎么解释了无法重命名S3存储桶的问题。
LS

2
尝试过这种方法...似乎可以使用...但是由于某些奇怪的原因,我无法查看任何项目(图像)。我可以通过浏览器浏览s3仪表板上的项目...但是无法通过url查看或下载它们。有什么想法吗?权限似乎是相同的。有一些特殊的权限要注意吗?
bmiskie

1
@duality_你能加入到有关权限你的答案通知,您可以用复制文件--acl bucket-owner-full-control(在类似的答案
ЕвгенийМасленков

1
请注意,您还需要指定区域,否则您的新存储桶将位于美国东部(北弗吉尼亚州)。例如 aws --region ap-southeast-2 s3 mb s3://new-bucket
-cobberboy

1
如果您使用版本控制,则需要使用生命周期管理来使版本过期...显然:docs.aws.amazon.com/AmazonS3/latest/dev/…–
carlin.scott

37

可能是更高版本的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

9
这对我有用。但是,请务必注意,new-bucket必须在运行命令之前先创建。此外,old-bucket则将为空,但不会删除。如果要在传输所有文件后将其删除,请使用以下命令(不带尖括号):aws s3api delete-bucket --bucket <old-bucket> --region <region id>
Mabyn

如果旧的存储桶在任何地方都在使用,则显然好的做法是复制存储桶,使用新目的地进行测试,然后再删除旧的存储桶。aws s3 mv实际上是复制和删除,因此财务成本应该相同(我认为)。
Flimm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.