Amazon S3のライフサイクルポリシーでオブジェクトをGlacierに移行して保管後に削除する

2020.10.28

概要

AmazonS3でログなどを長期保管する際、コストが気になるかと思います。

ここでは、ライフサイクルポリシーを設定して、指定日数後にオブジェクトをGlacierに移行し、 さらにGlacierで保管後に削除する方法を記載したいと思います。

設定方法

設定方法は幾つかあります。 ここではAWSコンソールによる方法と、AWS CLIから設定する方法を記載します。

コンソールによる設定方法

まずライフサイクルポリシーを設定したいバケットをクリックし、「管理」タブをクリックします。 「ライフサイクル」をクリックし、その下の「+ライフサイクルルールの追加」を押下します。

ライフサイクルルールの入力画面に、ルール名を入力します。 ここでは「Glacierに1日で移行してその1日後に削除」というルールを作成してみます。 このルールを設定すると、S3にログが格納されてから、1日後にGlacierに移行され、さらにその1日後(つまりログが最初に格納されてから2日後)に削除されることとなります。 (なお、基準時間が0時0分 (GMT) で定められており、0時0分 (GMT)を跨いだ時点から日数がカウントされます。)

さらに、その下の「ルールスコープを選択」で、特定のプレフィックスやタグにファイルを限定して、ルールを適用することもできます。 特定の文字列が含まれる名前のファイルのみ1日後に削除したいといった設定ができます。 ここでは、「バケット内のすべてのオブジェクトに適用」を選択し、制限はしない設定をします。

ストレージクラスの移行について、適用するバージョンにチェックをして、移行の日数を指定します。 ここでは「現行バージョン」を指定しています。 「オブジェクト作成」のリストで「Glacierへの移行の期限」を選択、オブジェクト作成からの日数(ここでは1日)を指定します。

次に、失効の設定で、日数を指定します。ここはファイルが格納された日から削除までの日数を入力します。 そのため、今回だと2日になります。

不完全なマルチパートアップロードのクリーンアップもこちらで日数の設定ができます。

内容を確認して「保存」を押下すると、以下のようにライフサイクルルールが作成され、有効のチェックが入ります。

これで、設定できました。

ルールを無効化したい場合は、対象の「ライフサイクルルール」を選択して、「アクション」から「ライフサイクルルールを無効にする」を押下、確認を押下すると、有効のチェックが外れて無効化ができます。

CLIから設定する方法

JSONで設定ファイル(lifecycle.json)を作成します。

{
    "Rules": [
        {
            "Filter": {
                "Prefix": "documents/"
            },
            "Status": "Enabled",
            "Transitions": [
                {
                    "Days": 1,
                    "StorageClass": "GLACIER"
                }
            ],
            "Expiration": {
                "Days": 2
            },
            "ID": "ExampleRule"
        }
    ]
}

以下のAWS CLIコマンドを実行して、バケットにライフサイクル設定を指定します。

$ aws s3api put-bucket-lifecycle-configuration  --bucket BUCKET_NAME  --lifecycle-configuration file://lifecycle.json

無事設定されているかは以下のコマンドで確認します。

$ aws s3api get-bucket-lifecycle-configuration  --bucket BUCKET_NAME

以下のように設定内容がJSONで参照できていれば、設定完了です。

 

 

 

参照

S3 バケットのライフサイクルポリシーを作成する方法
AWS CLI を使用してライフサイクル設定を指定する
Amazon S3でオブジェクトの有効期限を設定できるようになりました
Amazon S3のオブジェクト移行・削除タイミングを調べてみた
Amazon S3オブジェクトのライフサイクルをAWS CLIから設定する