backend
A
信頼度ランク
| S | 公式ソース確認済み |
| A | 成功実績多数・失敗例少数 |
| B | 賛否両論 |
| C | 動作未確認・セキュリティリスク高 |
| Z | 個人所感 |
S3バージョニング — 削除マーカー・ライフサイクルへの影響・コスト管理
S3バージョニングの有効化・一時停止の違い、削除マーカーの仕組み、バージョン数増加によるコスト管理、ライフサイクルルールとMFADelete設定を試験対策視点で解説。
一言結論
S3バージョニングを有効化すると全バージョンに対してストレージ料金が発生するため、ライフサイクルルールで古いバージョンをGlacierへ移行し不要な削除マーカーを自動削除するコスト管理が必須であり、一度有効化したバージョニングは無効に戻せないことも設計上の重要な制約だ。
バージョニングの3つの状態
S3バージョニングには3つの状態がある。
Unversioned(デフォルト): バージョニングなし
Enabled(有効): 全オブジェクトにバージョンIDが付与される
Suspended(一時停止): 新規オブジェクトにバージョンIDが付与されない
既存のバージョン履歴は保持される
重要: 一度有効化したバージョニングは無効(Unversioned)には戻せない。一時停止(Suspended)のみ可能。
バージョニング有効時の削除動作
# バージョニングなしの削除(通常の削除)
aws s3 rm s3://my-bucket/file.txt
# → ファイルが完全削除される
# バージョニング有効時のオブジェクト削除(バージョンIDなし)
aws s3 rm s3://my-bucket/file.txt
# → 削除マーカー(Delete Marker)が作成される
# → ファイルはまだ存在する(古いバージョンとして)
# 特定バージョンの削除
aws s3api delete-object \
--bucket my-bucket \
--key file.txt \
--version-id abc123
# → 指定バージョンのみ削除(削除マーカーは作成されない)
削除マーカーの仕組み
削除マーカーとは「削除された」ことを示す特殊なバージョンだ。
ファイルの歴史:
v1 (2024-01-01) ← 最初のバージョン
v2 (2024-06-01) ← 更新後
DELETE MARKER ← aws s3 rm を実行すると作成
→ S3は「ファイルが存在しない」ように見せる
削除マーカーを削除すると → v2が最新版として復元される
# 削除マーカーを削除してオブジェクルを復元
aws s3api delete-object \
--bucket my-bucket \
--key file.txt \
--version-id DELETE_MARKER_VERSION_ID
ライフサイクルルールとバージョニングの組み合わせ
バージョニング有効時のコスト管理にライフサイクルルールを使う。
{
"Rules": [
{
"ID": "version-management",
"Status": "Enabled",
"NoncurrentVersionTransitions": [
{
"NoncurrentDays": 30,
"StorageClass": "STANDARD_IA"
},
{
"NoncurrentDays": 90,
"StorageClass": "GLACIER"
}
],
"NoncurrentVersionExpiration": {
"NoncurrentDays": 365,
"NewerNoncurrentVersions": 3
},
"ExpiredObjectDeleteMarkerExpiration": {
"ExpiredObjectDeleteMarker": true
}
}
]
}
NewerNoncurrentVersions: 3 は「最新3バージョンは保持し、それより古いものは削除」を意味する。
ExpiredObjectDeleteMarker: true は「そのオブジェクトの全バージョンが削除され、削除マーカーだけが残っている場合に削除マーカーも自動削除」する。
MFA Delete
バージョニング設定の変更とバージョンの永久削除にMFAを必須化できる機能だ。
# MFA Deleteの有効化(バケットオーナーかつルートユーザーのみ実行可能)
aws s3api put-bucket-versioning \
--bucket my-bucket \
--versioning-configuration '{
"Status": "Enabled",
"MFADelete": "Enabled"
}' \
--mfa "arn:aws:iam::123456789012:mfa/root-account-mfa-device 123456"
MFA Delete有効時は以下の操作にMFAが必要:
- バージョニング設定の変更(有効化・一時停止)
- 特定バージョンの削除(削除マーカー作成はMFA不要)
バージョニングとレプリケーション
バージョニングはレプリケーションの前提条件
→ CRR/SRRを使う場合は必ずバージョニングを有効化
レプリケーション先でも全バージョンがコピーされる
→ レプリケーション先のコスト計算に注意
コスト管理の注意点
バージョニングを有効化すると、全バージョンに対してストレージ料金が発生する。
# バケット内の全バージョンのサイズを確認
aws s3api list-object-versions \
--bucket my-bucket \
--query '[Versions[].Size, DeleteMarkers[]] | [0] | sum(@)'
# 削除マーカーの数を確認
aws s3api list-object-versions \
--bucket my-bucket \
--query 'length(DeleteMarkers)'
試験頻出ポイント
| シナリオ | 回答 |
|---|---|
| バージョニングを無効に戻したい | 不可。一時停止のみ可能 |
aws s3 rm 実行後にファイルが消えた | 削除マーカーが作成されただけ、古いバージョンは残る |
| バージョン履歴を保持しつつコスト削減 | ライフサイクルルールで古いバージョンをGlacierへ移行 |
| 誤削除を防止したい | MFA Deleteを有効化 |
| レプリケーションの前提条件 | バージョニングの有効化 |
まとめ
バージョニングは誤削除・上書き保護の基本機能だが、全バージョンにストレージ料金が発生する。ライフサイクルルールで古いバージョンをIA/Glacierに移行し、不要な削除マーカーを自動削除することでコストを管理することが重要だ。