S3コスト削減Tips: 有効期限とストレージクラスを変更しよう

# はじめに

S3 にログを保存する場合など、何も対策していないとストレージのサイズが増え続け、コストが増大してしまいます。

S3 のストレージの料金は主に「オブジェクトサイズ」「ストレージクラス」「保存期間」で決まります。（無料利用枠やリージョンによっても若干変わりますが、ここでは割愛します。）

例えば、1GBのファイルをS3標準のストレージクラスで1ヶ月保存すると、 0.025ドルになります。

https://aws.amazon.com/jp/s3/pricing/

なので、不要なオブジェクトを削除して「保存期間」を短くしたり、「ストレージクラス」を変更することでコストの削減ができます。

この記事では、ライフサイクルルールでオブジェクトの有効期限とストレージクラスを変更することで、コストを削減する方法を紹介します！

# 有効期限の設定

不要な古いログを保存し続けると、余計な料金が発生してしまいます。
有効期限を設定し、古いログを削除してコストを抑えましょう！

ライフサイクルルールでオブジェクトの有効期限を設定し、一定期間経ったログを自動削除する方法を紹介します。

AWS Console で設定する場合は、対象のバケットの「管理」タブからライフサイクルルールを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/60ad4989-3797-95cd-8859-10fa0bf46954.png)

有効期限の設定をするには、「ライフサイクルルールのアクション」で「このオブジェクトの現行バージョンを有効期限切れにする」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/1a6676d1-fc1a-4a35-2dc9-70992a2cbf38.png)

あとは、オブジェクトが作成されてから何日後に有効期限切れにするかを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/0d3779e0-8d3b-f740-cbcc-14b65744f4fe.png)

その他ルール名などを設定しルールを作成したら、それ以降は自動で有効期限が切れたオブジェクトが自動削除されます。

詳細は公式ドキュメントを参照しましょう。

[オブジェクトの有効期限 - Amazon Simple Storage Service](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/lifecycle-expire-general-considerations.html)

# ストレージクラスの変更

ストレージクラスによって料金が変わるので、適切なストレージクラスを選択することが重要です。特にログのような滅多にアクセスしないファイルを保存するバケットでは、Glacier系のストレージクラスにしておくと、料金を抑えることができます。

ストレージクラスごとの料金や制限の詳細はここでは割愛させていただきます。詳細はドキュメントを読みましょう。

[ストレージクラス - Amazon S3 ｜AWS](https://aws.amazon.com/jp/s3/storage-classes/)

ストレージクラスの変更は、ライフサイクルルールで行うとバケット内のオブジェクトに対して一括でできます。AWS Console で設定する場合は、対象のバケットの「管理」タブからライフサイクルルールを作成します。

`現行バージョンのオブジェクトをストレージクラス間で移行する` を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/c4c6c33a-4683-3770-ed22-31b81b575d09.png)

変更後のストレージクラスを選択します。オブジェクト作成後、一定日数が経ってからストレージクラスを変更するような設定も可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/b837807c-f334-2464-9853-d43e45119639.png)

ルールを作成して数日待つと、ストレージクラスが変わっていることが確認できると思います。

いくつか注意すべきことがあります。ストレージクラスの変更には、変更するオブジェクト数に応じて料金が発生するので事前に見積もっておきましょう。（[料金表](https://aws.amazon.com/jp/s3/pricing/)の「ライフサイクル移行リクエスト」の部分）

また、ストレージクラスによっては、「最小ストレージ期間」というものがあり、例えば Glacier Instant Retrieval は 90日間の最小ストレージ期間があるため、オブジェクトが Glacier Instant Retrieval になってから90日以内に削除される場合、90日分のストレージ料金が発生します。

そのため、有効期限による削除と併用する場合など、ストレージクラスを変更してすぐに削除すると余計な料金がかかってしまう可能性があります。

オブジェクトを削除してからストレージクラスを変更するか、削除予定のオブジェクト以外のストレージクラスを変更するなど工夫して、コストを抑えましょう。

# おまけ: Storage Lens でストレージサイズの大きいS3バケットを探す

S3 には Storage Lens というストレージの使用状況を可視化する機能があります。
この機能で見れる情報として無料のメトリクスと有料のメトリクスがありますが、無料のメトリクスだけでも十分有用なので、S3を使っている方は活用することをお勧めします。

`default-account-dashboard` というデフォルトのダッシュボードがあるので、そこから無料のメトリクスが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/b2726e2f-c224-7fe9-0ba3-8d03347fd187.png)

例えば、ストレージの合計サイズの大きいバケットを見つけることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/325392/d362fc3c-a27c-fbcb-d824-5b29f39e3535.png)

Storage Lens でストレージサイズの大きいS3バケットを探し、ライフサイクルルールなどでコストを削減しましょう！

詳細はドキュメントを参照してください。

[Amazon S3 ストレージレンズを使用してストレージのアクティビティと使用状況を評価する - Amazon Simple Storage Service](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/storage_lens.html)