S3にライフサイクルを設定し、ストレージクラスの移行を実現する

# 今日の目標

各種ログの出力先としてS3を指定しているので、ずっと保存していると利用容量が増える一方なので、特定のS3バケットで一定期間を過ぎたオブジェクト（ファイル）を削除したい。

# 方針

S3のライフサイクルポリシーを使ってS3バケットに対する有効期限アクションの設定をする。

# S3とは　

改めてS3とは何かをAWS公式ドキュメントから抜粋

>Amazon Simple Storage Service (Amazon S3) は、業界をリードするスケーラビリティ、データ可用性、セキュリティ、およびパフォーマンスを提供するオブジェクトストレージサービスです。これはつまり、企業の規模にかかわらず、あらゆる業界のお客様が、データレイク、ウェブサイト、モバイルアプリケーション、バックアップおよび復元、アーカイブ、エンタープライズアプリケーション、IoT デバイスやビッグデータ分析などのさまざまなユースケースのデータを保存して保護することができるということです。Amazon S3 はデータを整理しアクセス制御を細かく調整するために使いやすい機能を提供しており、ビジネスや組織における規則やコンプライアンスの要件を満たしやすく設計されています。Amazon S3 は 99.999999999% (9 x 11) の耐久性を実現するように設計されており、世界中の企業のために、何百万ものアプリケーションのデータを保存しています。

AWS公式ドキュメントS3（https://aws.amazon.com/jp/s3/）

# ライフサイクルとは

ライフサイクルについて、こちらもAWS公式ドキュメントから抜粋

>オブジェクトがライフサイクルを通じてコスト効率の高い方法で保存されるように管理するには、Amazon S3 ライフサイクルを設定します。S3 ライフサイクル 設定は、Amazon S3 がオブジェクトのグループに適用するアクションを定義する一連のルールです。
ライフサイクル設定を使用する必要がある場合
オブジェクトのライフサイクルが明確に定義されていれば、S3 ライフサイクル 設定のルールを定義します。以下に例を示します。

定期的なログをバケットにアップロードする場合、アプリケーションは 1 週間または 1 か月間、それを必要とする可能性があります。その後は、削除することができます。

ドキュメントには、一定の期間中に頻繁にアクセスされるものがあります。その後は、頻繁にアクセスされません。ある時点で、リアルタイムでアクセスする必要はないものの、所属している組織や規則によって、特定の期間アーカイブしておくよう要求される場合があります。その期間が過ぎれば、削除してかまいません。

主にアーカイブ目的のため、ある種類のデータを Amazon S3 にアップロードする場合があります。たとえば、デジタルメディア、財務や医療の記録、生のゲノムシーケンスデータ、データベースの長期バックアップ、法規制準拠のために保管が必要なデータをアーカイブできます。

S3 ライフサイクル 設定ルールを使用すると、より安価なストレージクラスへのオブジェクトの移行、またはアーカイブや削除を Amazon S3 に指定できます。

ライフサイクル管理の中でも下記２アクションが用意されていて、今回は有効期限アクションについて記載します。

・移行アクション
・有効期限アクション


# GUIからの設定手順

以下にマネジメントコンソールからの設定方法を記載します。

1.S3マネージメントコンソールへ遷移

AWSマネジメントコンソールにサインインし、AWS S3コンソールにサインインし、AWS S3コンソールを開きます。

https://console.aws.amazon.com/s3/

2.ライフサイクルポリシーを設定したいバケットを選択

設定したい対象バケットをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520895/e356c61b-c3b7-4d4a-0264-615cae5dfa1d.png)

3.ライフサイクルポリシールールを追加

バケット設定画面からライフサイクルポリシールールの追加を行います。

管理タブ　→　「+ ライフサイクルルールの追加」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520895/c8da945a-c9d5-0770-ebe8-062bde1bd464.png)

4.ライフサイクルルールの設定

ルール名を入力し、「次へ」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520895/df85706c-3213-eecd-73a5-4a68b94e1899.png)

何も設定せず「次へ」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520895/7b3fd311-5318-3816-e2f6-b2d5246d3e8e.png)

現行バージョンへチェックを入れ、失効期限日数を指定して「次へ」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520895/dcd8821b-f2f1-7ec9-3171-83aa96f5a9b7.png)

設定内容の確認画面が表示されるので、内容に問題がなければ「保存」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520895/6e355ae1-f54f-7b41-b7da-96e06064a011.png)
以上でライフサイクルルールの作成が完了となります。

5.ライフサイクルポリシーの確認

作成したライフサイクルルールの左にレ点が表示されていることを確認してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520895/3f88291a-5c12-3469-1187-68bfc82a4aeb.png)

※オブジェクトの削除タイミングについて

有効期限アクションを設定したバケットについては、下記の基準で削除されます。

オブジェクトの作成日（アップロードされた日）からの経過日数で削除対象を判定します。

オブジェクトが削除対象になった翌日の午前00:00 UTC(協定世界時）に削除されます。
→日本時間の午前9:00頃になります。

# まとめ

経過日数に応じて、特定S3バケットでオブジェクト（ファイル）を削除する方法は以上になります。


# 参考
今回は削除するポリシーでしたが、移行アクションを設定することで以下のストレージクラスへの移行が可能になります。

・標準 – IA への移行の期限。

・Intelligent-Tiering への移行の期限。

・1 ゾーン – IA への移行の期限。

・Glacier への移行の期限。

・Glacier Deep Archive への移行の期限。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/520895/157e4913-96d6-f1e0-55ab-2d03d9576e0a.png)

##アクセス頻度の高いオブジェクトのストレージクラス
パフォーマンスが大きく影響するユースケース (ミリ秒単位のアクセス時間を必要とする場合) とアクセス頻度の高いデータには、Amazon S3 が次のストレージクラスを提供します。

・S3 スタンダード—デフォルトのストレージクラス
オブジェクトのアップロード時にストレージクラスを指定しない場合、Amazon S3 は S3 Standard ストレージクラスを割り当てます。

##アクセスが頻繁なオブジェクトと頻繁ではないオブジェクトを自動的に最適化するストレージクラス

・S3 Intelligent-Tiering ストレージクラス

パフォーマンスの低下や、オペレーション上のオーバーヘッドを発生させることなく、最もコスト効率の高いストレージアクセス階層に自動的にデータを移動することで、ストレージコストを最小限に抑えるように設計されています。S3 Intelligent-Tiering は、アクセスパターンが変更されたときに、頻繁なアクセス用の階層と頻繁ではないアクセス用の低コスト階層の 2 つのアクセス階層の間で、オブジェクトレベルで細かくデータを移動することで、自動的にコストを削減します。S3 Intelligent-Tiering ストレージクラスは、アクセスパターンが未知または予測不能な長期間使用するデータでのストレージコストを自動的に最小限に抑えたい場合に理想的です。

S3 Intelligent-Tiering ストレージでは、2 つのアクセス階層 (アクセスが頻度なデータ用に最適化された階層と、アクセスが頻度ではないデータ用に最適化された低コスト階層) にオブジェクトを保存します。オブジェクトごとのモニタリングおよび自動化にかかる月額料金を抑えるために、Amazon S3 では S3 Intelligent-Tiering ストレージクラスのオブジェクトのアクセスパターンをモニタリングし、30 日間連続してアクセスがなかったオブジェクトは、頻繁ではないアクセス用の階層に移動されます。

## アクセス頻度の低いオブジェクトのストレージクラス

・S3 スタンダード-IA と S3 One Zone-IA のストレージクラス

存続期間が長く、アクセスが頻繁ではないデータ用に設計されています。(IA は infrequent access (頻度ではないアクセス) の略) S3 スタンダード – IA と S3 1 ゾーン – IA のオブジェクトはミリ秒単位のアクセス (S3 スタンダード ストレージクラスと同じ) で使用できます。Amazon S3 ではこうしたオブジェクトの取り出し料金が発生するため、アクセスが頻繁ではないデータに最適です。

## オブジェクトのアーカイブに適したストレージクラス

S3 Glacier および S3 Glacier Deep Archive ストレージクラスは、低コストのデータアーカイブ用に設計されています。これらのストレージクラスは、耐久性と弾力性の点で S3 スタンダード ストレージクラスと同等です。

つまり、ストレージクラスの移行アクションとライフサイクルポリシーを組み合わせることにより、

初めの一か月は頻繁にアクセスするデータ　⇒　標準

１か月後に　スタンダードIAに移行

3か月後に　S3 Glacierに移行

といったデータアーカイブのプランを組むことができます。