アーキテクチャ例

サーバーレスアーキテクチャ例

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 LambdaAzure FunctionsCloud Functions
最大実行時間15 分無制限(Premium プラン)60 分(2nd gen)
メモリ上限10,240 MB14 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/PowerShellNode.js/Python/Go/Java/Ruby/.NET
特徴エコシステム最大・Lambda Layer・SnapStartDurable 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クレジット)