アーキテクチャ例
サーバーレスアーキテクチャ例
AWS Lambda・Azure Functions・Cloud Functions を使ったイベント駆動型サーバーレスアーキテクチャの構成例と実装パターンを解説します。
サーバーレスアーキテクチャとは
サーバーレスアーキテクチャとは、サーバーのプロビジョニング・管理・スケーリングをクラウドプロバイダーに委ね、開発者がコードの実行ロジックだけに集中できる設計パターンです。「サーバーレス」という名称ですが、実際にはサーバーが存在しないわけではなく、開発者がサーバーを意識しないというコンセプトです。
サーバー管理不要
OS パッチ・スケーリング設定・容量計画が不要。インフラ運用コストを削減。
完全従量課金
コードが実行された時間・回数分だけ課金。アイドル時間のコスト=0。
自動スケーリング
リクエスト数に応じて自動的にスケール。突発的な負荷増にも即対応。
サーバーレスが向いているユースケース
- ✓非同期処理・バッチ処理:画像変換・PDF 生成・データ集計など、レスポンスタイムが問われない処理。SQS や S3 イベントをトリガーに Lambda で実行。
- ✓Webhook ハンドラ:Stripe・GitHub・Slack 等の外部サービスからの Webhook を受信して処理するシンプルな API。イベント発生時のみ起動するためコスト効率が高い。
- ✓スケジュール実行:定期レポート生成・データ同期・クリーンアップバッチ。EventBridge(CloudWatch Events)でCRON式による定期実行。
- ✓軽量 API:リクエスト数が少なく・処理が軽い API(問い合わせフォーム・ファイルアップロード処理等)。API Gateway + Lambda でインフラ管理ゼロで公開。
- ✓IoT・ストリームデータ処理:IoT センサーデータや Kinesis ストリームをリアルタイムに処理・変換・保存するパイプライン。
典型的な構成例
REST API パターン
クライアント → API Gateway (HTTP API) → Lambda (ビジネスロジック) → DynamoDB / RDS Proxy → Aurora
API Gateway が認証・スロットリング・CORS を処理し、Lambda がビジネスロジックを実行。DB への接続は RDS Proxy 経由でコネクションプールを管理(Lambda の並列実行時にコネクション枯渇を防止)。
ファイル処理パターン
ユーザー → S3 アップロード → S3 イベント通知 → Lambda (処理) → S3 (出力保存) → SNS 通知
S3 へのファイルアップロードをトリガーに Lambda が自動起動。画像のリサイズ・PDF のテキスト抽出・動画のトランスコードなど、ファイル処理の典型パターン。処理完了後は SNS→SQS→Lambda でダウンストリーム処理を連鎖させる。
クラウド別サービス比較
| 項目 | AWS Lambda | Azure Functions | Cloud Functions |
|---|---|---|---|
| 最大実行時間 | 15 分 | 無制限(Premium プラン) | 60 分(2nd gen) |
| メモリ上限 | 10,240 MB | 14 GB(Premium) | 32 GB(2nd gen) |
| 無料枠 | 100万リクエスト/月・400,000 GB-秒/月 | 100万リクエスト/月・400,000 GB-秒/月 | 200万リクエスト/月・400,000 GB-秒/月 |
| 言語サポート | Node.js/Python/Java/Go/Ruby/.NET/カスタム | C#/JavaScript/Python/Java/PowerShell | Node.js/Python/Go/Java/Ruby/.NET |
| 特徴 | エコシステム最大・Lambda Layer・SnapStart | Durable Functions(ステートフル)・Visual Studio統合 | Cloud Run との統合・BigQuery/Pub/Sub 連携 |
サーバーレスの注意点
- !Cold Start 問題:一定期間リクエストがないとコンテナが停止し、次のリクエスト時に起動時間(Cold Start:数百ms〜数秒)が発生する。Provisioned Concurrency(AWS)や Premium プラン(Azure)で常時ウォーム状態を維持できる。
- !実行時間制限:Lambda の最大実行時間は 15 分。長時間処理は Step Functions(ワークフロー分割)や ECS Fargate(コンテナ)に切り替える。
- !ステートレス設計必須:Lambda はリクエストをまたいで状態を保持しない。セッション情報・一時データは Redis や DynamoDB に外部化する必要がある。
- !デバッグの難しさ:分散実行のためローカル再現が難しく、X-Ray・CloudWatch Logs Insights による分散トレーシングとログ分析が重要。AWS SAM Local でローカル実行環境を構築できる。
コスト最適化
サーバーレスのコストはリクエスト数 × 実行時間 × メモリで決まります。以下の最適化でコストを削減できます。
- ✓適切なメモリ設定:メモリを増やすと CPU も比例して増加し、実行時間が短縮されることがある。Lambda Power Tuning ツールで最適なメモリ設定を見つける。
- ✓関数の軽量化:依存パッケージを最小化し、コールドスタート時間と実行時間を短縮。Lambda Layer で共通ライブラリを分離・共有。
- ✓同期→非同期の変換:即時レスポンスが不要な処理を SQS 経由の非同期実行に変換することで、呼び出し元の待機時間とコストを削減。
- ✓Compute Savings Plans:Lambda も Compute Savings Plans の対象。一定の使用量がある場合は 17% 割引が適用される(コミットメント不要の Graviton2 も有効)。
ArchitectAI でクラウドアーキテクチャ設計を自動化しましょう
無料で始める(10クレジット)