ウェブアプリをレンタルサーバからクラウド(AWS)に移行しようとしたけどやめた話

はじめに

今までサイトやブログ、ウェブアプリなどをレンタルサーバー、主にXSERVERやさくらインターネットにて運用してきました。しかし重い処理があるウェブアプリを制作中にレンタルサーバーでは限界があると感じ、勉強も兼ねてクラウドデビューすることに。結果、思ってたのと違う+コスト面でやっぱりやめた話です。

レンタルサーバーの限界

自分がよく使うXSERVERやさくらインターネットはいわゆる共用サーバーと呼ばれるもので、複数のユーザーで一緒に使用するサーバーのため、特別重い処理を長くしているとタスクを強制終了させられたりします。規約にもそういった使い方はしないようにと書いてあったりします。

処理能力

個人のサイトやブログ、重い処理のないウェブアプリならば、余程のことがない限りレンタルサーバーで運営可能ですが、なんらかの理由で一時的にアクセスが集中した時や、重い処理を含むウェブアプリなどの場合、処理が追いつかない場合があります。

例えば、さくらインターネット(スタンダード)の場合、同時アクセス数が100を超えるとアクセス制限がかかる場合があるようです。XSERVER(スタンダード旧X10)の場合で1000が目安とのこと。重い処理でいうと大量の画像をリサイズしたりした場合、途中で処理が止まってしまいます。自分の場合、500枚ぐらいの画像を続けてリサイズ処理させたら300枚辺りで止まってしまいました。画像のサイズやリサイズの内容にもよりますが、作ろうとしていたウェブアプリには適していないのかな?と感じはじめました。

料金面

さくらインターネット(スタンダード)で月524円、XSERVER(スタンダード旧X10)で1,100円(契約期間で異なる)

どちらも料金的にはお手頃で、1つ契約すれば同じサーバにいくつもサービスを入れられるのでとてもお得感があります。定額というのも安心感がありますね。料金面では特に不満はありませんでした。

ストレージ容量

今回は写真を大量に扱うウェブアプリなため、ストレージ容量が拡張できないのもネックでした。将来的にストレージがいっぱいになった時どうにもできないかなと。

クラウド(AWS)に移行

上記の理由で開発中のウェブアプリをクラウドサーバーへ移行することにしましたが、想定していた事と実際と相違がありました。

想定していた事

サーバの処理能力自体は不明でしたが、スケーリングという機能を使えば必要に応じてサーバを拡張できると考えていました。つまり通常はコストをおさえておいて、重い処理をする時だけ自動的に拡張されてうまい具合に対応できるみたいな。

コスト的にはインスタンス1つの料金と拡張した時のみのごく僅かな課金だけでいけると思っていました。

実際

実際はオートスケーリングを利用するにはELBを構築する必要があり、ELBを構築するにはインスタンスを最低でも2つ立ち上げていなければいけない。その場合、データベースの内容を一致させるためには、インスタンス内にDBを構築する方法では厳しいのでRDSを使う事になる。さらにDBにも冗長性をもたせるとか、2つのDBをシンクロさせる仕組みを作るとかなると、VPCやサブネットなど全体の設計も必要になってきます。

学習コストも去ることながら、インスタンス2つ(最低でも)の料金、ELBの料金、RDSの料金、VPCやサブネットの料金、他にもEBSの料金やAMIの保存料などなど。。。思っていたよりもだいぶコストがかかります。

さらにオートスケーリング機能は、画像処理のような急な重い処理には対応してくれるわけではなく、CPUなどの負荷を監視して一定の基準を超えた場合にインスタンスを増やすというような事をしてくれるだけ、しかも対応までにはだいぶタイムラグがあるので、急な重い処理の対策としては使えない事がわかりました。

ストレージに関しては、S3サービスに写真を保存することでどんなに写真が増えても心配なくなりました。

結局

結果、クラウドでの運用は諦めて、レンタルサーバー(XSERVER)で運用していく事にしました。

しかし重い処理の課題はまだ残ったままでした。重い処理は連続してさせず、間にsleepを入れてみたり、複数のユーザーが同時にリクエストした場合などは、並列で処理させないようにジョブとして登録して1つずつ処理させるなど工夫をしましたが、処理には時間がかかるためユーザビリティとしてはよくありません。

Lambdaの活用

AWS学習中にLambdaというサービスを目にしました。はじめはサーバレス?自分には無縁なサービスかなと思ってましたが、サービス内容を見てみると今回の重い処理の対策にもってこいのサービスでした。ウェブアプリ自体はレンタルサーバー(XSERVER)に置いておいて、重い処理が来た時にLambdaに投げる事ができるのです。Lambda側では処理の内容に基づいて自動的にスケーリングして処理するため、速いし確実です。しかもある基準内ならば無料で利用できるというのも良いですね。

最終的に

アプリはレンタルサーバー、重い処理はLambda、写真の保存はS3という適材適所な感じにまとまりました。重い処理は解決できたので、アプリの置き場所はどこでも良かったんですが、同じ処理能力のサーバを用意する場合コスト的にXSERVERの方が安かったので。アプリが人気が出てレンタルサーバーでは捌ききれなくなったら本格的にクラウドへ移行が必要ですね。まあそんな日は来ませんが。

まとめ

今回レンタルサーバーとクラウドを行ったり来たりしてわかった事。

  • レンタルサーバーぐらいの料金でクラウド運用する場合、とても弱いサーバになる。
  • レンタルサーバーはストレージも含めてとてもコストパフォマンスが良い。
  • クラウドはお金がかかる(笑)
  • Lambda最強!