mybook

プロローグ — サーバーを捨てる日

午前3時17分。ダイチのスマートフォンが震えた。

[CRITICAL] Production server CPU 98% - Immediate action required

彼はベッドから飛び起き、ノートパソコンを開いた。画面の光が暗い部屋を照らす。Slackには既に10件以上のメッセージが積み上がっていた。ECサイトが落ちている。毎月恒例のセール日、午前3時という最悪のタイミングで。

ダイチは入社5年目のインフラエンジニアだ。担当しているのは中規模ECサイトのバックエンド。Rails製のモノリシックアプリケーションが、3台のEC2インスタンスの上で動いている。

疲弊するサーバー管理の日々

ダイチの日常は、こんな警告との戦いだった。

# よくある深夜の作業
ssh -i ~/.ssh/production.pem ec2-user@10.0.1.45
top
# CPU使用率98%... またか
sudo systemctl restart puma
# 一時的に回復するが根本解決ではない

セール期間中はオートスケーリングが追いつかない。トラフィックのスパイクは予測できず、スケールアウトに5〜10分かかる間に、ユーザーはエラーページを見せられる。

WARNING

ダイチのチームが抱えていた課題は、多くの企業で共通している。トラフィックの予測が難しいビジネスほど、固定のサーバーリソースは「常に不足か、常に過剰」という二択になる。

彼のチームが管理するインフラの全貌はこうだった。

Loading diagram...

月々のEC2費用だけで約15万円。さらにRDS、ElastiCache、ALBを合わせると月30万円を超える。そして何より、ダイチと同僚たちの深夜対応という「見えないコスト」が積み上がっていた。

サーバーレスとの出会い

障害対応を終えたのは朝5時過ぎ。ダイチは疲れ果てて椅子に深く沈み込み、技術ブログをぼんやりと眺めていた。そこに一つの記事が目に入った。

「AWS Lambda で実現するゼロサーバー運用 — サーバーのことを考えない開発へ」

サーバーのことを考えない、か。

ダイチはコーヒーを一口飲んだ。サーバーを管理しなくていいなら、何が変わるのだろう。パッチ適用、OS更新、キャパシティプランニング、深夜の障害対応——これらから解放されたら、開発にどれだけ集中できるか。

記事の中には、こんな言葉があった。

「Lambda を使えば、コードをアップロードするだけで実行できる。サーバーのプロビジョニングも、スケーリングも、高可用性の確保も、すべて AWS が面倒を見てくれる」

ダイチは読み進めた。Lambda は1秒未満の実行でも課金されない。リクエスト数に応じて自動でスケールする。使った分だけ払う——それだけだ。

INFO

AWS Lambda の料金体系: リクエスト数(100万リクエストあたり$0.20)と実行時間(GB-秒あたり$0.0000166667)の組み合わせ。無料枠として月100万リクエスト・40万GB-秒が提供される。

決意

翌週の月曜朝、ダイチはチームミーティングで提案した。

「画像リサイズ処理を Lambda に移行してみたいんですが」

ECサイトでは商品画像のアップロード時に、サムネイル生成処理が走っていた。これが CPU を食い、セール中の処理遅延の一因になっていた。Lambda に移行すれば、メインのアプリサーバーへの負荷を切り離せる。

チームリーダーの田中さんが頷いた。「小さく試してみよう。うまくいったら他の処理にも広げればいい」

これがダイチのサーバーレスへの旅の始まりだった。

この本で学ぶこと

この本は、ダイチがサーバーレスアーキテクチャを学んでいく物語に沿って構成されている。

Loading diagram...

各章では、ダイチが直面する実際の問題を解決しながら、サーバーレスの概念とAWSのサービスを学んでいく。コードは Ruby で書き、インフラは AWS で構築する。Railsエンジニアがサーバーレスを学ぶための、最も現実に即した入門書を目指している。

サーバーレスが「答え」ではない

一つ、最初に断っておきたいことがある。

サーバーレスはすべての問題を解決する銀の弾丸ではない。長時間実行処理、レガシーシステムとの統合、コールドスタートのレイテンシが許容できないユースケースでは、従来のサーバーアーキテクチャが依然として適切な選択肢だ。

この本の最後で、ダイチはその判断を学ぶことになる。「どこにサーバーレスを使い、どこには使わないか」——それが本当の意味でのアーキテクト思考だ。

さあ、ダイチと一緒にサーバーレスの世界に踏み込んでいこう。