AWSサーバーレスでWebアプリ開発|Lambda・API Gateway・S3の構成パターン
コセケン
テクラル合同会社

AWSサーバーレスでWebアプリを構築するには、Lambda(関数実行)+ API Gateway(ルーティング)+ S3(ストレージ)+ DynamoDB(DB) の4サービスを組み合わせます。これら4つを接続するだけで、サーバー管理不要・従量課金・自動スケーリングのWebアプリが完成します。
本記事は「AWSの具体的なサービスを使って実際に構築したい」という方向けの実装ガイドです。サーバーレスの概念やメリット・デメリットの解説はサーバーレスとは?アーキテクチャのメリット・デメリットと導入の判断基準をご覧ください。
AWSサーバーレスとは(AWSに絞った実装ガイド)
サーバーレスとはサーバーが存在しないのではなく、開発者がサーバーを管理しないアーキテクチャです。AWSでは「フルマネージドサービス」として提供されており、OSパッチ・スケーリング・冗長化はすべてAWS側が担います。
他クラウド(GCP Cloud Run・Azure Functionsなど)でもサーバーレスは実現できますが、本記事ではAWSのマネージドサービスに絞って解説します。AWS固有のサービス名・料金・設定方法を具体的に押さえることで、設計から本番運用まで迷わず進められます。
使用するAWSサービス一覧【比較表】
| サービス | 役割 | 料金目安(2024年時点) |
|---|---|---|
| AWS Lambda | イベント駆動で関数を実行(バックエンドロジック) | 100万リクエスト/月まで無料。以降 $0.20/100万件 + $0.00001667/GB秒 |
| Amazon API Gateway | HTTPリクエストをLambdaにルーティング | HTTP API: $1.00/100万リクエスト(REST APIより約70%安) |
| Amazon S3 | 静的ファイル(HTML/CSS/JS・画像)の配信 | $0.025/GB/月(標準ストレージ)。静的サイトホスティング無料 |
| Amazon DynamoDB | サーバーレスNoSQLデータベース | オンデマンドモード: $1.25/100万書き込み、$0.25/100万読み込み |
| Amazon CloudFront | CDN + S3前段のHTTPS終端 | 1TB/月まで $0.085/GB。S3連携は無料転送枠あり |
| AWS CloudWatch | ログ・メトリクス・アラート管理 | 5GBのログ取り込み/月まで無料 |
料金はすべて東京リージョン(ap-northeast-1)の目安。無料利用枠は12か月間適用。公式のAWSプライシングで最新値を確認してください。
アーキテクチャ設計の基本パターン
AWSサーバーレスWebアプリの代表的な構成を示します。
ユーザー
↓ HTTPS
CloudFront(CDN・HTTPS終端)
├─ /api/* → API Gateway → Lambda → DynamoDB
└─ /* → S3(静的ファイル: React/Next.js ビルド成果物)
ポイント
- S3 + CloudFront でフロントエンドを配信することで、Lambdaへのリクエストをバックエンドのみに限定できる
- API GatewayはHTTP APIを選ぶと低レイテンシ・低コスト(REST APIより約70%安)
- DynamoDBはオンデマンドモードで開始し、アクセス量が安定したらプロビジョニングモードに移行するとコストが下がる
非同期処理が必要な場合(メール送信・バッチ処理など)は、Lambda → Amazon SQS → Lambda のキューイング構成を追加します。
Lambda関数の作成手順
AWS SAM(Serverless Application Model)を使うと、インフラをコードで定義できます。
1. SAMテンプレートの作成(template.yaml)
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
Function:
Runtime: python3.12
Timeout: 10
MemorySize: 256
Resources:
GetUserFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: src/handlers/
Handler: get_user.handler
Events:
GetUser:
Type: HttpApi # HTTP API (低コスト)
Properties:
Path: /users/{id}
Method: GET
Environment:
Variables:
TABLE_NAME: !Ref UsersTable
UsersTable:
Type: AWS::DynamoDB::Table
Properties:
BillingMode: PAY_PER_REQUEST # オンデマンドモード
AttributeDefinitions:
- AttributeName: userId
AttributeType: S
KeySchema:
- AttributeName: userId
KeyType: HASH
2. Lambdaハンドラの実装(src/handlers/get_user.py)
import json
import boto3
import os
dynamodb = boto3.resource("dynamodb")
table = dynamodb.Table(os.environ["TABLE_NAME"])
def handler(event, context):
user_id = event["pathParameters"]["id"]
response = table.get_item(Key={"userId": user_id})
item = response.get("Item")
if not item:
return {"statusCode": 404, "body": json.dumps({"error": "Not found"})}
return {"statusCode": 200, "body": json.dumps(item)}
3. デプロイ
sam build && sam deploy --guided
API Gateway設定のポイント
| 設定項目 | 推奨値 | 理由 |
|---|---|---|
| APIタイプ | HTTP API | REST APIより70%安く、レイテンシも低い |
| ステージ変数 | dev / prod を分離 |
同じテンプレートで環境切り替え可 |
| CORSの設定 | 許可オリジンを明示 | S3配信のフロントエンドから叩くために必須 |
| タイムアウト | 最大29秒(HTTP API) | Lambdaの最大実行時間とは別に制約あり |
| スロットリング | バースト制限 5,000RPS | デフォルトで設定済み。超過時は429エラー |
CORS設定をSAMで記述する例:
Globals:
HttpApi:
CorsConfiguration:
AllowOrigins:
- "https://your-domain.com"
AllowMethods:
- GET
- POST
AllowHeaders:
- Content-Type
- Authorization
運用上の注意点(コスト・コールドスタート・CloudWatch)
コールドスタート対策
Lambdaは一定時間リクエストがないと関数コンテナが停止します。次のリクエスト時に初期化処理(コールドスタート)が走り、数百ms〜数秒の遅延が発生します。
対策方法
| 方法 | 効果 | コスト |
|---|---|---|
| Provisioned Concurrency | コンテナを常時起動状態に保つ | 追加料金あり($0.015/時間per 1 concurrency) |
| メモリ増量 | CPUも比例して増え初期化が速くなる | メモリ単価は低いため効果的 |
| ランタイム選択 | Python/Node.jsはJavaより起動が速い | 無料 |
| 軽量依存関係 | Lambdaレイヤーで共通ライブラリを分離 | 無料 |
コスト管理
- DynamoDB: 書き込みが多い場合はプロビジョニングモード + Auto Scalingが安い
- Lambda: 実行時間×メモリが課金対象。不要な処理をLambdaの外に追い出す
- API Gateway: キャッシュTTLを設定してLambda呼び出し回数を削減
CloudWatchによる監視
# Lambdaの重要メトリクス
- Duration(実行時間): 平均・P99を監視
- Errors(エラー率): 1%超でアラート
- Throttles(スロットリング): 0超でアラート
- ConcurrentExecutions(同時実行数): アカウント上限1,000に注意
AWS X-Rayを有効にするとサービス間のリクエストトレースが可視化でき、どのサービスがボトルネックかを特定できます。CloudWatchダッシュボードにLambda・DynamoDB・API Gatewayのメトリクスをまとめて一元管理することを推奨します。
デプロイの自動化についてはAWSでのCI/CDパイプライン構築ガイド|開発を加速する6つの実践ポイントも参照してください。
まとめ
AWSサーバーレスWebアプリの構成要素と実装ポイントを整理します。
| 項目 | 要点 |
|---|---|
| 基本4サービス | Lambda + API Gateway + S3 + DynamoDB |
| APIタイプ | HTTP APIを選ぶと低コスト・低レイテンシ |
| IaC | AWS SAMでインフラをコード化 → 環境再現性を確保 |
| コールドスタート | メモリ増量・Provisioned Concurrencyで対策 |
| 監視 | CloudWatch + X-Rayで可観測性を確保 |
サーバーレスはゼロから小さく始めて、トラフィックに応じて無停止でスケールできる点が最大の強みです。まずAWS無料利用枠の範囲でプロトタイプを動かし、本番要件に合わせてコスト設計を見直す進め方が実践的です。
この記事を書いた人

コセケン
テクラル合同会社
スタートアップでのCTO経験を経て、現在はテクラル合同会社にてシステム開発全般を牽引しています。アプリおよびWebの開発から、バックエンド、インフラ構築に至るまで幅広い技術領域に対応可能です。スピード感を持った品質の高いシステム開発を得意としており、新規プロダクトの立ち上げを一気通貫で支援します。本ブログでは実践的な開発ノウハウを発信していきます。


