S3 オブジェクトの有効期限をAWS CLIで確認する

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

S3 バケットのライフサイクルポリシーで、オブジェクトを他のストレージクラスに移動やオブジェクトをアーカイブ、オブジェクトの削除を定義することができます。

このライフサイクルルールを設定したオブジェクトの有効期限を head-object で確認することができますのでご紹介します。

バケットにライフサイクルが設定されているか確認

note: ライフサイクルの設定についてはS3 バケットのライフサイクルポリシーを作成する方法 を参考にしてください。

ライフサイクルは get-bucket-lifecycle-configuration で確認できます。

$ aws s3api get-bucket-lifecycle-configuration --bucket ${bucket_name}
{
    "Rules": [
        {
            "Expiration": {
                "Days": 60
            },
            "ID": "lifecycle-test-rule",
            "Filter": {
                "Prefix": ""
            },
            "Status": "Enabled",
            "NoncurrentVersionExpiration": {
                "NoncurrentDays": 30
            },
            "AbortIncompleteMultipartUpload": {
                "DaysAfterInitiation": 7
            }
        }
    ]
}

今回の例では60日後にオブジェクトが削除されます。

オブジェクトの有効期限を確認する

オブジェクトの有効期限は head-object で確認できます。

$ aws s3api head-object --bucket ${bucket_name} --key ${key}
{
    "AcceptRanges": "bytes",
    "Expiration": "expiry-date=\"Sun, 14 Oct 2018 00:00:00 GMT\", rule-id=\"lifecycle-test-rule\"",
    "LastModified": "Tue, 14 Aug 2018 19:57:04 GMT",
    "ContentLength": 641,
    "ETag": "\"f4cb543f3d9a2fcf9203dc39598c7d88\"",
    "VersionId": "null",
    "ContentEncoding": "utf-8",
    "ContentType": "text/plane",
    "ServerSideEncryption": "AES256",
    "Metadata": {}
}

Expirationからオブジェクトの有効期限が確認することができました。

note: LastModifiedTue, 14 Aug 2018 19:57:04 GMT ですが、ExpirationSun, 14 Oct 2018 00:00:00 GMT になっているのは以下ドキュメントを参照してください。

ライフサイクル設定の要素 | ライフサイクルルール: オブジェクトの存在時間に基づく

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

まとめ

S3 オブジェクトの有効期限をAPIで確認する方法をご紹介しました。APIで取得できるので確認し易いと思います。

参考URL