2018年08月03日 09時00分 メモ

Firebaseの設定を間違えて72時間で300万円以上請求されてしまったウェブサービス



FirebaseはGoogleが運営しているサービスの1つで、サーバーのような機能を簡単に使用できるようにしてくれるためウェブサービスやスマートフォンアプリなどの開発によく使用されています。企業家のニコラさんもFirebaseを使用してウェブサービスを作成したのですが、設定を間違えてしまったために72時間で300万円以上もの使用料を請求されてしまったいきさつをブログで公開しています。



How we spent 30k USD in Firebase in less than 72 hours

https://hackernoon.com/how-we-spent-30k-usd-in-firebase-in-less-than-72-hours-307490bd24d



ニコラさんはコロンビアでVakiというクラウドファンディングサイトを運営しているのですが、そのサイトで「#UnaVacaPorDeLaCalle」という政治系のクラウドファンディングが非常に人気になったとのこと。このクラウドファンディングがスタートしてから48時間でセッション数は200万を超え、2000万回もページが読み込まれたそうです。以下の画像はVakiのページをGoogleアナリティクスで解析した様子なのですが、「En este momento(現在サイトを訪問中の人)」が2000人近くいることが確認できます。





これだけ多くのアクセスがありつつもサイトはダウンせずに稼働を続けていましたが、一部のユーザーがページを読み込むのに30秒以上かかっていることが判明し、ニコラさんのチームは原因調査に乗り出します。2日近くかけてサイトを構成しているフレームワークのAngularを更新するなどの試みを行ったものの成果は得られなかったのですが、その後Firebaseのダッシュボードを見て請求金額に驚いたとのこと。Firebaseの使用料金を表示するページでは72時間で3万ドル(約330万円)の料金が発生していることが示され、以下の画像のようにグラフが山のように大きく跳ね上がっていたそうです。





調査の結果、クラウドファンディングでサポートされた合計金額を表示するためのコードの設計が誤っていることが判明。通常であれば、「合計金額」として保存されているドキュメントを1回読み込めば良かったのですが、今回「全ての支払いデータを読み込んでクライアント上で合計する」という実装になってしまっていたとのこと。例えば下の画像では1666人が合計24万4875ドルサポートしているのですが、244876という数字を1回アクセスして読み出すのではなく、それぞれのサポート金額を1666回アクセスして読み出し、足し合わせて合計金額を表示してしまっていました。





これは一覧のページでも同じ構造になっており、全ての支払いデータを読み込みにいってしまうために膨大なアクセスが発生してしまったというわけです。ページ自体のロードは2000万回ほどでしたが、Firebaseへのアクセスは46億回を超えていたとのこと。





FirebaseはGoogleのサーバーを使用して提供されているため、スケールが効くというメリットはあるのですが、うっかり設定を間違えていてもスケールしてしまうために使用料金に歯止めがきかないというデメリットもあると実感させられます。



ニコラさんはGoogleと連絡をとり、スタートアップ向けの助成金を得ることで事なきを得たそうですが、「リリース前にサーバーへの全てのアクセスをデバッグすることが非常に重要だ」とコメントしています。