🪣

【AWS S3】コスト最適化とライフサイクル設定についてちゃんと理解してみた

に公開

TL;DR

  • AWS S3は超高耐久なクラウドストレージだけど、放置するとコスト爆発する
  • S3の課金ポイント(保存、リクエスト、転送)をちゃんと把握するべき
  • ストレージクラスをデータ特性に合わせて使い分けるのが超重要
  • ライフサイクル設定で、自動的にコスト最適化する仕組みを組める
  • 「最初から設計する」意識がめちゃくちゃ大事


はじめに

AWSを触り始めたばかりの新卒エンジニア『くま🐻』です。
新卒タスクとしてS3回りを携わったが、S3について「なんとなくファイルを置けるサービス」という程度でしか知らなかった。けどちゃんと調べてみると全然そんなレベルじゃなかったし、奥が深かった...

今回この記事を書く目的は、
自分が理解を深めるためと、これからS3をちゃんと使う人への参考になればいいなになればと思ってます!


テーマは、「S3のコスト最適化」と「ライフサイクル設定」

まずS3の基本を整理

S3(Simple Storage Service)は、AWSが提供してるオブジェクトストレージサービス。
ポイントだけ整理するとこんな感じっぽい。

  • ファイルをオブジェクト単位で保存
    ➡️ オブジェクトとは「データ本体+メタデータ+キー(名前)」のセットで、ファイルシステムのファイルとは構造が違う。

  • 99.999999999%(イレブンナイン)の耐久性
    ➡️ 複数のアベイラビリティゾーンに自動でレプリケーションされていて、ディスク障害などでもデータが失われない設計。

  • スケールは無制限
    ➡️ GBでもPB(ペタバイト)でも、保存容量に制限がない。使った分だけ課金。

  • インターネット経由でどこからでもアクセス可能
    ➡️ オブジェクト単位でURLが発行できる。公開も非公開も自由にコントロールできる。

  • フラットなオブジェクト構造
    ➡️ 「/」で区切ってディレクトリっぽく見せることはできるけど、内部的にはすべてフラットに管理されてる。実際の階層構造は存在しない。

要するに、超頑丈で、超でかい、世界規模のクラウド倉庫


S3でかかる料金はどこなのか?

ここを理解してないとヤバそうだった。逆に抑えてれば会社のコスト削減に寄与できそう。
S3の課金ポイントは大きく3つに分かれてる。

1. 保存量(Storage)

  • 1GBあたり〇〇円
  • 保存してるだけでずっと課金され続ける

2. リクエスト数(Requests)

  • PUT、GET、COPY、LISTそれぞれに課金
  • 数が増えると無視できない金額になる

3. データ転送量(Data Transfer)

  • インターネットにデータをダウンロードするときに課金
  • 同一リージョン内のアクセスは無料、インターネット越えは課金対象

保存だけじゃなく、取り出しでも金がかかる


ストレージクラスをちゃんと使い分けろ

S3には複数のストレージクラスがあって、それぞれ特徴とコストが違う。

クラス 特徴まとめ
Standard 頻繁にアクセスするデータ用。
Standard-IA たまにしかアクセスしないけどすぐ取り出したいデータ用。
One Zone-IA 単一AZにしか保存しない分、コストがさらに安い。耐障害性は下がる。
Intelligent-Tiering アクセス頻度によって自動でクラスを移動してくれる。
Glacier アーカイブ向け。取り出しに数分〜数時間かかる。
Glacier Deep Archive 超アーカイブ向け。取り出しに最大12時間かかるけど最安。

例:

  • 毎日使うデータ → Standard
  • 3ヶ月以上アクセスないデータ → Standard-IA
  • 1年以上放置されたファイル → Glacier

ライフサイクル設定=S3をちゃんと運用するための必須機能

ライフサイクル設定(Lifecycle Management)を使うと、

  • 一定期間経過後に自動でストレージクラスを変更
  • 一定期間経過後にオブジェクトを自動削除

ができる。

例:

  • 保存から30日 ➡️ Standard-IAへ
  • 90日 ➡️ Glacierへ
  • 365日 ➡️ 削除

これを手動でやるのは現実的じゃないし、絶対ミスるから、
最初からライフサイクルルールを作っておくのが正解

ログ、バックアップ、監視データなど、アクセス頻度が極端に低いデータには必須。


なぜここまでコスト最適化を意識するのか?

最初は「数GBだし大丈夫でしょ」くらいに思ってた部分があった。
でも「10GBが100GBになり、気づいたら1TB」ってパターンは普通にあるとのこと。

特にありがちなのが、

  • ログの保存しっぱなし
  • テストファイルの放置
  • 誰も使ってないバックアップがStandardに残り続ける

クラウドって「使った分だけ払う」っていうけど、
「意図せず使った分も払う」ことになるっていうのが一番怖いところ。


まとめ

  • S3は超便利だけど、放置すると普通にコスト地獄になる
  • 課金ポイント(保存・リクエスト・転送)をちゃんと押さえるべき
  • ストレージクラスはデータ特性に合わせて選び分ける
  • ライフサイクル設定を組んで、勝手にコスト最適化させる
  • クラウドは「ちゃんと考えて使うもの」だと改めて思った

参考資料

Discussion