- 公開日
- 最終更新日
【S3】S3バケットのバージョニング無効と停止は違う!?
この記事を共有する
目次
はじめに
こんにちは!サービスGの森です!
突然ですが、みなさんはS3のバージョニング無効と停止状態の違いについてご存知でしょうか?
似ているようで実はけっこう違っています。
そもそも無効と停止とは...?
S3のバージョニングは以下の状態のどれかにあります。
- 無効(Unversioned)
- 有効(Versioning-enabled)
- 停止(Versioning-suspended)※バージョニングを有効化したあと、停止にした状態。
S3のバージョニングを有効にしたバケットは停止にできますが、無効にすることはできないという特徴があります。
結論
- 停止時の挙動について
- 新しくアップロードされたオブジェクトにバージョンID:nullを付与しつつ、バージョニング有効時に一意のバージョンIDが付与されたオブジェクトは保持します
- バージョンID:nullが付与されたオブジェクトを削除する場合にも削除マーカーが挿入され、期限切れ削除マーカーとなってしまいます。無効の場合は完全に削除になります
バージョニング停止時の動作を検証
文章だけだとわかりにくいのでとりあえず検証!
オブジェクトのアップロードと削除を順番に実施していきます。
オブジェクトのアップロード
- まずはバージョニングを有効化したS3バケットを用意し、sample.txtというファイルをアップロードします。
続いてバージョニングを停止後、sample.txtを再度アップロードします。
- 結果:
- アップロードされたオブジェクトにはバージョンID:nullを付与しつつ、バージョニング有効化時に付与されたバージョンを保持しています。
オブジェクトの削除
続いてアップロードしたオブジェクトの削除をしていきます。
- 先程のバケットから一意のバージョンIDが付与されたオブジェクトを削除し、バージョンID:nullが付与されたオブジェクトのみ残します
- samle.txtを選択して削除をクリックします
- 完全に削除と入力してオブジェクトの削除をクリックします
- マネジメントコンソール上で削除されたことを確認しました
- バージョニング無効の場合はこれで消えているのですが...。
- バージョニング無効の場合はこれで消えているのですが...。
aws s3apiコマンドを実行してすべてのバージョンのオブジェクトを取得します
- 結果:
- 削除マーカーのみが挿入されてしまいます。
- 完全に削除と入力したのに!バージョニング有効化時の名残りのようなものができています。
aws s3api list-object-versions \
--bucket ${bucket-name}
"DeleteMarkers": [
{
"Owner": {
"DisplayName": "${owner-display-name}",
"ID": "${owner-id}"
},
"Key": "sample.txt",
"VersionId": "null",
"IsLatest": true,
"LastModified": "2024-12-25T06:50:36+00:00"
}
],
"RequestCharged": null,
"Prefix": ""
}
おわりに
- 繰り返しになりますが、S3バケットのバージョニングを有効にすると無効に戻すことはできません!無効と停止を誤認しないように注意が必要です。また期限切れ削除マーカーの削除など、ライフサイクルルールによる適切な管理を心がける必要があります
- 以下の理由から、S3バケットを全てバージョニング有効にするのも方針もアリだと思います
- 削除・更新からの保護
- 将来的にレプリケーションをできるようにしておく
- 無効状態と停止状態の誤認防止
この記事は私が書きました
森 翔吾
最近はコンテナ・サーバレスを学習しています。 よろしくお願いします。