RDSを停止した?安心するのはまだ早い!1週間で140USDの課金を発生させた話

2022.07.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、八木です。

最近AWSで検証することが多いので、コストどれくらいかなーとコストエクスプローラを確認してみると、衝撃の数値が待っていました。

140USD

なんとRDSの使用料金として、1週間で140USDの請求が来ていました。(やってしまった)

RDSはインスタンスを一時停止する機能があります。1
私は検証用インスタンスを使用しない間、停止していたのですが、どうやらこのインスタンスで大幅に課金がされているようでした。

今回の失敗を踏まえ、停止中インスタンスの課金体系と注意点を調べたため、この記事で共有できればと思います。

TL;DR

  • RDSは停止中もストレージ料金が発生する
  • プロビジョンドIOPSのストレージ料金は意外と高い
  • 停止したRDSインスタンスは1週間で自動起動される
  • すぐ消すインスタンスでも最小スペックで起動しよう
  • コストアラートを設定しよう

停止中のRDSの料金

RDSには基本的に以下の料金がかかります。2

  • インスタンス料金
  • データベースストレージ料金
  • バックアップストレージ料金

このうち、インスタンスを停止している間はインスタンス料金は課金されませんが、データベースストレージ料金とバックアップストレージ料金はかかります。1

私はこのデータベースストレージ料金がかからないと勘違いしていたため、多大なコストを発生させてしまいました。

コストエクスプローラを見てもわかるように、データベースストレージ料金(RDS:Multi-AZ-PIOS, RDS:Multi-AZ-PIOS-Storage)が費用のほとんどを占めています。

データベースストレージ料金は、使用するストレージタイプによって異なります。
RDSのストレージタイプは汎用SSD(gp2)、プロビジョンドIOPS SSD(io1)、マグネティックの3種類あり、利用が推奨されているのは汎用SSD(gp2)とプロビジョンドIOPS SSD(io1)です。
汎用SSD(gp2)はストレージ容量に対して課金されるのに対し、プロビジョンドIOPS SSD(io1)ではストレージ容量の料金に加え、プロビジョニングしたIOPSについても課金されます。

マネジメントコンソールでRDS for MySQLを作成する際、デフォルトではストレージタイプはプロビジョンドIOPS SSD(io1)、プロビジョンドIOPSは3000IOPS、ストレージ割り当ては100GBとなっています。

この設定でマルチAZ DBインスタンスで起動した場合、データベースストレージ料金は20.16USD/日(ストレージ容量料金:0.81USD、プロビジョニングしたIOPS料金:19.35USD)になります。
(※1ヶ月=31日、マルチAZストレージ料金:0.25USD/GB/月、マルチAZプロビジョンドIOPS料金:0.20USD/IOPS/月で計算。料金は2022/07/12時点のバージニア北部リージョンを参照)

デフォルト設定ではそれなりの費用、特にプロビジョニングしたIOPS料金がかかってしまいます。

気をつけること

  1. 最低限のリソース設定
    先述の通り、インスタンスを停止してもストレージ料金は発生します。マネジメントコンソールのデフォルトの設定でインスタンスを起動していた場合、相当な費用がかかってしまいます。一時的な検証用インスタンスでも、最低限の設定(インスタンスタイプ、ストレージタイプ、ストレージ割り当て、プロビジョンドIOPS等)を心がけましょう。
    また、同じ設定でストレージタイプに汎用SSD(gp2)を使用していた場合、0.74USD/日とかなり割安になります。
    (※マルチAZストレージ料金:0.23USD/GB/月で計算。2022/07/12時点のバージニア北部リージョンの料金)
    必要がなければこちらのストレージタイプを使用すると良いでしょう。

  2. 停止したインスタンスは1週間で自動再起動される
    今回私のケースでは発生しませんでしたが、停止したRDSインスタンスは停止から7日経つと、自動で起動されます。

    DB インスタンスは最大 7 日間停止できます。7 日後に DB インスタンスを手動で起動しなかった場合、DB インスタンスは自動的に起動されるため、必要なメンテナンス更新が遅れることはありません。
    一時的に Amazon RDS DB インスタンスを停止する

    停止したはずなのに、再起動されていてコストが!!というような事態も起こりえます。再起動の予定が決まっていない場合は、インスタンスの停止ではなく、削除をするようにしましょう。

対策

今回のケースに限った話ではないですが、AWS Budgetsのアラートを細かく設定して、想定外のコストを早めに検知できるようにしておくと良いでしょう。
AWS Budgetsは1日に最大3回しか更新されないため、瞬間的に跳ね上がるコストの検出には対応できません。3しかし、今回のようなRDSのコストは一瞬で跳ね上がるものではないため、十分対応できると思います。
また、AWS SNSを通して通知を行うため、Email、SMS、Slack等へ通知を飛ばすことができます。気づきやすいツールを設定しておきましょう。