Amazon EC2とGoogle App Engineのコスト比較

どうも、うしねずみです。

最近趣味で作ろうとしているWebサービスを、クラウド上に実装しようとしていて、AmazonのEC2を使うかGoogle App Engineを使うかを選ぶ必要がありました。そこで気になるのはやっぱり、実際どっちがどれぐらい得なんだろうねと。というわけで、自分が想定しているサービスで月毎にかかる料金を試算してみました。それが以下のグラフです。

Amazon EC2 v.s. Google App Engine
Amazon EC2 v.s. Google App Engine

横軸は自分の想定しているサービスの登録ユーザ数。縦軸はその時のコスト(米ドル)です。グラフをみると最初はGoogleが低いものの、途中から逆転しています。両方が交差している点は2400万ユーザの1万7000米ドルくらいです。(試算の細かい前提は後で書きます)

しかし、自分で出しといて言うのもなんですが、このグラフは眉唾ものです。何故かというと、この試算にはGAEの利用CPU時間に対する課金が一切含まれていません(実際どれぐらい消費するのか予想しづらい。「そこをベンチマークするのがお前の仕事だろ」って言われそうですが)。実際にはGAEではリクエストを受けた時やBigtable(GAEのデータベース)にアクセスした際に利用されたCPU時間に対して課金されるわけで、CPU時間に対して課金されないAmazon EC2と並べて比べるのは非常に不公平です。

しかしGoogleにばかり有利な試算ではありません。実際ユーザ数が増えてくると、Amazon EC2では1つのインスタンスではリクエストをさばけなくなってくるはずです。そうなったときサイトのパフォーマンスを維持するためにインスタンス数を増やせば、当然インスタンス利用時間にかかる課金がもっと増えてきます(GAEは「マシンと数」みたいな概念は無く、自動でスケールするので気にする必要が無い)。さらにインスタンスを2つ以上にした場合はロードバランサーをオプションとして付けなければならなくなるため、ロードバランサーの処理したトラフィックに対する課金も含まれてきて、EC2のコストはこの試算よりも膨れ上がるはずです。

結局今回の試算で効いているのは、EC2はデータ転送量が増えるほどデータ転送量に対する課金の単価が下がるのに対し、GAEではどれだけデータ転送量が増えても課金の単価が一定であるという点だけです。といっても全く意味がない試算をしたわけでは無くて、2400万ユーザという驚異的なユーザ数を獲得するまではGoogleの方が安いということはわかりました。そして、2400万ユーザも居たら、その時のコストである1万7000米ドル/月なんて余裕で回収できるんじゃないかっていうことも。
ま、CPU時間に対する課金とか、かなり効いてきそうなので、やっぱり意味の無い試算だったような気もします。

ちなみにこの試算ではEC2とGAEが逆転するのは2400万ユーザなんてかなり多い数になってますが、これは私が想定しているサービスの1リクエストあたりのデータ転送量が約4kBと少ないためで、画像なんかをたくさん置いている場合はもっともっと少ないユーザ数で逆転すると思います。

※今回の試算の前提
1ユーザ、1日あたりのリクエスト数 : 50
1リクエストあたりのデータ転送量(out) : 3.95kB
1リクエストあたりのデータ転送量(in) : サービスの特性上無視できる量なので無視
1アカウントあたりの情報量(ストレージの消費) : 0.2kB (←いや、今考えると少ないな)
サービスが履歴保存に使う最大容量(ストレージの消費) : 約5GB (←これを超えると古い情報から破棄していく)
その他 : EC2ではsmallインスタンスを24時間稼働しっぱなし。