AWS S3ライフサイクルルール：格納後30日でデータを削除する方法

## **はじめに**
こんにちは！
この記事では AWS S3 を使用してデータ削除を自動化する方法について、AWS初心者向けに解説します。
特に、保存から30日後に不要なデータを削除する設定を中心に進めていきます。

現在参画中のプロジェクトにおいて、S3バケットにファイルがどんどん溜まってきており、ストレージコストが増加しているという課題が発生しました。PMから「効率的な削除設定ができないか」と相談されたことをきっかけに、解決策としてライフサイクルルールを調査・実装しました。この記事では、その過程で得た知見を整理し、共有します。

この設定を行うことで、無駄なストレージコストを削減できます！

---

## **この記事で学べること**
- AWS S3とは？
- ライフサイクルルールの概要
- 「30日経過後に自動削除」のルール設定手順
- 設定後の挙動や注意点
---

## **AWS S3の基礎知識**

### **Amazon S3とは？**
**Amazon Simple Storage Service (S3)** は、AWSが提供するクラウドストレージサービスで、データをオンラインで保存、管理、アクセスできる仕組みです。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/Welcome.html

### **AWS S3を使うメリット**
- **高い耐久性**: 99.999999999%（11の9）という驚異的なデータ耐久性。
- **柔軟性**: 必要に応じてストレージを簡単に拡張。
- **コスト効率**: アクセス頻度や保存目的に応じたストレージクラスを選択可能。



### **基本用語の解説** 
| 用語                  | 意味                                                                                 |
|-----------------------|-------------------------------------------------------------------------------------|
| **バケット (Bucket)** | データを保存する単位。フォルダのような役割を果たします。                              |
| **オブジェクト (Object)** | バケット内に保存されるデータ。ファイル本体に加え、名前（キー）やメタデータを含みます。      |
| **ストレージクラス**     | オブジェクトを保存するためのプラン。例：S3標準、S3 Glacierなど、使用頻度に応じたクラスがあります。|
| **ライフサイクルルール** | 保存期間や条件に応じてオブジェクトを削除または移行する設定。                            |

---

## **ライフサイクルルールとは？**

AWS S3の**ライフサイクルルール**は、S3バケット内のオブジェクトに対して自動的に以下のアクションを実行する設定です：
- **オブジェクトの削除**: 古くなったデータを削除。
- **ストレージクラスの移行**: アクセス頻度が少なくなったデータをコスト効率の高いストレージに移動。

例えば、「30日以上経過したデータを削除する」といったルールを作成することで、不要なデータ管理の手間を省き、ストレージコストを削減できます。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/intro-lifecycle-rules.html

---

## **「30日後にデータ削除」の設定手順**

以下では、**保存から30日後にデータを自動削除するライフサイクルルール**を設定する方法を詳細に解説します。
※バージョニングが有効になっているバケットを対象としています

---

### **ステップ1: AWSマネジメントコンソールにログイン**
1. AWSの公式サイト（[https://aws.amazon.com](https://aws.amazon.com)）にアクセスし、アカウントにログインします。
2. ログイン後、「S3」と検索し、サービスを開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956452/3c397dfe-85c8-4058-b47c-6fbbf4f01545.png)

---

### **ステップ2: 対象バケットを選択**

1. ライフサイクルルールを設定したいバケットを選択します。バケットは、データを保存する「フォルダ」のようなものです。
2. バケット名をクリックし、バケットの詳細画面を開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956452/ff15aaad-d02a-2720-f145-9984aaa6eb0e.png)

---

### **ステップ3: ライフサイクルルールの作成**

1. バケット詳細画面で「**管理**」タブを選択します。
2. スクロールして「**ライフサイクルルール**」セクションに移動し、「**ライフサイクルルールを作成する**」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956452/f9810d93-2850-863c-3223-c248a6ea866b.png)

---

### **ステップ4: ルールの設定**

ここで具体的なルールを設定します。

#### 1. **ルール名を設定**
- 分かりやすい名前を付けましょう（例: `delete-after-30-days`）。

#### 2. **ルールスコープを選択**
- 「**バケット内のすべてのオブジェクトに適用**」を選択。
- 特定のフォルダに限定する場合は、「**1つ以上のフィルターを使用**」を選び、対象フォルダ（プレフィックス）を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956452/9f93f898-e7e2-3bbb-6938-84a4a093a9f9.png)

**重要なポイント:**
- このオプションを選択すると、バケット内のすべてのオブジェクトがルールの対象になります。これを承認するために、「このルールがバケット内のすべてのオブジェクトに適用されることを了承します」にチェックを入れます。
- フィルター（フォルダや特定のファイルに限定）を使用しない場合、スコープ全体を適用する設定が必須です。


#### 3. **アクション設定**
以下のオプションを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956452/9da2433d-dbe5-c726-7d6b-8e98415c3798.png)


１. **現行バージョンのオブジェクトを削除**  
   - 「**オブジェクトの現行バージョンの有効期限が切れる**」にチェックを入れます。
   - 当該オブジェクトにアクセスできる有効期限を設定できます。
   - **オブジェクト作成後の日数**に「30」を入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956452/8295cf34-f1e0-2b84-635c-3f1c6a795284.png)


２. **非現行バージョンのオブジェクトを完全に削除**（オプション）  
   - バージョニングを有効化している場合、過去バージョンも削除する設定が可能です。
   - 「**オブジェクトの非現行バージョンを完全に削除**」にチェックを入れ、「1日」を指定。
       - 有効期限を過ぎたオブジェクトは即時削除されるのではなく、**非現行バージョン**として管理されます。その後、非現行バージョンとなってから何日後に物理削除（完全削除）するかを設定できます。この設定が未指定の場合、オブジェクトは非現行バージョンのままS3上に残り続けます。
   - **非現行バージョンのオブジェクトは1バージョンも保持しない** という場合は保持する新しいバージョンの数を空欄で作成しましょう。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956452/eaa0af5b-5b21-f51d-4881-717803c70cba.png)


３. **有効期限切れオブジェクト削除マーカーの削除**  
   - 必要に応じて、このオプションにチェックを入れることで、削除マーカーも自動で削除されます。
       - 有効期限に達したが、まだ完全にアップロードされていない状態の資産を削除するかどうかを制御します。
   - アップロードに失敗したり、不完全なファイルは不要であるため、最短期間で削除されるよう「1日」に設定しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956452/76f0d0cd-78f6-e3ec-a2e0-282e0ea4643e.png)


---

### **ステップ5: 設定の確認と作成**

1. すべての設定を確認し、「**ルールを作成**」をクリックします。
2. 作成されたルールは、管理画面の「ライフサイクルルール」一覧に表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956452/e7b825ba-e81e-bec7-459c-24a0bc6b2ba5.png)

---

## **設定完了後の動作確認**

設定したライフサイクルルールが正しく動作しているか確認するには以下をチェックしましょう：
1. **30日経過後にオブジェクトが削除されているか**  
   ライフサイクルルールが実行されると、該当するオブジェクトが削除されます。
   （厳密には30日後に非現行バージョンになるため削除されるのは31日後になります）
2. **S3ストレージ使用量の変化**  
   S3ダッシュボードのストレージ使用量グラフを確認すると、削除結果が反映されているかを確認できます。

---

## **注意点**

1. **削除処理のタイミング**  
   - 削除はすぐに行われるわけではなく、ライフサイクルルールが反映されるまで最大24時間かかります。
   - 削除はUTC（協定世界時）基準で行われ、日本時間では午前9時ごろに実行されます。

2. **非現行バージョンの扱い**  
   - バージョニングを有効化している場合、非現行バージョンの削除を設定しないと履歴データが残るため、注意が必要です。

3. **削除されたデータは復元不可**  
   - S3にはゴミ箱のような仕組みはありません。一度削除されると復元はできないため、重要なデータには注意しましょう。

---

## **おわりに**
この記事では、AWS S3のライフサイクルルールを使って保存から30日後に自動的に不要なデータを削除する方法を解説しました。この設定により、不要なデータの管理コストを削減し、ストレージの効率的な運用が実現できます。  

私自身、この設定を実装する過程で、S3の基本やライフサイクルルールの動作を深く理解する良い機会となりました。今回のプロジェクトの課題を解決するだけでなく、今後の運用でも役立つ汎用的なスキルを身に付けられたと思います。この記事が、同じような課題に直面している方の参考になれば幸いです。

---

## **参考文献**
https://qiita.com/miyuki_samitani/items/cbea495fb116b5bf5db6

https://note.com/yuinami/n/n1f92fc5f6113

https://qiita.com/tomotomo_1D/items/bf3f89e56315f4ff9252

https://qiita.com/Lamaglama39/items/2cecece1a8aabf235932