サーバーレスとは
概要
サーバーレスは、サーバーのプロビジョニング、スケーリング、パッチ適用、障害対応といったインフラ管理をクラウドプロバイダーに完全に委任するアーキテクチャである。開発者はアプリケーションコードの記述に集中し、そのコードがいつ、どのサーバーで、何台で実行されるかを意識する必要がない。「サーバーがない」のではなく「サーバーを管理しない」という意味である。
従量課金とコスト構造
サーバーレスの最大の特徴は、リクエストが発生した分だけ課金される従量課金モデルである。従来のサーバーは 24 時間稼働し続けるため、トラフィックがゼロの深夜帯でもコストが発生する。サーバーレスでは、リクエストがなければコストもゼロになる。
個人開発や小規模サービスにとって、この特性は決定的な利点である。月間数千リクエスト程度のサービスであれば、AWS Lambda の無料枠 (月 100 万リクエスト) 内に収まり、コンピューティングコストが文字通りゼロになる。サービスが成長してトラフィックが増えた場合も、自動的にスケールアウトするため、事前のキャパシティプランニングが不要である。
コールドスタートとその対策
サーバーレスの主要な課題はコールドスタートである。一定時間リクエストがないと実行環境が破棄され、次のリクエスト時に環境の再構築が必要になる。この初期化処理に数百ミリ秒から数秒かかる場合がある。
コールドスタートの影響を軽減する方法はいくつかある。ランタイムの選択 (Python や Node.js は Java より起動が速い)、デプロイパッケージのサイズ削減、Provisioned Concurrency (事前に実行環境を確保する機能) の利用などである。質問箱サービスのように、ユーザーの操作に対してリアルタイムに応答する必要があるサービスでは、コールドスタートの体感を最小化する設計が重要になる。
質問箱サービスのサーバーレス構成
質問箱サービスは、フロントエンドからバックエンドまで完全にサーバーレスで構成されている。フロントエンドは Next.js を OpenNext で Lambda 上にデプロイし、API は Lambda Function URL で提供する。データベースは DynamoDB、認証トークンの送信は SES、コンテンツフィルタリングは Bedrock を使用する。
この構成により、サーバーの管理コストはゼロ、インフラコストはトラフィックに完全に比例する。個人開発者が運営するサービスとして、固定費を極限まで抑えつつ、数万ユーザーまでスケールできる基盤を実現している。EC2 インスタンスを 1 台でも常時稼働させれば月数千円のコストが発生するが、サーバーレス構成ではトラフィックが少ない間はほぼ無料で運用できる。
サーバーレスの設計パターンを学びたい方は、サーバーレスアーキテクチャの関連書籍も参考になります。