「HerokuでWebアプリ開発を始めるなら知っておきたいこと」シリーズの第9回では、Herokuはとても便利だけど依存しすぎてしまうとちょっと危険だよ、という実体験について書きます。このシリーズのまとめページはこちら。Services(AWS)に大規模障害が起きました。Twitter上でも結構ツイートされ、IT系のメディアでも大きく取り上げられたので、ご存じの方も多いと思います。10日分のサービスクレジットを提供Herokuのプラットフォームは、AWSのEC2およびEBSを利用したサービスだったため、この大規模障害の影響をモロに食らってしまいました。以下はHerokuが公開した障害についてのレポートの@junyaさんによる日本語訳です。AWSの障害に起因したHerokuの障害について、Heorkuによるレポートが公開されたので要点を翻訳しました(全訳ではありません)。小規模アプリケーションでは最大60時間のダウンタイム大失敗を起こしてしまったと報告しています。私が個人で作っているWebアプリの最新作はてなスターカウンターは、奇しくも大規模障害の起こった4月21日にリリースしました。はてなスターの総数を表示できる「はてなスターカウンター」を作ってみた4月21日の午前中に公開して、昼過ぎあたりに@func09さんや@deeekiさんにリツイートしてもらえてそこからRTが徐々に広がっていき、夕方にははてな社長の@jkondoさんの目にも止まってさらにRTが広がり、順調にはてブ数も増えていき、その日の23時頃にはホッテントリの一番下に載りました。この時点(公開後10時間経過)でのはてブ数は約80、カウンター利用数は約70サイトでした。この流れは、Nekostagramが一気に広がった時よりは劣るものの、そのときと良く似た拡散の仕方で、これはイケるかもとちょっと浮かれてました。その時、事件が起こったのです!言うまでもありませんが、前述のAWS障害発生によりHerokuが落ちました。これからさらに多くの人に見てもらえて、使ってもらえるかもしれないと期待したまさにその時、はてなスターカウンターのサイトにまったく繋がらなくなったのでした。公開後2週間以上が経過した現在は、はてブ数が約110、カウンター利用数は約80サイトに留まっています。大事なタイミングでサイトが落ちてしまい、完全復旧したのは約3日後だったこともあり、その後まったく広がりを見せず、はてブ数や利用者数も伸びず、とても残念な感じになってしまいました。その原因がなんであれ、このタイミングで訪問してくれた人・利用してくれた人には「不安定なWebサービス」としか映らなかったはずです。そんな状態に陥ったにも関わらず、現在もはてなスターカウンターを利用してくれているブロガーさんがいることには本当にありがたく思っています。何が起きたか、どう感じたか、今後どうすべきか4年に1度クラスの大規模障害が起きたプラットフォームで、その障害の当日にWebアプリをリリースしたという経験は結構貴重だと思うので、この時に何が起きて、どう感じたか、そして今後どうすれば良いと思ったか、について備忘録を兼ねて書きます。引用している自分のツイートの中には若干愚痴っぽくなっていて見苦しいところもありますが、その時のリアルな感情・感想ということでご容赦ください。何が起きたかとどう感じたかを時系列でざっくりとまとめます。障害当日の11時頃に「はてなスターカウンター」をリリースしました。ここからホッテントリに一瞬入るまでの拡散の仕方は前述の通りです。17時頃Herokuの障害発生について知ったのはTwitterで、AWSに障害が起きたっぽいこと、Herokuアプリ(サイト)に接続しづらくなっていること、などHerokuユーザーのツイートが自分のタイムラインに流れてきました。この時点で、自分が公開・運用していた4つのHerokuアプリはどれも正常動作しているように見え、少なくとも各HerokuアプリのWebサイトへはすべて接続できました。障害は一部の環境だけに起きているものではないかとこの時は思っていました。自分が公開しているHerokuアプリ、特に公開初日の「はてなスターカウンター」のサイトを結構な頻度でチェックしていましたが、この時間帯になって接続しづらくなりました。アクセスできたとしてもHTMLはなんとか読み込めるけど、画像が最後まで読み込まれないような状態が続きました。このときはまだ、herokuコマンドによるアクセスは可能で、DBファイルのダウンロードなどは可能でした。19時頃はてなスターカウンター以外の自分のHerokuアプリ(サイト)にも接続しづらいことを確認し、さらにherokuコマンドによるデプロイやDBへの接続に失敗するようになったことで、それがAWSの障害によるアクセス不能であることをちゃんと理解しました。ここに至るまではすぐ直るだろうと想像していました。自分のHerokuアプリへの接続がしづらくなってから3時間ほど経過しました。接続しづらいというより、ほとんど出来ないに近かったです。この時点で既に「障害時間が長い」と感じていました。前述のとおり、ホッテントリ入りしたこの時間帯には、はてなスターカウンターのサイトへの接続は不可能になっていました。1時頃Twitterのエゴサーチで、はてなスターカウンターサイトの接続不能への不満の声を目撃したのはこのあたりでした。ちなみに「思い」は「重い」の誤字です。改善しそうにもなかったので、改めてTwitter上で謝罪しました。自分の[ブログ記事](/2011/04/21/hatenastar-counter)にもその旨の謝罪文を掲載しました。はてなスターカウンターを利用していただいている方へ。使用しているサーバー(Heroku)自体の障害で、はてなスターカウンターが表示しづらい・できない状態が続いています。ご迷惑をおかけしてすみません。翌日早朝、まだ直ってないことにガッカリして、別のPaaSへの乗り換え検討の愚痴をこぼしたり。11時頃さらに愚痴っぽいツイート。HerokuをHeorkuと打ち間違えている辺りにも余裕の無さが伺えます。14時頃ここでようやくサイトへの接続の方は復旧への兆しを見せはじめました。herokuコマンドによるデプロイやDBへの接続はまだ不可能でした。はてなスターカウンター、Heroku復旧後は今のところ安定動作してるみたいです。23時頃その日の夜になっても、herokuコマンドによるデプロイやDBへの接続はまだ不可能でした。Botが障害の影響で動いてなかったことにこの時気づきました。日付が24日に変わっても、herokuコマンドによるデプロイやDBへの接続はまだ不安定でした。今回遭遇した障害によって経験したことを顧みて「今後どうすべきか」を1つだけ挙げるとしたら、可能性のあるWebアプリなら独自ドメインで運用しておくことだと現時点では思います。この「可能性」は複数の意味を含みます。個人で作った小物Webアプリで、収入の目処も無いのであれば、独自ドメインでの運用はなかなか難しく、実際自分は今までの4つはすべてHerokuのサブドメインのままで公開しています。独自ドメインで運用していれば、今回の大規模障害により止まってしまった自分のWebアプリを、もっと早く復旧させる方法・選択肢は生まれていました。独自ドメインで運用していなかったので、手も足も出ない状態になったのです。独自ドメインであれば、他のPaaSやVPSに環境をそっくりコピーすることが出来て、DNSの向きをサッと変えることが出来れば、自分のWebアプリを復旧させることが出来たかもしれませんでした。独自ドメインで無かったばっかりに、その第1歩でこれらの可能性がすべて潰れました。今回の障害に限らず、アクセスが殺到する可能性があったり、長期的に運用する可能性があるWebアプリの場合は、独自ドメインで運用しておいたほうが、後々何かの対応をするときに、かなり楽になるのではないかと思いました。自分のWebアプリで言えば、今回のはてなスターカウンターがそれに該当しますが、これは利用してもらうブロガーさんに、はてなスターカウンターへのバナー(URL)を自分のブログに埋め込んでもらう仕組みです。この場合、既にHerokuのサブドメインで運用してしまっていて、利用してもらっているブログにはそのHerouのサブドメインが埋め込まれているので、もうプラットフォームを変えることが出来ません。これがもし独自ドメインで運用してあれば、プラットフォームを変えることもできるという選択肢が生まれます。考えてみれば当たり前のことですが、今回の障害が発生して色々と振り返ってみてから、自分はこの点について気づきました。Heroku以外の選択肢ここでやっと、タイトルにも含まれている「Heroku以外の選択肢」という話に入ります。上述の独自ドメインにする主な理由が、プラットフォームを容易に変更できるようにするためです。これは、それほどネガティブな意味ではありません。今回のAWSの大規模障害は利用者にとっては残念な出来事でしたが、これによってクラウドが万能で無いことを気づかせてくれましたし、そのための備えをする意味合いで、他のPaaSにも目を向けるキッカケを与えてくれました。PaaSに限らず何でもそうですが、1つの環境に依存しすぎてしまうことは、結構リスキーなことなんですよね。普段使っているネットサービスがGoogleに依存しすぎてしまっていたり、使えるOSがWindows/Macのどちらか一方だけだったり、Adobe製品を使わないと何も作り出せなくなっていたりと、思い当たるフシがいくつもあります。AWSの障害が引き金になったかどうかはわかりませんが、最近やたら他のPaaSの話題を聞くようになりました。Foundryをはじめ、他にもたとえばDuostackやDotCloudなどです。それ以外にもNode.js用やPHP用のPaaSなども見かけましたが、今挙げた3つはすべてRubyで利用可能です。中でも、Duostackの操作体系はかなりHerokuに似ていて、Herokuユーザーが利用するのはおそらく簡単だろうと@jishihaさんに教えてもらいました。自分はまだHerokuにドップリ依存していて、他のPaaSもVPSも触ったことがありません。前に上述のPaaSへの登録を済ませて、これから触ってみようという段階です。これらを障害対策として考える場合は、そのPaaSが利用しているサービスがAWSかどうかなども考慮する必要がありますが、とりあえずは色々触ってみて使いやすさで考えてみたいですね。今後試したらこのブログにその過程を備忘録していくつもりです。まとめ今回のシリーズを通して力説してきたとおり、Herokuはとても便利で魅力的ですが、それしか使えないのは、障害や何かしらの問題が起きたときに対応できる選択肢が無いに等しいことになります。これはHerokuが良い悪いの話ではなく、使う側の問題です。これからHerokuでWebアプリ開発を始めよう、という段階であればまだ意識する必要はありませんが、今回の大規模障害があったことからもわかるように、他の選択肢を考慮することはいずれ考えなければならないことです。Herokuを使うことでPaaSというものをある程度理解できたら、他のPaaSやPaaS以外の環境も触ってみて、できれば障害時の対策まで出来るようになるといいなぁという自戒を込めたエントリーでした。今回は、Herokuはとても便利だけど依存しすぎてしまうとちょっと危険だよ、という実体験と、その対策として他のPaaSも視野に入れたいことについて書きました。次回は最終回、自分がこれまでのHerokuアプリを作成した上で参考になったサイトやページのリンク集を載せたいと思います。homeルエダップコム。