RDSとEC2の運用思想の違い
私がここ最近RDSを使っていて、EC2のように運用できるだろうと思っていたのですが、それは大きな間違いでした。
もちろん同じな部分はあるのですが、細かな思想の違いが大きな運用実装に影響をあたえ、あまつさえ課金にまで影響してきたので、気が抜けません。
それは何かというと、インスタンス停止しても7日後には自動的に再起動してくる、リビングデッド仕様です。つまり、月の頭に停止しても、翌月の請求には21日間の金額が計上されているということです。
そして、それはマニュアルを調べても明確な答えが載っていません。課金を完全に止めるには、削除するしか無いのです。
RDSは非常に高度なサービス
では、何故このような運用になっているのか?というと、そもそもデータベースシステムというのは停止させてはいけません。現代においては、常時オンラインで動かすものです。では、この停止という機能は何故ついているのでしょうか?それは、単純にメンテナンスのためです。
移行や、インスタンスサイズのアップ/ダウンなどを行うときは一時停止させるべきですし、一般的にはシングル構成のデータベースシステムを作ることはあまりなく、Master/Slave構成にしておくはずです。
このとき、コールドスタンバイ/ホットスタンバイという選択はあるにせよ、バックアップを用意しておくという概念が必要です。
そして、自動起動を強制的に行っている理由は、想像ですが立ち上げ忘れを考慮してではないかと思います。
ただ、こうなると融通の聞かない高度なサービスになってしまうので、RDSを使う前にEC2やLightsailの中にMySQLなどをインストールして運用可能かを十分に検討する必要はあるでしょう。
RDSはどういうときに使うべきか?
さて、RDSはどういったときに利用すべきなのでしょうか?一つはスケールするビジネスかどうかにかかるでしょう。大規模な顧客が存在し、その大量の顧客を捌かなければいけないが、インフラの人員がまだ少ないといったときに、メンテナンスコストと構築運用コストを天秤にかける場合です。
別記事でも任天堂の事例を調べましたが、技術的に出来る人がいる場合はEC2上にMySQLを立てて、独自運用を行うで問題ないと思います。そのほうがチューニングを細かく行えるので、誰も体験したことがない驚異的なトラフィックを捌くなどの場合はEC2による自前の実装が良いでしょう。
まとめ
RDSがだめ、と言っているわけではなく、便利だからと言って、身の丈に合わないサービスを使わないことが重要です。顧客が満足すればそれで良いわけですが、お金も大事です。サービスが上手く継続できるような実装を心がけるべきです。
すべてはケース・バイ・ケースですが、サーバ単体のコストもさることながら、システム全体の運用も含めた「コスト」を算出し、金銭以外の損が無いかも含めて計算しなければいけません。
コンピュータサービスは往々にして、コンピュータ利用の金銭的コストに目が行きがちですが、人的コスト、顧客が享受すべき利益まで見据えた上で、すべてをトレードオフした結果を見つめるべきだと渡しは考えます。
みなさんも今一度、サービスを見直し「コスト」について考え直してみてはいかがでしょうか?