Amazon S3ライフサイクルルールで作成日から一定期間経過したオブジェクトを自動削除する設定手順をまとめました。プレフィックスを指定して意図した通りにオブジェクトが削除されなかった苦い経験からこの記事は生まれました。
目的
S3へ自動出力しているオブジェクト(主にログファイル関係)を、作成から一定期間経過後に自動的に削除する。
・AWS運用の中でロードバランサー等のログ出力先としてS3を指定しているのですが、保存容量が課金対象になるので、ある程度の期間が経過したら不要と判断してオブジェクトを削除し、S3上のデータ使用量を抑えることが運用上好ましいと考えます。
・バケットの特定のフォルダ以下のオブジェクトを自動削除の対象とします。
設定手順
※AWSはアップデートが激しいので、実際のものと画面周りや表記が変わっている可能性があります。この手順は2021/1時点のものを例に挙げて作成しております。
ライフサイクルルールの設定
1.Amazon S3トップ画面より、対象のバケットをクリック。
2.「管理」タブ > 「ライフサイクルルールを作成する」をクリック。
※ ライフサイクルルールはバケットごとにバケット直下の画面からのみ設定できるようです。
3.「ライフサイクルルール名」は適当なものを付ける。
「プレフィックス」は注意書きにもあるようにバケット名を除いたフォルダ名を指定する。
例)s3://s3-testnkd/s3-accesslog/ の場合は s3-accesslog/
s3://s3-testnkd/logfolder/s3-accesslog/ の場合は logfolder/s3-accesslog/
※1 フォルダ名の後ろに/(スラッシュ)を付けなくても動作しましたが、後述の公式サイトの説明を読むとスラッシュは付けておいた方が良さそうです。
※2 プレフィックスを指定しない(対象フォルダを限定しない)場合は、ルールスコープでバケット内のすべてのオブジェクトに適用を選択してください。
4.「オブジェクトの現行バージョンの有効期限が切れる」にチェックを付けて、「オブジェクト作成後の日数」にオブジェクトを何日間残すかを日数で指定し、「ルールの作成」をクリック。
※ 有効期限が切れる=S3上から削除されるという事のようです。
設定の確認
5.設定が有効になったことを確認するために指定したフォルダを展開し、オブジェクトをクリック。
6.画面を下へスクロール。
7.「有効期限ルール」、「有効期限日」が設定されていることを確認する。
※ 有効期限日はオブジェクト作成日(最終更新日)を基準に指定した日数分経った日付(この例では2018/07/26の31日後)が表示される。
ちなみに、ライフサイクルルールが適用されていないオブジェクトには有効期限が表示されない。
結果
設定後、翌々日の夕方に指定した日数に基づいて古いオブジェクトが削除された。
有効期限日に表示されていた通り、通常は毎日AM9時に古いオブジェクトが削除されるようです。
S3ではフォルダに見える階層構造と、実体であるファイルを合わせてオブジェクトと定義している為、ライフサイクルルールが適用される際はフォルダ(に見える階層構造)も一緒に削除されます。
私は誤って以前のバージョンを完全に削除を指定してしまって空振り。プレフィックスにバケット名を含めて指定してしまって空振り。ツーナッシングの3日目にしてやっとヒットを打てました。但し、2018/7~2020/12までオブジェクトが溜まっていたためか、直近31日分を残してそれ以前のオブジェクトが全て削除されたのは設定日から2日後の夕方頃でした。下記公式サイトQ&Aに遅延する場合があると記載はあったものの、なかなかオブジェクトが削除されなかったので冷や冷やしましたが、やっと過去のオブジェクトがごっそり削除されてすっきりしました。
公式サイトより引用
ライフサイクルルールが確認されてから、ルールのアクションが完了するまでに遅延が生じる場合があります。請求の変更は、アクションが完了していない場合でも、ライフサイクルルールが満たされたときに適用されます。
申し込みから 1 日以上経過しても Amazon S3 バケットのライフサイクルルールが機能していません。なぜですか?
https://aws.amazon.com/jp/premiumsupport/knowledge-center/s3-lifecycle-rule-delay/
将来の自分や他の方が同じ轍を踏まないように書き残しておきます。
参考URL)
ライフサイクル設定の要素
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/intro-lifecycle-rules.html
コメント