サーバーレスでシステムを構築する際、「どのような要素で構成されるのか」「各要素はどのように連携するのか」といった疑問をお持ちではないでしょうか。
この記事では、サーバーレスアーキテクチャの基本的な構成要素と、それらを組み合わせた代表的な設計例を解説します。フロントエンド、API、FaaSといった各要素の役割を理解することで、サーバーレスでのシステム構築のイメージを具体的に描けるようになります。
サーバーレスについては以下の記事で解説しています。よければご覧ください。
サーバーレスアーキテクチャとは
サーバーレスアーキテクチャとは、開発者がサーバーの調達・設定・運用・スケーリングを意識せずにアプリケーションを構築できる設計スタイルです。
具体的には、クラウド事業者が提供するマネージドサービス(FaaS、BaaS)を組み合わせてシステムを構成します。サーバーの管理業務はクラウド事業者側で行われるため、開発者はビジネスロジックの開発に集中できます。
サーバーレスアーキテクチャは、システム全体の構成や設計方針を指す概念であり、個別のサービスではなく、複数のマネージドサービスを連携させた全体像として理解することが重要です。
サーバーレスの基本的な仕組みについては、こちらの記事で詳しく解説しています。
→ サーバーレスとは?仕組み・メリット・デメリット・向き不向きをわかりやすく解説(親記事へのリンク)
従来型アーキテクチャとの違い
サーバーレスアーキテクチャと従来型アーキテクチャの違いを、4つの観点から整理します。
インフラ管理の責任範囲
従来型のアーキテクチャでは、物理サーバーの設置、ネットワーク設定、OSやソフトウェアのインストール、セキュリティパッチの適用といったインフラ管理業務を、開発者や運用担当者が担う必要があります。
サーバーレスアーキテクチャでは、これらの管理業務をクラウド事業者が担当します。開発者はアプリケーションのコード開発に集中でき、インフラ管理の負担から解放されます。
稼働方式
従来型では、サーバーを24時間365日常時稼働させる必要があります。アクセスがない時間帯でもサーバーは起動し続け、リソースを消費します。
サーバーレスでは、イベント(HTTPリクエスト、ファイルアップロード、データベース更新など)が発生した時のみ処理が実行されます。処理が終われば自動的に停止するため、無駄なリソース消費を抑えられます。
スケーリング
従来型では、アクセス増加に対応するために、手動でサーバーを増設する必要があります。また、ピーク時のアクセス量を想定して、事前にサーバー容量を設計しておく必要があります。
サーバーレスでは、アクセス量や処理負荷に応じて、自動的にリソースが増減します。急なアクセス集中にも自動で対応し、閑散期には自動的にリソースが削減されます。
コスト構造
従来型は固定費型のコスト構造です。サーバーを稼働させている限り、アクセスの有無に関わらず一定の費用が発生します。
サーバーレスは従量課金型です。実際に処理を実行した分だけ費用が発生するため、利用パターンによっては運用コストを抑えられます。ただし、常時大量のアクセスがあるシステムでは、従来型より割高になる場合もあります。
サーバーレスアーキテクチャの基本構成
サーバーレスアーキテクチャは、複数の構成要素を組み合わせて成り立っています。ここでは、主要な6つの要素について、それぞれの役割と特徴を詳しく解説します。
フロントエンド
フロントエンドは、ユーザーが実際に見る画面部分です。Webブラウザで表示されるWebサイトや、スマートフォンで利用するアプリの画面がこれにあたります。
サーバーレスアーキテクチャでは、フロントエンドの静的コンテンツ(HTML、CSS、JavaScript、画像ファイルなど)を、Amazon S3(ストレージサービス)やAmazon CloudFront(CDN:コンテンツ配信ネットワーク)で配信するのが一般的です。
特にSPA(Single Page Application)と呼ばれる、ブラウザ上で動的に画面を切り替えるタイプのWebアプリケーションとの相性が良いといえます。ReactやVue.jsといったフレームワークで開発されたアプリケーションを、S3に配置するだけでWebサイトとして公開できます。
CloudFrontを組み合わせることで、世界中に分散配置されたサーバーからコンテンツを配信できるため、ユーザーの所在地に関わらず高速なアクセスを実現できます。
API
APIは、フロントエンドとバックエンド(実際の処理を行う部分)をつなぐ窓口の役割を果たします。
API(Application Programming Interface)は、システム同士がデータをやり取りするための仕組みです。フロントエンドから送られたリクエスト(例:ユーザー情報の取得、注文データの送信)を受け付け、バックエンドの適切な処理へ橋渡しします。
サーバーレスアーキテクチャでは、Amazon API GatewayやAWS AppSyncといったマネージドサービスを利用します。
Amazon API Gatewayは、RESTful APIやWebSocket APIを簡単に作成・管理できるサービスです。アクセス量に応じて自動的にスケールし、認証やアクセス制御、リクエストの検証といった機能も提供します。
AWS AppSyncは、GraphQL APIに特化したサービスです。GraphQLは、クライアント側で必要なデータだけを柔軟に取得できるクエリ言語であり、モバイルアプリやWebアプリでの利用が広がっています。
これらのサービスを利用することで、APIサーバーの構築や運用を意識することなく、安全で拡張性の高いAPIを提供できます。
FaaS(関数実行サービス)
FaaSは「Function as a Service」の略で、サーバーレスアーキテクチャの中核を担う要素です。
FaaSでは、必要な処理を「関数」という単位で記述し、特定のイベントが発生した時だけその関数が実行されます。処理が終われば自動的に停止するため、常時サーバーを稼働させる必要がありません。
代表的なFaaSサービスとして、以下があります。
AWS Lambdaは、AWSが提供するFaaSサービスです。Python、Node.js、Java、C#、Goなど、複数のプログラミング言語に対応しています。API Gatewayからのリクエスト、S3へのファイルアップロード、DynamoDBのデータ更新など、様々なイベントをトリガーに処理を実行できます。
Azure Functionsは、Microsoft Azureが提供するFaaSです。Lambdaと同様に複数の言語に対応し、Azure環境内の各種サービスと連携できます。
Google Cloud Functionsは、Google Cloudが提供するFaaSです。Google Cloud Platform内のサービスとシームレスに連携できる点が特徴です。
FaaSの利点は、処理に必要なリソース(メモリ、CPU)を自動的に割り当て、実行時間に応じた従量課金となる点です。開発者はサーバーの管理を意識せず、ビジネスロジックの実装に集中できます。
データベース
データベースは、顧客情報、注文データ、商品情報など、アプリケーションで扱うデータを保存・管理する場所です。
サーバーレスアーキテクチャでは、マネージド型のNoSQLデータベースが多く利用されます。代表的なサービスは以下の通りです。
Amazon DynamoDBは、AWSが提供するNoSQLデータベースサービスです。自動的にスケールし、高速な読み書きが可能です。サーバーの管理が不要で、アクセス量に応じて自動的にパフォーマンスが調整されます。
データの保存形式は、キーと値のペアで構成される柔軟な構造です。リレーショナルデータベースのように事前にテーブル構造を厳密に定義する必要がないため、変化の多いアプリケーション開発に向いています。
Google Cloud Firestoreは、Google Cloudが提供するNoSQLデータベースです。リアルタイムでのデータ同期機能を持ち、モバイルアプリやWebアプリでの利用に適しています。
これらのマネージド型データベースがサーバーレスアーキテクチャと相性が良い理由は、以下の点にあります。
- サーバーの管理が不要(OSの更新、バックアップ、障害対応などをクラウド事業者が担当)
- 自動スケーリング(アクセス量に応じてパフォーマンスが自動調整される)
- 従量課金(データの保存量や読み書き回数に応じた課金)
- 高可用性(データは自動的に複数の場所に複製され、障害時も継続稼働)
認証
認証は、ログインしているユーザーが本人であるかを確認する仕組みです。セキュアなアプリケーションを構築する上で欠かせない要素です。
サーバーレスアーキテクチャでは、マネージド認証サービスを利用することで、自前で認証システムを構築・運用する負担を軽減できます。
Amazon Cognitoは、AWSが提供する認証・ユーザー管理サービスです。ユーザー登録、ログイン、パスワードリセット、多要素認証(MFA)といった機能を提供します。また、GoogleやFacebookなどのソーシャルログインとの連携も可能です。
Auth0は、認証に特化したサードパーティのマネージドサービスです。複数のクラウド環境に対応し、柔軟な認証フローを設計できます。
これらのサービスを利用することで、セキュリティのベストプラクティスを適用した認証システムを、短期間で実装できます。また、セキュリティパッチの適用やコンプライアンス対応もサービス提供側で行われるため、運用負担が軽減されます。
イベント処理・メッセージング
イベント処理・メッセージングは、システム内の各コンポーネント間でイベントやメッセージをやり取りするための仕組みです。非同期処理や疎結合なシステム設計を実現する上で重要な要素です。
サーバーレスアーキテクチャでは、以下のようなサービスが利用されます。
Amazon EventBridgeは、イベント駆動アーキテクチャを実現するサービスです。システム内で発生したイベント(例:注文完了、ファイルアップロード、ユーザー登録)を検知し、適切な処理へ振り分けます。
また、外部のSaaS(SlackやSalesforceなど)との連携も可能で、外部サービスで発生したイベントをトリガーに、Lambda関数を実行することもできます。
Amazon SQS(Simple Queue Service)は、メッセージキューサービスです。処理すべきメッセージを一時的に保管し、順番に処理していく仕組みを提供します。
例えば、大量の注文データを一度に処理する場合、すべてを同時に処理しようとするとシステムに負荷がかかります。SQSを使うことで、メッセージをキューに溜めておき、Lambda関数が順次取り出して処理する形にできます。これにより、システムへの負荷を分散できます。
Amazon SNS(Simple Notification Service)は、通知サービスです。特定のイベントが発生した際に、複数の宛先(メール、SMS、Lambda関数など)へ同時に通知を送ることができます。
例えば、注文が完了した際に、「顧客へ確認メールを送る」「管理者へSMS通知する」「在庫管理システムのLambda関数を起動する」といった複数の処理を同時に実行できます。
これらのサービスを組み合わせることで、各コンポーネントが疎結合(独立性が高く、相互依存が少ない状態)になり、変更や拡張がしやすいシステムを構築できます。
サーバーレスアーキテクチャの例
基本構成要素の説明を踏まえて、実際にどのような構成でシステムが組まれるのか、代表的な3つのパターンを紹介します。
Web API構成
Web API構成は、最も基本的なサーバーレスアーキテクチャのパターンです。
構成の流れは以下の通りです。
- フロントエンド(S3 + CloudFront):ユーザーがブラウザでWebサイトにアクセスすると、S3に保存された静的コンテンツ(HTML、CSS、JavaScript)がCloudFront経由で配信されます。
- API Gateway:フロントエンドから送られたリクエスト(例:ユーザー情報の取得、商品検索)をAPI Gatewayが受け取ります。
- Lambda:API GatewayがLambda関数を起動し、ビジネスロジック(データ加工、計算、外部API呼び出しなど)を実行します。
- DynamoDB:Lambda関数がDynamoDBからデータを取得、または保存します。
- レスポンス:処理結果がAPI Gateway経由でフロントエンドに返され、ユーザーに表示されます。
適している用途は、Webアプリケーション、モバイルアプリのバックエンド、RESTful APIの提供などです。ユーザーからのリクエストに応じてデータを取得・更新する一般的なアプリケーションに広く利用されています。
ファイル処理構成
ファイル処理構成は、S3へのファイルアップロードをトリガーに、自動的に処理を実行するパターンです。
構成の流れは以下の通りです。
- ユーザーがファイル(例:画像、PDF)をS3にアップロードします。
- S3でファイルアップロードのイベントが発生すると、自動的にLambda関数が起動します。
- Lambda関数が、アップロードされたファイルに対して処理を実行します。
- ● 画像の場合:圧縮、リサイズ、形式変換(PNG→JPEG)、サムネイル生成
- ● PDFの場合:テキスト抽出、ページ分割
- ● 動画の場合:フォーマット変換、サムネイル生成
- 処理結果を別のS3バケットやDynamoDBに保存します。
適している用途は、メディアファイルの加工処理、ドキュメントの変換、画像のリサイズやサムネイル生成、アップロードファイルのウイルススキャンなどです。ユーザーがファイルをアップロードすると自動的に処理が実行されるため、手動作業を削減できます。
バッチ処理・定期実行構成
バッチ処理・定期実行構成は、決まった時間に自動的に処理を実行するパターンです。
CRONジョブのサーバーレス版といえます。
構成の流れは以下の通りです。
- EventBridge Schedulerに、実行スケジュールを設定します(例:毎日午前2時、毎週月曜日の9時など)。
- 設定した時刻になると、EventBridgeがLambda関数を起動します。
- Lambda関数が処理を実行します。
- データベースからデータを取得
- 集計処理
- レポート生成(CSV、PDF)
- 外部APIへのデータ送信
- 処理結果をS3に保存、DynamoDBに記録、またはSNS経由でメール通知します。
適している用途は、日次・週次・月次のデータ集計、定期的なレポート生成、外部システムとのデータ同期、ログファイルの定期的なアーカイブ、期限切れデータの削除処理などです。
従来はサーバーを常時稼働させてCRONジョブを設定する必要がありましたが、サーバーレスでは実行時のみリソースを使用するため、コストを抑えられます。
より詳しいサーバーレスWebアプリの構成例については、こちらの記事で解説しています。
→ サーバーレスWebアプリの構成例と実装パターンを解説(記事8へのリンク)
まとめ
サーバーレスアーキテクチャは、フロントエンド、API、FaaS、データベース、認証、イベント処理といった複数の構成要素を組み合わせて成り立っています。
各要素がマネージドサービスとして提供されているため、サーバーの管理業務を意識することなく、柔軟でスケーラブルなシステムを構築できます。
用途に応じて構成パターンを選択することで、Web API、ファイル処理、バッチ処理など、様々なシステムをサーバーレスで実現できます。自社のシステム要件に照らし合わせて、適切な構成を検討してみてはいかがでしょうか。
サーバーレスアーキテクチャを活用したシステム開発をご検討中の方は、要件に合う構成をご提案します。お気軽にご相談ください。
