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


150

結局のところ、移行などの困難な作業です。CNAMEを使用してコンテンツを提供する必要がある場合(例:media.abc.com)を理解してください。バケット名が完全に機能するようにするには、media.abc.com / S3 / amazon.comで始まる必要があります。

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

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

回答:


104

正しい名前で新しいバケットを作成し、すべてのオブジェクトを古いバケットから新しいバケットにコピーするのが唯一の方法だと思います。Aws CLIを使用して実行できます。


2
上記のソリューション@navjotに料金はかかりますか?
パビトラン2017

まだ進むべき道だ@pavitranいや、
Tashows

8
@Tashows pavitranはchaggesではなくchargesについて尋ねていました。バケットアイテムのコピーには確かに料金があることを知っている限り、各アイテムに1 GETと1 PUTの操作コストがかかると思います。
guival 2017

5
@Tashows実際には、S3価格表に COPY操作のエントリがあります。これは、実際にはPUTを実行するのと同じコストです(追加のGETコストはありません)。
ギヴァル2017

3
CLIを使用したくない場合は、Webコンソールを使用してカットアンドペーストすることもできます。
mahemoff 2018

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
この回答は、この投稿がそれを行う方法の非常に役立つステップバイステップの例を提供することを除いて、受け入れられた回答と同じです。(ただし、例は短くする必要があります。古いバケットの作成とsuffix変数の使用を示す必要はありません。)ただし、この回答の説明部分は私を満足させません。この厄介な手順が必要なのは、S3にフォルダがないためとのことです。元の質問ではフォルダーについて言及していなかったため、S3バケットの名前を変更できないことを説明する方法がわかりません。
LS

2
このメソッドを試してみました...動作するように見えました...しかし、何らかの奇妙な理由で、アイテム(画像)を表示できません。ブラウザーを介してs3ダッシュボードのアイテムをナビゲートできますが、URL経由で表示したり、ダウンロードしたりできません。何かアイデアはありますか?権限は同一のようです。注意すべき特別な許可はありますか?
bmiskie、2018年

1
@duality_は、許可に関する回答通知に追加したり、ファイルを--acl bucket-owner-full-control(その回答のように)コピーしたりできる
–вгенийМасленковFeb

1
地域も指定する必要があることに注意してください。指定しない場合、新しいバケットは米国東部(バージニア北部)になります。例: aws --region ap-southeast-2 s3 mb s3://new-bucket
cobberboy、

1
バージョン管理をオンにしている場合は、ライフサイクル管理を使用してバージョンを期限切れにする必要があります...どうやら:docs.aws.amazon.com/AmazonS3/latest/dev/…– carlin.scott 18
19:31

38

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

古いバケットがどこかで使用されている場合は、バケットをコピーし、新しい宛先でテストしてから、古いバケットを削除することをお勧めします。aws s3 mv実際にコピーと削除を行うので、財務コストは同じになるはずです(私はそう思います)。
Flimm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.