回答:
正しい名前で新しいバケットを作成し、すべてのオブジェクトを古いバケットから新しいバケットにコピーするのが唯一の方法だと思います。Aws CLIを使用して実行できます。
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
--acl bucket-owner-full-control
(その回答のように)コピーしたりできる
aws --region ap-southeast-2 s3 mb s3://new-bucket
おそらく、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
new-bucket
コマンドを実行する前にを最初に作成する必要があることに注意してください。また、はold-bucket
空になりますが、削除されません。あなたはすべてのファイルの転送以下、それを削除したい場合は、(角括弧なしで)次のコマンドを使用しますaws s3api delete-bucket --bucket <old-bucket> --region <region id>
aws s3 mv
実際にコピーと削除を行うので、財務コストは同じになるはずです(私はそう思います)。