サーバーレス
サーバーの管理をクラウドプロバイダーに委ね、コードの実行に対してのみ課金されるコンピューティングモデル
クラウドインフラ
サーバーレスとは
サーバーレス (Serverless) は、サーバーのプロビジョニング、スケーリング、パッチ適用、可用性管理をクラウドプロバイダーに完全に委ね、開発者はビジネスロジックの実装に集中できるコンピューティングモデルである。「サーバーがない」のではなく「サーバーを意識しない」という意味だ。
AWS Lambda が代表的なサーバーレスコンピューティングサービスであり、2014 年のリリース以降、サーバーレスアーキテクチャの普及を牽引してきた。
サーバーレスの特性
- 自動スケーリング: リクエスト数に応じて自動的にスケールアップ/ダウンする。設定不要
- 従量課金: 実行時間とリクエスト数に対してのみ課金される。アイドル時のコストはゼロ
- 運用負荷の軽減: OS のパッチ適用、サーバーの監視、キャパシティプランニングが不要
- イベント駆動: HTTP リクエスト、キューメッセージ、スケジュール、ファイルアップロードなど、様々なイベントをトリガーに実行される
サーバーレスの構成要素
サーバーレスは Lambda だけではない。以下のサービスを組み合わせてアーキテクチャを構成する。
- コンピュート: Lambda, Fargate
- API: API Gateway (REST / HTTP API)
- データベース: DynamoDB (オンデマンド), Aurora Serverless
- ストレージ: S3
- メッセージング: SQS, SNS, EventBridge
- オーケストレーション: Step Functions
- 認証: Cognito
EC2 との比較
| 観点 | サーバーレス (Lambda) | EC2 |
|---|---|---|
| 課金 | 実行時間 × メモリ | 起動時間 (アイドル含む) |
| スケーリング | 自動 (ミリ秒単位) | Auto Scaling (分単位) |
| 最大実行時間 | 15 分 | 無制限 |
| コールドスタート | あり (数百ミリ秒〜数秒) | なし (常時起動) |
| 運用負荷 | 低い | 高い (OS 管理が必要) |
実務での適用判断
サーバーレスが適するケース:
- リクエスト数の変動が大きいワークロード (夜間はほぼゼロ、日中にスパイク)
- イベント駆動の処理 (ファイルアップロード時の変換、キューメッセージの処理)
- 小規模チームで運用負荷を最小化したい場合
サーバーレスが不向きなケース:
- 15 分を超える長時間処理
- 常時高負荷で、アイドル時間がほとんどないワークロード (EC2 の方がコスト効率が良い)
- コールドスタートが許容できない低レイテンシ要件
コールドスタート対策
Lambda のコールドスタート (初回起動時の遅延) は、Provisioned Concurrency で軽減できる。ただし、Provisioned Concurrency は常時課金されるため、サーバーレスの「アイドル時コストゼロ」のメリットが薄れる。SnapStart (Java) や Lambda Web Adapter など、コールドスタートを軽減する技術も進化している。
「AWS Lambda 実践ガイド」やサーバーレスアーキテクチャの技術書で、設計パターンと実装が解説されている。
SAM でのサーバーレス API
MyFunction:
Type: AWS::Serverless::Function
Properties:
Runtime: nodejs22.x
Handler: index.handler
Events:
Api:
Type: HttpApi
Properties:
Path: /hello
Method: GET
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref Table
export const handler = async (event: APIGatewayProxyEventV2) => {
return { statusCode: 200, body: JSON.stringify({ message: 'Hello' }) };
};
サーバーレスを扱う関連書籍も多い。