ようへいの日々精進XP

よかろうもん

Amazon S3 の lifecycle 設定をちょっと試したのでメモ

参考

docs.aws.amazon.com

うんちく

lifecycle 設定とは

ざっくり言うと、S3 に保存しているオブジェクトの有効期限を付けること。lifecycle 設定には以下のよな特徴がある。(こちらより引用)

  • バケット内のオブジェクトに対して個別に設定することが出来る(最大 1000 個)
  • 有効期限に達したオブジェクトに対して 2 つのアクション(Transition アクション or Expiration アクション)を選択することが出来る
  • Transition アクション = オブジェクトを Glacier にアーカイブする
  • Expiration アクション = オブジェクトを有効期限切れに(削除)する
  • 特定のオブジェクトをプレフィックスとして指定すると、ルールはその特定のオブジェクトだけに適用される
  • path/ をプレフィックスとして指定すると、path/ で始まるオブジェクトに適用される
  • 空のプレフィックスを指定すると、ルールはバケット内のすべてのオブジェクトに適用される

詳細については以下のドキュメントが詳しい。

docs.aws.amazon.com


実践

ということで

AWS CLI の s3api を利用して試してみる。

バケットに定義されている lifecycle の確認

  • 実行
aws s3api get-bucket-lifecycle --bucket ${backet_name}
  • 実行結果
{
    "Rules": [
        {
            "Status": "Disabled",
            "Prefix": "foo",
            "Expiration": {
                "Days": 3
            },
            "ID": "foo_lifecycle"
        },
        {
            "Status": "Enabled",
            "Prefix": "bar",
            "Expiration": {
                "Days": 3
            },
            "ID": "bar_lifecycle"
        }
    ]
}

バケットに test_lifesycle.json に定義されている lifecycle を設定する

  • test_lifesycle.json
{
    "Rules": [
        {
            "Status": "Disabled",
            "Prefix": "foo",
            "Expiration": {
                "Days": 3
            },
            "ID": "foo_lifecycle"
        },
        {
            "Status": "Enabled",
            "Prefix": "bar",
            "Expiration": {
                "Days": 3
            },
            "ID": "bar_lifecycle"
        }
    ]
}
  • 実行
aws s3api put-bucket-lifecycle --bucket  ${backet_name} --lifecycle-configuration file://test_lifesycle.json

object の lifecycle を確認する

  • lifecycle 未定義状態
% aws s3api head-object --bucket ${backet_name} --key bar_logs_lifecycle/to/object
  • 実行結果
{
    "AcceptRanges": "bytes",
    "ContentType": "text/plain",
    "LastModified": "Wed, 03 Jun 2015 00:17:40 GMT",
    "ContentLength": 314,
    "ETag": "\"ee29acb473fe37230e4654ff6485afac\"",
    "Metadata": {}
}
  • lifesycle を定義した状態
% aws s3api head-object --bucket ${backet_name} --key bar_logs_lifecycle/to/object
  • 実行結果
{
    "AcceptRanges": "bytes",
    "ContentType": "text/plain",
    "LastModified": "Wed, 03 Jun 2015 00:17:40 GMT",
    "ContentLength": 314,
    "ETag": "\"ee29acb473fe37230e4654ff6485afac\"",
    "Expiration": "expiry-date=\"Sun, 07 Jun 2015 00:00:00 GMT\", rule-id=\"bar_lifecycle\"",
    "Metadata": {}
}

おお。


といふことで

lifecycle 設定を適切に設定することで S3 に保存したオブジェクトの期限を適切に管理して保存のコストをうまくコントロールしたいですな。