S3のコスト削減をやってみた

## はじめに
この記事は、[ミロゴス Advent Calendar 2023](https://qiita.com/advent-calendar/2023/milogos) 1日目の投稿です。
本記事では、実際に行ったS3を利用したコスト削減手法について学んだ内容をまとめました。


## 背景、目的
弊社では、円安による毎月の請求額の抑制が必要と感じており、コスト削減策を検討しています。
その中で、**比較的簡単で効果の高いS3を使用した削減手法**について紹介します。

具体的には、ストレージクラスの変更による毎月のストレージ料金の削減に焦点を当てて説明します。


## 要件
### コストの把握
まず、コスト削減の手法を適用する前に、現状のコストを把握することが重要です。
サービス一覧から「Cost Explorer」を選択し、現在のコストを確認します。
各サービスごとのコストを参照し、**S3が占める割合が高いかどうか**を確認します。

もしS3が高い割合を占めている場合、今回の手法を適用することで大幅なコスト削減が期待できます。

### S3 バケットの調査
次に、S3バケットを詳細に調査します。
**容量の大きなバケットを優先的に対象**とするため、ストレージクラスの変更はバケットごとに適用されます。
S3の「Storage Lens」→「ダッシュボード」から、上位3つのバケットから対象となるバケットを特定します。

##### 調査結果
弊社では、特定のバケットが全体の容量の90％以上を占めていることが明らかになりました。
このバケットは、バックアップの保存に使用されており、データのコストはS3 Standardの料金で計算されていることを確認しました。
また、サイズも50TBを超えているため、削減効果が大きいバケットであることが確定しました。

![上位3個のバケット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952491/69a3bed2-3c1f-2272-f150-47b2b969a967.png)

### 移管先のストレージクラスの検討
ストレージクラスの移管先については、以下の4つの観点から判断します。

##### アクセス頻度
他のシステムや部署がデータにアクセスする目的を確認し、データが取得される要件に基づいて、月単位および日単位でのアクセス頻度を記録します。
そして、これに基づいて適切なストレージクラスを選択します。
アクセス頻度が低い場合は、**ストレージ料金が低いがデータ取得料金が高いクラス**を検討できます。

##### 取り出しの許容時間
対象のバケットからデータを取得する際に、許容できる時間を明確に記録します。
データを**急いで取り出す必要がある場合は、取り出し時間が速いストレージクラス**を優先的に検討します。

##### データの重要性
重要なデータの場合は、**高い冗長性やバックアップ機能を提供するストレージクラス**を優先的に検討します。
セキュリティ要件に適したストレージクラスを選択することが必要です。

##### 最小ストレージ期間
移管先のストレージクラスには、最小保存期間の制約があることがあります。
**データの保存期間を確認し、それに合わせた最適なクラス**を選択します。

#### 最小ストレージ期間
移管先のストレージクラスには**最小保存期間の制約**がある場合があります。
データの保存期間を確認し、それに合わせて最適なクラスを選択してください。


これらの観点を総合的に評価し、ビジネスの要件や予算に最も適した移管先のストレージクラスを選択します。

> [Amazon S3 の料金](https://aws.amazon.com/jp/s3/pricing/)
> ストレージ料金一覧表です。
> 
>[アーカイブの取り出しオプション](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/restoring-objects-retrieval-options.html)
> Amazon S3 にアーカイブされたオブジェクトを復元する際に使用できる取り出しオプションです。

### ライフサイクルの検討
ライフサイクルを設定することで、一定期間経過したオブジェクトを別のストレージクラスに自動的に移行できます。
アクセス頻度が低くなる期間を調査し、それに合ったストレージクラスを検討してください。

### （参考）おすすめのストレージクラスと特徴
弊社で使用して良かったストレージクラスを紹介します。

##### Glacier Deep Archive
- **長期保存**に適しています。
- 他のストレージクラスと比べて、**1GBあたりのストレージ料金が非常に低い**です。
    - 0.002USD/GB
- データの取り出しに長時間がかかります。
    - 12時間以内の取得ができます。
        - 短時間が良い場合は、迅速な取り出しが可能なGlacier Flexible Retrievalが推奨されています。
- データ取り出し料金がかかります。

##### Standard-IA
- 重要なデータで頻繁にアクセスしないものに適しています。
- Standardより1GBあたりのストレージ料金が低いです。
    - 0.0138USD/GB
- データの取り出し料金が他のストレージクラスよりも低いです。

##### 比較表
|  | Standard | Standard-IA | Glacier Deep Archive |
| --- | --- | --- | --- |
| ストレージ料金 |最初の 50 TB/月のみ： 0.025USD/GB<br>次の 450 TB/月：0.024USD/GB<br>500 TB/月以上：0.023USD/GB | 0.0138USD/GB | 0.002USD/GB |
| データアクセス料金 | --- | 0.01USD/GB | 0.022USD/GB |
| ライフサイクル移行料金<br>(1,000オブジェクトあたり) | --- | 0.01USD | 0.065USD |
| 取り出し時間 | 即時 | 即時 | 12 時間以内 |
| 最小ストレージ期間 | --- | 30日 | 180日 |

（注）上記情報は2023年11月16日時点のものであり、アップデートにより変更される可能性があります。


## 適用方法
#### ストレージクラスの変更
1. バケット内の対象オブジェクトを選択します。
2. 「アクション」 -> 「ストレージクラスを編集する」を選択します。
3. 移管先のストレージクラスを選択します。
4. 変更を保存ボタンをクリックして完了です。


#### ライフサイクルの設定
1. 対象のバケットを選択します。
2. 「管理」 -> 「ライフサイクル設定」 -> 「ライフサイクルルールを作成する」を選択します。
3. オブジェクトの現行バージョンまたは非現行バージョンを選択します。
4. 移管までの日数を入力します。
5. 変更を保存ボタンをクリックして完了です。

![ライフサイクルの設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952491/913bcb97-2114-e677-9301-8afda93aeed9.png)


#### 有効期限切れのオブジェクトの削除
移管のついでに使用予定のない不要なオブジェクトも削除しましょう。

1. 対象のバケットを選択します。
2. 「管理 -> ライフサイクル設定 -> ライフサイクルルールを作成する」を選択します。
3. オブジェクトの現行バージョンまたは非現行バージョンを選択します。
4. 削除までの日数を入力します。
5. 変更を保存ボタンをクリックして完了です。

![有効期限切れのオブジェクトの削除 .png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952491/d43b078f-c7ea-afb6-4923-5888ea4a85ed.png)


## 削減効果について
### コスト推移
7月に特定のバケットのストレージクラスをGlacier Deep Archiveに変更した結果、
一時的に移行料金が発生し、その費用が若干高くなりました。
しかし、その後は**毎月のストレージ料金が大幅に削減**されます。
（金額としては、約70％減少）

![コスト推移.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952491/0f02dbf0-159e-5dc8-e487-c6ddb70e860d.png)


### バケットのストレージクラス
7月27日を境に、ほぼ9割近くのデータがGlacier Deep Archiveに移行されたことを確認しました。

![バケットのストレージクラス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952491/4f72edde-5b4b-73ac-efbe-82ccb230d05d.png)


## さいごに
コスト削減としてS3のストレージクラス変更とライフサイクル設定は、とても効果的な方法でした。
これにより、月々のコストを劇的に削減し、円安による請求額の抑制にも成功しました。
また、次のコスト削減につきましても紹介できればと思います。