一度有効化した S3 バケットのバージョニング機能を無効化したいときの対処方法

2022.05.26

困っていた内容

S3 バケットのバージョニングを有効にして運用していましたが、不要になりました。
節約のために、一度有効化したバージョニングを再度無効化したいです。
バージョニング有効化前の状態に戻すにはどうしたらいいでしょうか?

どう対応すればいいの?

結論から述べますと、一度有効化したバージョニングを無効の状態に戻すことはできません。
代わりに、S3 Sync を利用することで対応が可能です。

AWS CLI での高レベル (S3) コマンドの使用 - AWS Command Line Interface

s3 sync コマンドはバケットとディレクトリの内容、または 2 つのバケットの内容を同期します。

  1. バージョニングを無効化した空のバケットを作成
  2. S3 Sync コマンドを使用して、新たに作成したバケットに該当のバケットのオブジェクトを全てコピー(同期)
  3. コピー元のオブジェクトを削除

以上の手順により、バージョニングが無効化されたバケットに、オブジェクトの最新バージョンのみコピーされます。
なお、S3 バケットは作成時にデフォルトでバージョニングが無効化されます。

注意点として、S3 Sync はマネジメントコンソールでの利用ができません。
そのため、AWS CLI を使用します。

やってみた

オブジェクトのコピー

コピー先となる「バージョニングを無効化したバケット」を作成し、下記のコマンドを実行します。

aws s3 sync s3://コピー元のバケット名 s3://コピー先のバケット名

以上でオブジェクトの最新バージョンのみコピーされます。
注意点として、コピー元のオブジェクトは保存されたままです。変わらず料金は発生するので、不要であれば削除してください。

オブジェクトの削除

S3 コンソールから、オブジェクトを削除したいバケットを選択し、「削除」をクリックします。

空のバケット設定をクリックします。

テキスト入力フィールドに、「完全に削除」と入力し、「空にする」をクリックします。

これでオブジェクトの削除は完了しました。
空になったバケットも削除する場合は、もう一度 S3 コンソールから、オブジェクトを削除したいバケットを選択し、「削除」をクリックすることで削除が可能です。

他にも試してみた

S3 では S3 Syncに類似したレプリケーション機能として、S3 バッチレプリケーションが使用可能です。

オブジェクトストレージ機能 – Amazon S3.

CRR や SRR などのライブレプリケーションでは、新しくアップロードされたオブジェクトがバケットに書き込まれるときに自動的にレプリケートされますが、S3 バッチレプリケーションでは既存のオブジェクトをレプリケートできます。S3 バッチレプリケーションを使用して、新しく作成したバケットに既存のオブジェクトをバックフィルし、以前にレプリケートできなかったオブジェクトを再試行し、アカウント間で、データを移行し、データレイクに新しいバケットを追加することができます。

ですが、S3 バッチレプリケーションは同期元と同期先のどちらにもバージョニングの有効化が求められるため、今回の要件には適していませんのでご注意ください。

参考資料