メモ

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

この記事のタイトルとURLをコピーする

・関連記事
無料で使えるアプリ版Google Analyticsとでも言うべき「Firebase Analytics」などを繰り出すGoogle傘下Firebaseのすごいバックエンド機能まとめ - GIGAZINE

合計1億件以上の個人情報がFirebaseの脆弱性によって公開状態に - GIGAZINE

Amazonが無料でゲーム実況機能付きのCryEngineベースゲームエンジン「Amazon Lumberyard」発表 - GIGAZINE

大規模な分散システムを構築する際に押さえておくべき概念 - GIGAZINE

無料でさまざまなウェブサービスを連携させ定期的に実行できる「Automate.io」を使ってみた - GIGAZINE

片手間状態で始めたWebサービスが年商500万円のビジネスに達するまでの成長録 - GIGAZINE

in メモ,   ネットサービス,   ウェブアプリ, Posted by log1d_ts

You can read the machine translated English article here.