AWSでmicroインスタンスを使っていたら想定以上に課金された話
かなり痛い目を見たので、自戒の意味も込めてメモ。
事象
- 今年4月に,社内向けにある用途のアプリケーションサーバとして、microインスタンス上にRails + Nginx + MySQLの環境を作成。
- 6月でそのアプリの用途が終わったが、お上からの要望で7月いっぱいは24hで稼働させておくことに。
- 7/31にサーバをTerminate.
見積もりでは、利用料金は数ドルで済むと考えていました。実際、6月まではその通りでした。
ですが、7月分の利用料金を確認してみると、なんと80ドルも課金されていました。
上記80ドルすべてがEBSのI/Oに対しての料金でした。 インスタンスの稼働時間自体は無料範囲内です。
7月はほとんど使っていないのに、なぜ?と考えてみました。
原因
調査をしようにもサーバ自体はTerminateしているので、手の打ちようがありません。ここから先は全て私の推測です。
もうお気づきの方もいるかと思いますが、メモリが不足してswap領域に書き込みが発生しまくったのが原因ではないかと考えています。
613MBしかメモリがないmicroインスタンス上でRails + MySQLを動かすと、当然メモリは不足します。で、swapにガリガリI/Oが発生します。
利用中も何度か再起動したりしていましたが、7月に入ってからは放置状態が続いていました。ですので、放置された分だけひたすらメモリを食い続けてしまったのだと思います。
対策
今回の件はもうどうしようもないですが、今後の教訓としては
- (当然ですが)swapに対してもEBSのI/O課金が発生する!
- microインスタンスで無停止ロングランはさせない!
これに尽きるのではないかと思います。
microで80ドル払うなら、m1.smallを一ヶ月フルで稼働させた方が安いです。
とはいってもやはりmicroの低料金は魅力的なので、使っていない場合はシャットダウンする、という鉄則を守り、適宜OS/ミドルウェアの停止/再起動をした方がいいと思います。
もう少し大きい規模の話ならクラウド破産するところだった、という話でした。