3 题: 如何重命名AWS S3 Bucket名称

在...创建的问题 Wed, Sep 13, 2017 12:00 AM

在完成所有艰难的迁移工作之后等等。只需要意识到如果需要使用CNAME(例如media.abc.com)来提供内容。存储桶名称需要从media.abc.com/S3/amazon.com开始,以确保其完美运行。

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

有没有办法解决这个问题?

    
120
3答案                              3 跨度>                         

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

    
79
2017-01-06 22:40:54Z
  1. 上述解决方案是否有任何费用@navjot?
    2017-04-20 16:18:24Z
  2. @ pavitran nope,这仍然是要走的路
    2017-05-17 11:39:34Z
  3. @ Tashows pavitran询问的是chageges,而不是changes。据我所知,确实存在复制铲斗物品的费用,我相信每件物品的运营成本为1 GET和1 PUT。
    2017-08-29 10:06:16Z
  4. @ Tashows实际上, S3的定价表,实际上与进行PUT的成本相同(因此没有额外的GET成本)。
    2017-08-29 17:53:28Z
  5. 注意您也可以使用Web控制台进行剪切和粘贴,适用于不想通过CLI执行此操作的人。
    2018-07-25 09:52:37Z
  6. 醇>

解决方案

 
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
    
191
2017-07-05 08:57:20Z
  1. 这应该是接受的答案
    2017-06-29 13:44:05Z
  2. 这个答案与接受的答案相同,除了这个帖子提供了一个非常有用的分步示例。 (但是应该缩短示例。不需要显示示例旧存储桶的创建并使用后缀变量。)但是,这个答案的解释部分并不能满足我。它说S3中缺少文件夹是为什么这个笨拙的程序是必需的。由于原始问题没有提到文件夹,我不明白这是如何解释无法重命名S3存储桶的。
    2017-07-12 13:21:55Z
  3. 尝试过这种方法......似乎有效...但是出于某种奇怪的原因我无法查看任何项目(图像)。我可以通过浏览器浏览s3仪表板上的项目......但是无法通过网址查看或下载它们。任何想法为什么?权限似乎相同。是否有一些特殊权限需要注意?
    2018-01-22 02:00:46Z
  4. @ duality_你可以添加到关于权限的答案通知中,你可以用--acl bucket-owner-full-control复制文件(就像在那里答案
    2018-02-07 09:18:49Z
  5. 请注意,您还需要指定区域,否则您的新存储桶将位于美国东部(北弗吉尼亚州)。例如。 aws --region ap-southeast-2 s3 mb s3://new-bucket
    2018-02-08 11:38:18Z
  6. 醇>

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
    
20
2018-06-19 12:01:47Z
  1. 这对我有用。但是,请务必注意,必须先创建new-bucket,然后再运行该命令。此外,old-bucket将为空但不删除。如果要在传输所有文件后删除它,请使用以下命令(不带尖括号):aws s3api delete-bucket --bucket <old-bucket> --region <region id>
    2018-10-01 01:01:24Z
  2. 醇>
来源放置 这里