Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何重命名AWS S3 Bucket name_Amazon Web Services_Amazon S3_Cname - Fatal编程技术网

Amazon web services 如何重命名AWS S3 Bucket name

Amazon web services 如何重命名AWS S3 Bucket name,amazon-web-services,amazon-s3,cname,Amazon Web Services,Amazon S3,Cname,在经历了所有艰难的迁移等工作之后,只要意识到如果需要使用CNAME(例如media.abc.com)为内容提供服务。bucket名称需要以media.abc.com/S3/amazon.com开头,以确保它能够完美工作 请注意,S3不允许从控制台直接重命名 有什么方法可以解决这个问题吗?我认为唯一的方法是创建一个具有正确名称的新bucket,然后将所有对象从旧bucket复制到新bucket。您可以使用Aws CLI执行此操作。解决方案 解释 S3没有重命名bucket功能,因为从技术上讲S3中

在经历了所有艰难的迁移等工作之后,只要意识到如果需要使用CNAME(例如media.abc.com)为内容提供服务。bucket名称需要以media.abc.com/S3/amazon.com开头,以确保它能够完美工作

请注意,S3不允许从控制台直接重命名


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

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

解决方案 解释 S3没有重命名bucket功能,因为从技术上讲S3中没有文件夹,所以我们必须处理bucket中的每个文件

上面的代码将为1。创建一个新的bucket,2。将文件复制到上一页和下一页。删除旧桶。就这样

如果你有很多文件在你的桶,你担心的成本,然后阅读下去。在幕后发生的是,bucket中的所有文件首先被复制,然后被删除。如果你有几千个文件,它的花费应该微不足道。否则,请检查这将如何影响您

例子 在下面的示例中,我们创建并填充旧bucket,然后将文件同步到新bucket。检查命令的输出以了解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

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

这个答案和公认的答案是一样的,只是这个帖子提供了一个非常有用的一步一步的例子,说明了如何做到这一点。(不过,这个例子应该缩短。没有必要显示如何创建一个示例旧bucket并使用后缀变量。)不过,这个答案的解释部分并不让我满意。它说,S3中缺少文件夹是需要这个笨拙过程的原因。由于最初的问题没有提到文件夹,我不明白这是如何解释无法重命名S3存储桶的。尝试了此方法…似乎有效…但是由于一些奇怪的原因,我无法查看任何项目(图像)。我可以通过浏览器浏览s3仪表板上的项目…但无法通过url查看或下载它们。你知道为什么吗?权限似乎是相同的。是否有一些特殊的权限需要注意?@duality_uuu您可以在您的回答中添加关于权限的通知,并且您可以使用
--acl bucket owner full control
(如图所示)复制文件。请注意,您还需要指定区域,否则您的新bucket将位于美国东部(北弗吉尼亚州)。例如,
aws——地区ap-southeast-2 s3 mb s3://新bucket
如果您在上有版本控制,则需要使用生命周期管理使版本过期。。。显然:@Tashows pavitran询问的是费用,而不是变化。据我所知,复制bucket项确实要收费,我相信每个项都需要1个GET和1个PUT操作成本。@Tashow实际上在上有一个复制操作的条目,它实际上与执行PUT的成本相同(因此没有额外的GET成本)。注意,您也可以使用web控制台进行剪切和粘贴,对于不想通过CLI执行此操作的人。@pavitran如果您在glacier或deep archive中有对象,请注意,每个对象都有一个最短时间,如果您在最短时间(90或180天)之前从旧存储桶中删除对象,您将收取整个时间的费用。因此,如果您将对象移动到一个新的存储桶,然后删除旧的存储桶,您可能会花费更多。这对我来说很有效。但是,需要注意的是,在运行命令之前,必须先创建
新bucket
。此外,
旧存储桶
将为空,但不会被删除。如果要在传输所有文件后删除它,请使用以下命令(不带尖括号):
aws s3api delete bucket--bucket--region
如果旧bucket在任何地方都在使用,显然最好复制该bucket,使用新的目标进行测试,然后才删除旧bucket
aws s3 mv
实际上是复制和删除的,因此财务成本应该是相同的(我认为)。
aws s3 mv s3://old-bucket s3://new-bucket --recursive