ちょっと話題の記事

[新機能]Amazon S3のVersioningとLifecycleを組み合わせる

2014.05.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、大瀧です。
一昨日、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を有効化します。

s3-verisioning-with-lifecycle01

続いて、Lifecycleルールを追加します。同じプロパティから[Lifecycle]をクリックし、[+ Add rule]ボタンをクリックします。

s3-verisioning-with-lifecycle02

ルールの適用対象を設定します。特定のディレクトリなど絞り込むこともできますが、今回はバケット全体(Whole Bucket)のまま、[Configure Rule >]をクリックします。

s3-verisioning-with-lifecycle03

次に、ルールとして最新(Current)と以前(Previous)にそれぞれにGlacierへ退避(Archive)と削除(Permanent Delete)の指定ができます。今回は、Glacierへ退避を選択します。

s3-verisioning-with-lifecycle04

選択すると、Glacierに退避するまでの期間(日数)を入力します。0日から設定できますが、これは即時というわけではなく、24時間以内に退避という指定になります。以前は1日からだった気がするのですが、変わったようです。今回は動作を確認したかったので、「0」を入力し、[Review >]をクリックします。

s3-verisioning-with-lifecycle05

任意のルール名を入力し、[Create and Activate Rule]をクリックして設定完了です。

s3-verisioning-with-lifecycle06

では、動作を確認してみます。[Upload]ボタンからのindex.htmlのアップロードを2回繰り返します。

s3-verisioning-with-lifecycle08

s3-verisioning-with-lifecycle07

Versioningが有効なバケットでは、画面上部のメニューに[Versions]ボタンが表示されます。[Show]をクリックすることで過去のバージョンが表示されるようになっています。以下のように、index.htmlファイルに2つのバージョンがあり、タイムスタンプで最新バージョンと以前のバージョンが区別できますね。

s3-verisioning-with-lifecycle09

時間が経つと、以下のように以前のバージョンの[Storage Class]列が「Glacier」に代わり、自動で退避されたことが確認できます。たまたまかもしれませんが、検証時は退避まで約23時間かかりましたw

s3-verisioning-with-lifecycle10

使いどころ

Versioningのみですとバージョンの数だけかけ算でデータの保存費用がかさむため、Versioningで履歴を残しつつ余分なコストは極力避けたいというときに活用できるのではないでしょうか。ただ、世代管理はできないため、更新が少ないバケットだと気づかないうちに設定期限が来てGlacierへ退避されたり、削除されたりというトラブルになることも考えられます。世代数での設定ができると、もっと使い勝手が良くなるかもしれませんね。