API Gateway + Lambda + DynamoDB サーバーレスAPI構成
API Gatewayを入口にし、Lambdaで処理し、DynamoDBへ保存するサーバーレスAPIの基本構成です。問い合わせフォームや小規模APIに向いています。
構成図
使用AWSサービス
サービス名をクリックすると、用語詳細ページで復習できます。
概要
API GatewayをAPIの入口にし、Lambdaで処理を実行し、DynamoDBにデータを保存する構成です。
本プロジェクトでは、問い合わせフォームの送信内容を保存するAPIとして利用します。
常時起動サーバーを持たないため、小規模なWebアプリや個人開発のMVPと相性が良い構成です。
構成図
flowchart TD
User[ユーザー]
Frontend[Frontend S3 + CloudFront]
APIGW[API Gateway HTTP API]
Lambda[AWS Lambda contact-submit]
DDB[(DynamoDB ContactsTable)]
CW[CloudWatch Logs]
IAM[IAM Role]
Budget[AWS Budgets]User -->|フォーム入力| Frontend
Frontend -->|POST /contact| APIGW
APIGW -->|Lambda Proxy Integration| Lambda
Lambda -->|PutItem| DDB
Lambda -->|ログ出力| CW
IAM -.実行権限.-> Lambda
IAM -.PutItemのみ許可.-> DDB
Budget -.課金監視.-> APIGW
Budget -.課金監視.-> Lambda
Budget -.課金監視.-> DDB
```
この構成で実現できること
| 項目 | 内容 |
|---|---|
| API公開 | フロントエンドからHTTP APIを呼び出せる |
| サーバーレス処理 | Lambdaで必要な時だけ処理を実行できる |
| データ保存 | DynamoDBに問い合わせ内容を保存できる |
| 低コスト運用 | 常時起動サーバーなしでAPIを持てる |
| ログ確認 | CloudWatch LogsでLambdaの実行結果を確認できる |
| 最小権限 | LambdaにはDynamoDB PutItemだけを許可できる |
使用AWSサービス
| サービス | 役割 |
|---|---|
| API Gateway | /contact APIの入口 |
| AWS Lambda | 入力値検証、honeypot判定、DynamoDB保存 |
| Amazon DynamoDB | 問い合わせデータの保存先 |
| Amazon CloudWatch Logs | Lambdaログの確認 |
| IAM Role | LambdaからDynamoDBやCloudWatch Logsへアクセスする権限 |
| AWS Budgets | API利用増加や課金事故の検知 |
通信フロー
- ユーザーが問い合わせフォームへ入力する
- フロントエンドで必須項目や文字数を検証する
- フロントエンドがAPI Gatewayの
POST /contactを呼び出す - API GatewayがLambdaをLambda Proxy Integrationで呼び出す
- LambdaがJSONをパースする
- Lambdaがhoneypotを確認する
- Lambdaが名前、メールアドレス、件名、本文を検証する
- 問題がなければDynamoDBへPutItemする
- LambdaがCloudWatch Logsへ最小限のログを出す
- API Gateway経由でフロントエンドへ結果を返す
設計ポイント
可用性
API Gateway、Lambda、DynamoDBはマネージドサービスであり、個人MVPではインスタンス管理なしでAPIを構成できます。
問い合わせAPIのような低頻度処理では、サーバーレス構成が特に向いています。
セキュリティ
フロントエンドの入力チェックだけを信用せず、Lambda側でも必ず検証します。
CORSは本番フロントエンドのOriginに限定します。
LambdaのIAM Roleには、対象DynamoDBテーブルへの dynamodb:PutItem とCloudWatch Logs出力だけを許可します。
コスト
API Gateway、Lambda、DynamoDBは従量課金です。
低頻度の問い合わせAPIであれば、固定費を抑えやすい構成です。
ただし、スパム投稿やBotアクセスでリクエスト数が増えると課金が増えるため、honeypot、文字数制限、将来的なレート制限を検討します。
運用
CloudWatch Logsでは、requestId、処理結果、エラー種別を出力します。
メールアドレス全文や問い合わせ本文全文はログに出しません。
SAA試験で問われるポイント
- API Gateway + LambdaはサーバーレスAPIの代表的な組み合わせ
- DynamoDBはサーバーレス構成と相性が良いNoSQLデータベース
- Lambda実行ロールは最小権限にする
- CORS設定と認証方式を理解する
- CloudWatch LogsでLambdaのログを確認する
- VPC接続が不要なLambdaでは、NAT Gatewayを作らないことでコストを抑えられる
この構成の注意点
- 本番CORSで
*を使わない - Lambda環境変数にAWSアクセスキーや秘密情報を入れない
- 問い合わせ本文をCloudWatch Logsへ出さない
- DynamoDBのテーブル名や許可Originは環境変数で切り替える
- フロントエンドだけのバリデーションで済ませない
- API GatewayのデフォルトURLを使う場合、本番URL管理をREADMEに明記する
関連用語
関連比較
まとめ
API Gateway + Lambda + DynamoDBは、個人開発MVPで動的処理を最小限追加するための基本構成です。
このプロジェクトでは、問い合わせフォームだけをAPI化し、用語・問題・記事・構成図は静的ファイルとして配信することで、コストと実装範囲を抑えます。
他のAWS構成図も確認する
SAA対策では、AWSサービスを単体ではなく構成パターンとして理解することが重要です。
関連構成図
静的サイト
S3 + CloudFront 静的Webサイト構成
S3に配置した静的サイトをCloudFrontで高速・安全に配信する基本構成です。S3直接公開を避け、OACでCloudFront経由のアクセスに限定します。
3層構成
VPC内3層Webアプリ構成
Public Subnet、Private Subnet、Database Subnetを分け、Web層・アプリ層・DB層を分離する基本的な3層Webアプリ構成です。
高可用性
ALB + Auto Scaling + RDS Multi-AZ 高可用性構成
複数AZにWebサーバーを配置し、ALBで負荷分散し、Auto ScalingとRDS Multi-AZで可用性を高める構成です。