[新機能]Amazon S3のVersioningとLifecycleを組み合わせる
ども、大瀧です。
一昨日、Amazon S3に地味〜な機能追加としてVersioningとLifecycleの両方の有効化がサポートされました。
元々S3ではファイル(オブジェクト)の管理オプションとしてVersioningとLifecycleを別々に使うことはできたのですが、排他の関係で両方有効化しようとするとエラーになっていました。両方を組み合わせることで、ユニークな使い方ができそうなのでご紹介してみます。
復習
S3 Versioningオプションとは
S3のVersioningとは、保存するファイルを上書きする際に古い内容を維持できるオプションです。Git/Subversionといったバージョン管理ツールほどの機能は持っていませんが、更新前の内容を保持できますので、誤って内容を変更・上書きしてしまった際などに対応できます。
S3 Lifecycleオプションとは
S3のLifecycleオプションとは、日数単位でファイルの自動アーカイブ(Glacierへの退避)と自動削除を設定する機能です。古いデータをS3よりも安価なGlacierに移動すればデータ保存費用を抑えることができますし、一定期間経過後は不要ということであれば削除してこちらも費用を抑えることができます。
できること/できないこと
文章で表すと、Versioningを有効にしたバケットで最新のファイルとそれ以前のファイルで別々にLifeCycleルールが設定できます。Lifecycleオプションは、Glacier退避と削除のそれぞれが設定可能です。最新とそれ以前という2段階のみですので、「何世代まで」といった設定はできません。
設定方法
では、実際に設定して動きを見てみます。設定には順番があり、先にVersioningを有効にしてからLifeCycleルールを設定します。
まずは、AWS Management ConsoleのS3バケット一覧から設定するバケットのプロパティを表示、[Versioning]にある[Enable Versioning]をクリックしVersioningを有効化します。
続いて、Lifecycleルールを追加します。同じプロパティから[Lifecycle]をクリックし、[+ Add rule]ボタンをクリックします。
ルールの適用対象を設定します。特定のディレクトリなど絞り込むこともできますが、今回はバケット全体(Whole Bucket)のまま、[Configure Rule >]をクリックします。
次に、ルールとして最新(Current)と以前(Previous)にそれぞれにGlacierへ退避(Archive)と削除(Permanent Delete)の指定ができます。今回は、Glacierへ退避を選択します。
選択すると、Glacierに退避するまでの期間(日数)を入力します。0日から設定できますが、これは即時というわけではなく、24時間以内に退避という指定になります。以前は1日からだった気がするのですが、変わったようです。今回は動作を確認したかったので、「0」を入力し、[Review >]をクリックします。
任意のルール名を入力し、[Create and Activate Rule]をクリックして設定完了です。
では、動作を確認してみます。[Upload]ボタンからのindex.htmlのアップロードを2回繰り返します。
Versioningが有効なバケットでは、画面上部のメニューに[Versions]ボタンが表示されます。[Show]をクリックすることで過去のバージョンが表示されるようになっています。以下のように、index.htmlファイルに2つのバージョンがあり、タイムスタンプで最新バージョンと以前のバージョンが区別できますね。
時間が経つと、以下のように以前のバージョンの[Storage Class]列が「Glacier」に代わり、自動で退避されたことが確認できます。たまたまかもしれませんが、検証時は退避まで約23時間かかりましたw
使いどころ
Versioningのみですとバージョンの数だけかけ算でデータの保存費用がかさむため、Versioningで履歴を残しつつ余分なコストは極力避けたいというときに活用できるのではないでしょうか。ただ、世代管理はできないため、更新が少ないバケットだと気づかないうちに設定期限が来てGlacierへ退避されたり、削除されたりというトラブルになることも考えられます。世代数での設定ができると、もっと使い勝手が良くなるかもしれませんね。