「150日の亡霊」が教えてくれた教訓
長期間にわたったWasabiの高額請求問題、「150日の亡霊」との戦いは、多大な時間、労力、そして金銭的なコストを伴う、非常に苦しい経験でした。
なにせ、相手にしたのは「既に消えたデータ」の課金を続けなければならないという、言葉通りの意味で「亡霊」との戦いだったからです。
ここに、今回の経験から得られた主な教訓をまとめます。この教訓が、クラウドサービスを使う方の一助になれば幸いです。別の言葉で言えば「私の屍を越えていってほしい」形です。
教訓1:「動く」≠「最適」:組み合わせの重要性
システムが技術的に「動く」ことと、それがコストやパフォーマンスの面で「最適」であるかは全く別の問題です。今回のケースでは、
- VPS(Web Arena)
- s3fs + Wasabi
- Growi(MongoDB)
- Nextcloud
という組み合わせ自体は技術的に可能でしたが、それぞれの特性、特にストレージエンジン(WiredTiger)とオブジェクトストレージ(Wasabi)の相性が最悪でした。
アプリケーションとインフラ(特にストレージ)の組み合わせを検討する際は、「動くかどうか」だけでなく、「その組み合わせが、それぞれの特性上、最適かどうか」を深く検証する必要があります。
教訓2:サービスの特性を理解する
- オブジェクトストレージは「ネットにあるSSD」ではありません:
- Wasabiのようなオブジェクトストレージは、安価で大容量ですが、ローカルSSDやブロックストレージとは根本的に仕組みが異なります。「イミュータブル(不変性)」であり、「更新=削除+新規作成」となる点を理解していませんでした。
- データベースエンジンの挙動の無理解:
- MongoDBのデフォルトエンジン「WiredTiger」が、高速化のために内部で頻繁なファイル書き換え(インプレース更新、MVCC、ジャーナリング、チェックポイント)を行うことを把握していませんでした。特にGrowiのリアルタイム編集や自動保存が、これを加速させました。
- アプリケーションの隠れた動作の無理解:
- Nextcloudのサムネイル動的生成・削除や、ファイル同期時のパートファイル処理なども、「削除」操作を多発させる要因でした。
利用するサービス(特にストレージ)やミドルウェア(特にデータベース)の基本的な仕組み、特性、制限事項を、ドキュメント等で事前に十分に理解することが不可欠です。
教訓3:料金体系の罠:見えないコストに注意
- 課金ルールの見落とし:
- Wasabiの魅力的なGB単価に目を奪われ、「最低90日間保持ポリシー」という重要な課金ルールを見落としていました。これにより、削除したはずのデータ(=亡霊)に長期間悩まされることになりました。
- もちろん、適切に利用できれば、以下の多大なアドバンテージはあります。
- AWS S3と比べて破格の安さで静的ファイルを保存してWebコンテンツに載せることができる。
- 現に、Redmine/BookStack/Piwigoにアップロードした画像ファイルは安価に運用できています。
- DBやディスクイメージ等のバックアップ。( ただし、差分・増分などは更新として扱われる可能性 )
- 従量課金の怖さ:
- 定額制VPSに慣れていたため、従量課金、特に意図しない形で利用量が増大するリスクに対する認識が甘かったです。
クラウドサービスの料金体系は、GB単価だけでなく、データ転送、APIリクエスト、最低利用料金、そして削除ポリシーや最低保持期間などを、隅々まで確認し、理解する必要があります。
教訓4: 監視とログの重要性:「いつもと違う」を見逃さない
- 請求書の確認:
- 2024年11月の請求額増加(12ドル)を「単価の増加」「一時的なNW増」と軽視せず、詳細を確認していれば、早期に問題を発見できた可能性があります。
- ログは命綱:
- s3fsのバケットログを有効化したことで、Nextcloudが原因の一つであることを特定できました。
- 日々の記録:
- ログが命綱だとすれば、日々の記録は「目的地への航海日誌」です。今回の一件をRedmineのチケットとして起票し、日々の記録を続けていたことが、問題解決の力となりました。
請求書の明細は当然として、ダッシュボードは定期的に(できれば毎日)確認し、わずかな変化や見慣れない項目にも注意を払うべきです。トラブルシューティングにおいて、ログと作業記録は非常に重要な情報源となります。
教訓5:過去の成功体験を過信しない
- RedmineやBookStack、そしてPiwigoでWasabiを問題なく使えていた経験が、「GrowiやNextcloudでも大丈夫だろう」という慢心につながりました。
- アプリケーションが変われば、前提条件も変わります。「今まで大丈夫だったから次も大丈夫」という考えは捨て、常に新しい構成のリスクを評価する必要があります。
教訓6: 現状認識と推測
2024年11月に気づいていればもっと被害は減ったでしょうが、「2024年12月の大きな請求額の変動」で、状況を整理して「主要な原因がGrowiのDBをWasabiクラウドストレージに保存したから」と推測できたのは現状認識の賜です。
- 起きてしまったが、何が原因だったのか
- それを防ぐには?
- いつまでかかるのか?
を推測しながら現状を認識でき、問題となるサービスの停止という決断に至ったことは大きな力となりました。
まとめにかえて:本件最大の救い(個人利用vsビジネス)
今回、筆者が支払う羽目になった金額は544.93$。2025/04/16時点のドル円相場で77,624.73円ほど。
この金額、
- ちょっと贅沢な国内旅行
- エントリーモデルのパソコン
などが十分賄える金額です。ですが、幸いにも、自分だけが使うサービスだったため、この授業料で済んだというのは実感としてあります。
もちろん、Wasabiクラウドストレージが安価だったため、「重課金」とはいえ、この金額で済んだということも忘れずに付記しておきます。
自分一人のサービスで約545$ということは、10人規模、100人規模だったらもっともっと恐ろしい金額になるでしょう。その場合の
- 賠償額
- サービス停止による信用失墜
- 回復への時間的な損失
は今回の比ではありません。
願わくば、今回の150日の亡霊への対処を「笑えない笑い話」として受け取っていただければと思います。
最後に:この問題を取り組むにあたり、非常に勇気づけられた次の文章(個人用Redmineにも載せています)を添えて本文書の締めくくりとしたいです。
- 記録から生まれる勇気がある
- 記録から下せる決断がある
- 記録から生まれる未来がある
――akiko-pusu様
コメントを残す