🕌

RDSのストレージを適当に決めたせいで請求が爆上がりした

に公開

はじめに

先日、RDSを別リージョンで立ち上げっぱなしにしていて、気づいたら想定以上の請求が来ていました。
特に痛かったのでストレージ容量を400GBにしていた点。何も考えずに多ければいいだろうという安直且つ適当な考えで設定した結果こうなったわけですが、そもそも何故大容量だと料金が膨らむのか、RDSの料金に関しての説明とストレージの提供はどのようにして行われているのかについてまとめていこうと思います

RDSのストレージ課金の仕組み

以下簡単にまとめるとストレージ料金はこのような形で費用が掛かります

  • RDS のストレージ料金は「使った量」ではなく「確保した量」で課金される。400GB と指定すれば、使ってなくても 400GB 分が毎月かかる。
  • RDS のブロックストレージは Amazon EBSで提供され、Multi-AZだと主系と待機系の両方のボリュームに対してストレージ課金が発生する

Multi-AZというのは同じデータを持った DB を2つ用意する仕組みの事です。
これは本番と待機の二重構成で、落ちても自動復旧するけど、片方は普段役立たない保険だからコストは倍近くかかるということになります。単純に400GB×2という感じになります。
僕の場合Single-AZ構成だったので倍にはなりませんでしたが、一応Multi-AZに関しても覚えておいた方がいいでしょう

ストレージはEBSというものから提供されている

「EBSとは何ですか」という人のために説明すると...

  • EC2(仮想マシン)や RDSが使うブロックストレージを提供するサービス。
    ということです。ブロックストレージというのは簡単に言うと仮想マシンのCドライブ/Dドライブ」のような存在になります。
    簡単にまとめると、**EBS=AWS 上の“仮想SSD”**ということになります。

ではなぜお金がかかるのか(物理的な理由)

  • クラウドといっても、裏側ではやっぱり データセンターに並んだ物理サーバーやSSD が動いています。
  • EBS = 仮想SSD ですが、これは魔法で無限に出てくるわけじゃない
  • ユーザーが「400GBほしい」と指定した瞬間、AWS はその分の 物理SSD上のブロック領域を予約 します
  • 予約した以上は、他のお客さんには割り当てられない(共有できない)
  • さらに EBS は AZ 内で複数台の物理サーバーに自動レプリカを作って耐障害性を確保しているため、400GB指定 = 実際には裏でそれ以上の容量を確保している

つまり 「確保した=物理的にリソースを専有した」ことになるので、その分の料金が必ず発生する

まとめ

結局のところ、RDS のストレージ料金が「確保した分」で課金されるのは、裏では本物の物理SSDが動いているからです。クラウドは魔法の黒い箱ではなく、AWS自身が運営するデータセンター(場所は非公開)にある物理サーバーのリソースを切り出して貸しているにすぎません。だからこそ「多めに取っておこう」と400GBを確保すると、裏で400GBぶんのSSDが占有され、使わなくてもその分の費用が発生してしまうわけです。

Discussion