最近、YouTube のアルゴリズムでおもしろい動画を見ました。“The cloud is over-engineered and overpriced” というタイトルの動画で、直訳すると「クラウドはオーバーエンジニアリングで高すぎる」という意味です。動画の主な内容は、規模の小さいスタートアップにクラウドの導入を勧めない理由と、Docker ベースの技術でシンプルなオンプレミスのセルフホスティングサーバーを運用する方法の紹介です。
この動画を見て、共感できる部分もあれば、反対したくなる部分もありました。そこで、動画の内容とコメントの反応を紹介しつつ、私の考えも書いてみようと思います。
The cloud is over-engineered and overpriced (no music)
主な内容
平均的な SaaS スタートアップは、年間 1,160,000$ をクラウドに支出しているそうです。現在の為替レートで約 15 億ウォンにもなる金額です。これはサーバー機器を借りて、専門の管理者を 1〜2 人雇うよりもはるかに高い金額です。
しかし、クラウドを使うことで得られるメリットもあります。ほとんどの機能は UI から簡単に操作できるので専門家がいらず、高可用性のためのサーバー拡張も簡単にできます。つまり、私たちは便利さを手に入れます。
ところが、それは間違いです。便利さのためにクラウドを使っているのに、私たちは依然として AWS の認定を受けた専門家を雇わなければなりません。AWS の設定に専門家が必要だなんて驚きませんか? クラウドを使う主な理由は手軽さではなかったでしょうか?
そのおかげで、スタートアップは投資家から受け取ったお金をすべて AWS に使っています。しかし、私たちが AWS で使っているほとんどの機能(ECR、ECS、RDS、ALB など)は、Linux サーバーに Git、Docker、いくつかのオープンソースツールがあれば、とてもよく似た結果を得られます。
ここまでが動画の前置きです。その後、動画は例として古いノートパソコンを自前の Linux サーバーとして運用する方法を案内します。最後に、こうしたサーバー運用の方法に対する批判とその回答で動画は終わります。主な批判とその回答は次のとおりです。
- クラウドの高可用性は必要ないのですか?
1 日で 10 倍、100 倍に拡張しなければならないケースはほとんどありません。ウェブサイトが爆発的に成長するなら、むしろダウンタイムが起きるほうがましです。爆発的な成長よりも、遅くても着実に成長するほうが健全だと考えています。トラフィックが悪意のあるものではなく、コストを健全にまかなえると確信できるときにだけ拡張したいのです。
- クラウドのほうが始めやすいのでは?
簡単なものは複雑なものの抽象化であることが多く、難しいものも実際にはシンプルなことが多いです。ユースケースに合わないエンジンより、理解できるエンジンを好みます。クラウドは始めるのは簡単ですが、スケーラビリティを使い始めると、抜け出せない過剰なコストの罠にはまります。私はいつも、簡単なツールよりシンプルなツールを選びます。シンプルさは難しいですが、長期的にはそのほうがよいのです。
- 世界中で同じ品質を提供する必要がある場合は?
キャッシュできない動的コンテンツを複数の地域に遅延なく届けるには、確かにクラウドが必要です。製品の要件はそれぞれ違い、クラウドが最善のソリューションである場合もあります。しかし、ほとんどのスタートアップには必要ありません。あなたはフォーチュン 500 の企業ではないので、同じやり方をする必要もありません。
私の翻訳力をあまり信用しないでくださいね :)
私の考え
私が勤めたスタートアップも、どこもサービスの立ち上げからクラウドを使っていました。韓国のサービス系スタートアップの多くも、便利さや将来成長したときのことを考えてクラウドを選んでいると思います。もしかすると、現場の担当者が深く考えずに慣れたやり方をそのまま使っただけかもしれません。(私もよくそうします。)
しかし、クラウドは確実にお金がかかります。クラウドは、サービス開始時の料金は安いかわりに、サービスの成長に合わせて料金が急に上がっていく戦略をとっています。最近はフロントエンドでも SSR が主流になり、安いファイルサーバーより少し高いコンテナサービスを使うので、コストはさらに上がりました。
また、クラウドは水平スケールがあまりにも簡単なので、アプリケーションの非効率から生じる可用性の問題を、クラウドの水平スケールで手軽に片付けてしまう、という残念なことも起こります。サービスの正常化が優先なのでこれを責めることはできませんが、あとでやると約束した改善作業は簡単に忘れられてしまいます。こうした問題もコスト増加の原因です。
では、セルフホスティングを必ず使うべきだと考えているかというと、そうでもありません。クラウドの高可用性と安定性は明らかなメリットで、便利さも無視できないからです。そこで私の場合は、本番サービスを除いた社内向けサービスだけを、すべてセルフホスティングのオープンソースアプリで運用するほうを好んでいます。社内向けサービスとは、次のようなものです。
- 開発用のデプロイサーバー
- Git サーバー(Gitea、GitLab など)
- CI/CD サーバー(Jenkins など)
- VPN(WireGuard、OpenVPN など)
- そのほかの社内業務向けサービス(チャット、Wiki、バックオフィスなど)
こうしたものは多少壊れても本番サービスに影響しないので、セルフホスティングで運用するのが適していると思います。そしてクラウドを使うときは、フロントエンド開発者として次のようなルールを適用しています。
- SSR より SSG を好みます。(クライアントは多少計算してもかまいません。)
- SSG で作ったアプリをクラウドでデプロイします。(この場合は安いか無料です。)
- 本当に「動的」なコンテンツが必要なときだけ SSR を使います。
まとめると、私はスタートアップであってもセルフホスティングとクラウドの両方を使うべきだという立場です。クラウドの便利さと安定性を活かしながら、コストを抑える方法があると考えているからです。
仕事ではなく個人としては、セルフホスティングをもっと積極的に使っています。このブログとドキュメントはすべて SSG で作って Cloudflare でデプロイしており、それ以外のサービスはすべて自宅の個人サーバーラック(KVM、Docker)で動いています。
動画のようにセルフホスティングだけで始めるべきだとは思いませんが、少なくとも私たちがクラウドへの支出を必要以上に増やしていないか、一度は考えてみるとよいと思います。
コメントの反応
最後に、動画についたたくさんのコメントからいくつか選んで紹介します。誰もがセルフホスティングに賛成しているわけではありませんが、うまく移行した事例も少なくないことがわかりました。私もいつか、商用プロジェクトをセルフホスティングで試してみる日が来るかもしれません。
今スタートアップにいます:すべてを AWS から Linode に移し、Kubernetes を使ってオープンソースのソリューションでデプロイしました。水平スケールした SaaS アプリの運用コストは合計で週 $50、年間 $2600 です。
AWS、Azure、Google は曲線的に料金を設定しています。最初は安いですが、便利な「スケーラビリティ」を使い始めると、最終的には抜け出せない過剰なコストの罠に閉じ込められます。
私は FreeBSD、Git、GitLab CI/CD を使って 2 つ目のスタートアップを立ち上げました。クラウドの複雑さを避けることは確実に可能です。ここで紹介されたアプローチが気に入りました。すっきりとシンプルに保ちながら、あとで選択肢を残している点がいいですね。
これは本当にすばらしいセルフホスティングのガイドで、クラウドの欠点についてもあなたは正しいです。クラウドサービスを擁護するつもりはありませんが、ここで紹介されているものと、クラウドが必要な商用規模の運用とのあいだには、かなりの差があるということは言っておくべきだと思います。
初期や小規模のデプロイでは、高い信頼性のためにクラウドを使うのは合理的です。信頼できるインターネット回線と電力のコストは、たいていクラウドのコストを上回ります(例:Lambda + RDS インスタンス)。
セルフホスティングについて、皆さんはどう思いますか?

