AWS S3 バケットをリネーム(できないので別バケットにコピー)
はじめに
AWS S3 バケットをリネームする方法を調べた。
TL;DR
- リネームはできないので、「新規バケット作成」&「ファイルコピー」で実現する
- AWS CLI で
aws s3 sync s3://my-old-bucket s3://my-new-bucket
で内容コピー - アプリケーションなどでバケットの参照先の変更漏れがないように注意
目次
環境・条件
1 | $ sw_vers |
詳細
リネームはできないので、新規バケットを作成して中身をコピーする。
バケットのコピー
S3 コンソール などでバケットを生成したら、aws s3 sync
コマンドで内容をコピーする。
1 | $ aws configure |
コピーが終わったら、バケットの内容に差分がないかを確認。
aws s3 ls --recursive s3://bucket-name --summarize
で概要が出力できるので、オブジェクト数や合計サイズが一致していれば OK。
1 | $ aws s3 ls --recursive s3://my-old-bucket --summarize > a.txt |
気をつけること
コピー後は旧バケットは削除すると思うので、参照先や権限周りの変更漏れに注意すること。
- アプリケーション側での参照先バケットの変更
- 画像などの asset ファイルの場合は public アクセス可に変更する
- IAM のポリシーでアクセス可能なバケットを制限している場合は、新バケットにアクセスできるように変更する
fatal error: An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
のエラーになったら、たぶんポリシー周り
1 | { |
まとめ
- リネームはできないので、「新規バケット作成」&「ファイルコピー」で実現する
- AWS CLI で
aws s3 sync s3://my-old-bucket s3://my-new-bucket
で内容コピー - アプリケーションなどでバケットの参照先の変更漏れがないように注意
参考文献
- S3 バケット間でオブジェクトを移動する
- amazon s3 - AccessDenied for ListObjectsV2 operation for S3 bucket - Stack Overflow
関連記事
- Python boto3 で AWS S3 を操作する
- AWS lambda で S3 の画像をリサイズする(チュートリアル)
- Python requests + boto3 で AWS S3 に画像を直接アップロード
- AWS S3 Bucket 内のオブジェクトの ACL(アクセス権限) を一括で変更する方法
- AWS S3 で権限を与えているのに Lambda が Access Denied になる場合
- AWS S3 から Cloud Storage for Firebase にファイルをコピー
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア