Amazon S3でオブジェクトの有効期限を設定できるようになりました

Amazon S3のファイルに有効期限を付ける

Amazon S3に関して2011年末のアップデートで待望の機能が付きました!生成(アップロード)されたファイル(オブジェクト)の有効期限を設定できるようになったのです。有効期限の設定方法については特徴がありまして、Bucketにルールを設定して判定を行います。ですから、オブジェクトひとつひとつに設定する必要はなくとても使いやすいです。

Bucketに有効期限を設定する

この有効期限は、Bucketに対する「ライフサイクル設定」と呼ばれています。このライフサイクル設定のルールはBucket毎に100個まで設定することが可能です。どのルールにも、接頭辞を指定して該当するオブジェクトを探します。有効期限は、オブジェクトが生成されてからルールで指定された日数のカウントまでとなっています。日数は0より大きい値を指定する必要があります。基準時間は、GMTで翌日の深夜0時です。例として、オブジェクトが2012年1月15日 10時30分 (GMT) に生成されて、有効期限が3日となっている場合、ルールに該当したオブジェクトが削除される時間は、2012年1月19日 0時0分 (GMT) となります。ちなみに、接頭辞と言っている部分についてですが、Amazon S3では、オブジェクトの場所を表すために a/b/c といった指定をします。 a と接頭辞を指定すれば、a以下の全てのパスが該当します。

Management Consoleのライフサイクル設定

有効期限の設定は、Management Consoleから行う事が出来ます。Bucketのプロパティを見るとLifecycleタブが表示されているのが分かります。

ルールを追加すると既存と新規のオブジェクト両方に有効

Bucketに対してライフサイクル設定を行いますと、既に生成されているオブジェクトと新たに生成されるオブジェクトの両方に有効ですので注意してください。例えば、30日前に生成したオブジェクトがあったとして、10日の有効期限設定をしてしまうと、すぐに削除候補になってしまいます。ちなみに、有効期限を過ぎてから実際に削除するタイミングは非同期です。

どのオブジェクトが削除されたか確認可能

S3のロギング機能が有効であれば、オブジェクトが削除された際に、ログのレコードに S3.EXPIRE.OBJECT と表記されるはずです。

オブジェクトがいつ削除されるか知る

オブジェクトがいつ削除されるか知るためには、GET ObjectメソッドやHEAD Objectメソッドを用いてください。x-amz-expirationに書かれています。

オブジェクトがバージョン管理されているときは非対応

S3のオブジェクトはバージョン管理を有効にすることができます。この機能を使っている場合には、有効期限設定は無効です。

低冗長化オプションでも有効

S3の保存形式で低冗長化オプションを指定している場合にも有効期限設定は有効です。

接頭辞の例

例えばあるBucket内に以下のようにファイルが格納されているとします。ここで、ライフサイクル設定のルールにおいて、logs/と指定して、有効期限を1年間(365日)とした場合の例です。

logs/January/sample.log
logs/February/Week1/sample.log
logs/February/Week2sample.log
logs/February/Week3/sample.log

APIで指定した場合

<LifecycleConfiguration>
  <Rule>
    <ID>Yearly photos expiration rule</ID>
    <Prefix>logs/</Prefix>
    <Status>Enabled</Status>
    <Expiration>
      <Days>365</Days>
    </Expiration>
  </Rule>
</LifecycleConfiguration>

Management Consoleから指定した場合

全てのオブジェクトを指定

あるBucket内のオブジェクトを10年後に全て消すような有効期限を設定する場合は以下のようになります。以下はAPIで指定した場合

<LifecycleConfiguration>
  <Rule>
    <ID>10 year all objects expire rule</ID>
    <Prefix></Prefix>
    <Status>Enabled</Status>
    <Expiration>
      <Days>3650</Days>
    </Expiration>
  </Rule>
</LifecycleConfiguration>

Management Consoleから指定した場合

全部のBucketを消すというのは場合によっては大きな決断です。Management Consoleから指定した場合にはアラートが表示されますので操作には気をつけてください。

複数のルールを設定

Bucketに対して複数のルールを設定することもできます。以下は、接頭辞logs/のときは30日、接頭辞documents/のときは365日の有効期限を設定しています。また、documents/のときは状態がDisabledになっています。これは、設定としては書くけれど無効にしておくというものです。後から必要になったら有効にすればいいですね。

<LifecycleConfiguration>
  <Rule>
    <ID>30 days log objects expire rule</ID>
    <Prefix>logs/</Prefix>
    <Status>Enabled</Status>
    <Expiration>
      <Days>30</Days>
    </Expiration>
  </Rule>
  <Rule>
    <ID>1 year documents expire rule</ID>
    <Prefix>documents/</Prefix>
    <Status>Disabled</Status>
    <Expiration>
      <Days>365</Days>
    </Expiration>
  </Rule>
</LifecycleConfiguration>

Management Consoleから指定した場合

無効なルール

ルールの記述にはひとつ注意点があります。接頭辞を重ねることです。以下は複数のルールが設定されていますが、接頭辞が被っていますのでエラーとなります。

<LifecycleConfiguration>
  <Rule>
    <ID>111</ID>
    <Prefix>documents</Prefix>
    <Status>Enabled</Status>
    <Expiration>
      <Days>30</Days>
    </Expiration>
  </Rule>
  <Rule>
    <ID>222</ID>
    <Prefix>documents/2011</Prefix>
    <Status>Enabled</Status>
    <Expiration>
      <Days>365</Days>
    </Expiration>
  </Rule>
</LifecycleConfiguration>

Management Consoleから指定した場合

設定しようとすると以下のエラーが表示されます。

まとめ

今回は、Amazon S3のオブジェクトに対する有効期限設定についてご紹介しました。Amazon S3のオブジェクト保存に関する思想は真面目に数十年単位だと思いますが、有効期限を設定することで、ログやアップロードされた一時ファイルなど長期間保存しなくて良いデータをルールに沿って自動的に削除してくれるため、情報の管理コスト範囲を狭め、さらにデータ保管料金を下げてくれます。企業におけるISMS運用では、3年や5年の保存期間を設定されたデジタルデータが大量にありませんでしょうか。Amazon S3の有効期限設定を活用することで、人の作業に頼らずにISMS運用も楽々ですね。Amazon S3の有効期限設定をマスターして、データ管理マエストロになろう!

参考資料

Amazon Simple Storage Service Developer Guide : Object Expiration