ablog

不器用で落着きのない技術者のメモ

S3 で特定のプリフィックス以下のオブジェクトの過去バージョンを削除する

S3 で特定のプリフィックス以下のオブジェクトの過去バージョンを削除する。以下はバケット test-bucket の test/ 以下のオブジェクトの過去バージョンを削除するケース。UTC 0:00 になると削除される。

  • lifecycle.json を作成する
{
    "Rules": [
        {
            "Status": "Enabled",
            "Prefix": "test/", // 対象のプリフィックスを指定する
            "NoncurrentVersionExpiration": {
                "NoncurrentDays": 1 // 1日以上経過した過去バージョンを削除する
            },
            "ID": "Delete all"
        }
    ]
}
  • ライフサイクルポリシーを適用する。
$ aws s3api put-bucket-lifecycle --bucket test-bucket --lifecycle-configuration file://lifecycle.json
  • ライフサイクルポリシーを確認する。
$ aws s3api get-bucket-lifecycle --bucket test-bucket 
{
    "Rules": [
        {
            "Status": "Enabled",
            "Prefix": "test/",
            "NoncurrentVersionExpiration": {
                "NoncurrentDays": 1
            },
            "ID": "Delete all"
        }
    ]
}
  • ライフサイクルポリシーを削除したい場合は、delete-bucket-lifecycle で削除する。
$ aws s3api delete-bucket-lifecycle --bucket test-bucket

参考

Amazon S3 は、ルールに指定された日数をオブジェクトの次の新しいバージョンが作成された時間に加算し、得られた日時を翌日の午前 00:00 (UTC) に丸めることで、時間を算出します。たとえば、バケット内に 2014 年 1 月 1 日の午前 10 時半 (UTC) に作成されたオブジェクトの現行バージョンがあるとします。現行バージョンを置き換えるオブジェクトの新しいバージョンが 2014 年 1 月 15 日の午前 10 時半 (UTC) に作成され、3 日間の移行ルールを指定すると、オブジェクトの移行日は 2014 年 1 月 19 日の午前 0 時 (UTC) となります。

ライフサイクル設定の要素 - Amazon Simple Storage Service