こんにちは。パエリアです。
今回は AWS 利用者ならほぼ100%利用しているであろう S3 の機能であるバージョニングについての考察をしていきます。
Amazon S3 のバージョニングとは、同じバケット内でオブジェクトの複数のバリアントを保持する手段のことです。S3 のバージョニング機能を使用すると、バケットに保存されたすべてのオブジェクトのすべてのバージョンを、保存、取得、復元することができます。バージョニングを使用すれば、意図しないユーザーアクションからもアプリケーション障害からも、より簡単に復旧できます。
結論としてはバージョニングは有効化すると良いと思います。
以下の点について、それぞれ考えていきます。
1.耐障害性(フォールトトレランス)
2.AWS ベストプラクティス
3.利用料
4.有効化が推奨される利用方法
5.有効化が推奨されない利用方法
1. 耐障害性(フォールトトレランス)
S3 バケットのバージョニングを有効化することで、何かしらの理由によりオブジェクトが上書きされたときに、上書き前のオブジェクトを復旧することができるようになり、耐障害性を向上させることができます。
つまり、この点から考えると有効化しない理由はありません。
2. AWS ベストプラクティス
AWS のベストプラクティスとしては有効化することが推奨されています。
ちなみに、バージョニングの有効化は AWS Trusted Advisor(耐障害性)でもチェック項目となっています。
ただ、現状バケット作成時のデフォルトチェックは無効状態となっていましたので、作成時の操作には注意が必要です。
AWSドキュメント:Amazon S3 のセキュリティのベストプラクティス
3. 利用料
S3 標準ですと最初の 50TB までは 0.025USD/GB となっております。(東京リージョンの場合)
また、バージョニングを有効化していて、対象オブジェクトに上書きした場合は過去のバージョンについても利用料がかかります。
例えば 2GB のオブジェクトに 2GB のオブジェクトを上書きしても 4GB 分の利用料がかかります。
Q: バージョニングの使用に対してどのように課金されますか?
通常の Amazon S3 料金は、格納またはリクエストされるオブジェクトの各バージョンについて適用されます。
思ったより高くつきそうですね、、、
適宜 S3 の利用料金の確認やライフサイクルポリシーの作成は必ず行いましょう。
4. 有効化が推奨される利用方法
※あくまで一個人の意見です。
4-1. 上書きされては困るバケット
まず、上書きされるべきではないバケットへは、上書きができないように権限やオブジェクトロックをしておけるなら、実装しましょう。
それだけでも十分だと思いますが、何かしらのトラブルで上書きされる可能性はあります。(権限変更やロック設定を解除できるような状況にある可能性もあります。)
万が一、上書きされてしまった時のためにバージョニングを有効化すると良いと思います。
そもそも上書きの前提がないのであれば、利用料金は変わりません。
4-2. 変更の多いバケット
変更の頻度が高い、または変更を実行する人が多いバケットについてはまさにバージョニングが有効だと思います。
間違って上書きしてしまった、他の人と同じタイミングで上書きしてしまったなど、復旧させるタイミングが多いと想像します。
また、その場合利用料も高くなるので、更新頻度に合わせてライフサイクルポリシー(例えば1週間)を必ず設定しましょう。
5. 有効化が推奨されない利用方法
5-1. どうしても利用料を抑えたい場合
場合によっては2-3倍以上の利用料がかかる可能性もあるので、耐障害性は気にせず、とにかく利用料を抑えたい場合は、無効化すると良いと思います。
5-2. バックアップとして利用している場合
最悪消されも問題ないようなデータや定期的なバックアップとして S3 を利用している場合は、コストパフォーマンスも考えると有効化しなくても良いかもしれません。
まとめ
バージョニングの設定はいつでも変更可能ですが、基本的には有効化しておくのが良いかなと考えました。
また、バージョニングを有効化した場合は特にライフサイクルポリシーの設定を内容含めてしっかり設定することを忘れないようにしてください。
おまけ
S3 といえば、最近オブジェクトの暗号化がデフォルト有効化となりました。
バケットの設定はデフォルト有効化が無効化になっているのに中身のオグジェクトは全部暗号化が有効化されている、という謎な事象が起こりがちなので、困ることはないですが、気をつけましょう。
ちなみに SSE-S3 以外でデフォルト暗号化したい場合は、バケット側の設定が必須になります。