如何重命名AWS S3 Bucket名称

Car*_*Lee 140 cname amazon-s3 amazon-web-services

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

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

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

dua*_*ty_ 222

aws s3 mb s3://[new-bucket]
aws s3 sync s3://[old-bucket] s3://[new-bucket]
aws s3 rb --force s3://[old-bucket]
Run Code Online (Sandbox Code Playgroud)

说明

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
Run Code Online (Sandbox Code Playgroud)

  • 这个答案与接受的答案是一样的,除了这个帖子提供了一个非常有用的分步示例如何做到这一点.(但是应该缩短示例.不需要显示示例旧存储桶的创建并使用后缀变量.)但是,这个答案的解释部分并不能满足我.它说S3中缺少文件夹是为什么这个笨拙的程序是必需的.由于原始问题没有提到文件夹,我不明白这是如何解释无法重命名S3存储桶的. (8认同)
  • 请注意,您还需要指定区域,否则您的新存储桶将位于美国东部(北弗吉尼亚州)。例如 `aws --region ap-southeast-2 s3 mb s3://new-bucket` (3认同)
  • 尝试过这种方法...似乎有效...但是由于某种奇怪的原因我无法查看任何项目(图像)。我可以通过浏览器浏览 s3 仪表板上的项目……但无法通过 url 查看它们或下载它们。任何想法为什么?权限似乎相同。是否有一些特殊的权限需要注意? (2认同)
  • 请注意,据我所知,将对象从一个存储桶复制到另一个存储桶时,目前无法保留其历史记录。也就是说,如果在源存储桶中启用了版本控制,则无法复制对象及其所有版本及其创建日期。 (2认同)

lif*_*cer 98

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

  • @Tashows pavitran询问的是chageges,而不是changes.据我所知,确实存在复制铲斗物品的费用,我相信每件物品的运营成本为1 GET和1 PUT. (7认同)
  • @Tashows实际上在[定价表S3](https://aws.amazon.com/s3/pricing/)上实际上有COPY操作的条目,它实际上和做PUT的成本相同(所以没有额外的获得成本). (5认同)
  • 以上解决方案是否有任何费用@navjot? (2认同)
  • 请注意,对于不想通过CLI执行此操作的人,也可以使用Web控制台进行剪切和粘贴。 (2认同)
  • 您可以使用任何当前存储桶中的配置副本创建一个新存储桶。只需单击“创建存储桶”,为存储桶命名,然后单击“从现有存储桶复制设置”部分下的“选择存储桶”即可。 (2认同)

Ric*_*ing 31

可能是AWS CLI工具包的更高版本提供了该mv选项.

$ aws --version
aws-cli/1.15.30 Python/3.6.5 Darwin/17.6.0 botocore/1.10.30
Run Code Online (Sandbox Code Playgroud)

我正在使用以下命令重命名存储桶:

aws s3 mv s3://old-bucket s3://new-bucket --recursive
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用。但是,需要注意的是,必须在运行命令之前首先创建“ new-bucket”。同样,“ old-bucket”将为空,但不会被删除。如果要在传输所有文件后删除它,请使用以下命令(不使用尖括号):```aws s3api delete-bucket --bucket <bucket <old-bucket> --region <region id>``` (8认同)
  • 如果旧存储桶在任何地方使用,那么复制该存储桶,使用新目标进行测试,然后删除旧存储桶显然是一个很好的做法。`aws s3 mv` 实际上是复制和删除,所以财务成本应该是相同的(我认为)。 (2认同)
  • 请注意,“mv”命令有此警告:“此操作会在指定位置创建具有更新设置和新的上次修改日期的对象副本,然后删除原始对象”。丢失最后修改日期可能是相关的。 (2认同)