web-dev-qa-db-ja.com

AWS S3バケット名の名前を変更する方法

移行などのすべての困難な作業が終わった後は、CNAMEを使用してコンテンツを配信する必要がある場合はそれを認識してください(例:media.abc.com)。バケット名はmedia.abc.com/S3/Amazon.comで始まる必要があります。

S3がコンソールからの直接の名前変更を許可していないことを理解してください。

これを回避する方法はありますか?

120
Carson Lee

私は唯一の方法は正しい名前で新しいバケツを作成してから古いバケツから新しいバケツにあなたのすべてのオブジェクトをコピーすることであると思う。 Aws CLIを使ってそれを行うことができます。

79
liferacer

溶液

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
duality_

おそらく、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