AWS Lambda を使って API や静的コンテンツを配信する場合、不要なリクエストが Lambda に届くだけでコストがかさんでしまいます。本記事では、Lambda 呼び出し数を抑え、コスト最適化を実現するために有効な 2 つの方法「CloudFront + Lambda@Edge(または CloudFront Functions)」と「API Gateway + AWS WAF」を比較し、それぞれの特性・実装・費用感・適用シーンについて詳しく解説します。
1. CloudFront + Lambda@Edge / CloudFront Functions とは?
CloudFront を使ってウェブコンテンツを配信する場合、Viewer Request タイミングでリクエストを処理することで、Lambda にリクエストが届く前に制御が可能になります。これを実現するのが CloudFront Functions または Lambda@Edge です。
特徴
項目 | 内容 |
---|---|
処理タイミング | CloudFront の Viewer Request(最初の地点) |
使用技術 | CloudFront Functions(軽量)、Lambda@Edge(Node.js) |
コスト | Functions は無料枠あり・格安。Lambda@Edge もミリ秒課金 |
制御内容例 | Origin チェック、User-Agent フィルタ、IP 制限など |
メリット
- 超高速:エッジロケーションで実行される
- Lambda へのリクエストを完全に遮断可能
- CORS や Bot 対策に最適
デメリット
- デプロイがやや煩雑(各エッジロケーションへの複製)
- CloudFront Logs を使わないとデバッグが難しい
実装例(CloudFront Functions)
function handler(event) {
var request = event.request;
var headers = request.headers;
var allowedOrigin = 'https://example.com';
if (!headers.origin || headers.origin.value !== allowedOrigin) {
return {
statusCode: 403,
statusDescription: 'Forbidden',
headers: {
'content-type': { value: 'application/json' },
'access-control-allow-origin': { value: allowedOrigin }
},
body: JSON.stringify({ message: 'Forbidden origin' }),
};
}
return request;
}
2. API Gateway + AWS WAF
API Gateway 経由で Lambda を呼び出す構成では、WAF を活用することで Lambda 呼び出し前にリクエストをブロックできます。これにより、セキュリティ強化とコスト削減の両立が可能です。
特徴
項目 | 内容 |
---|---|
処理タイミング | API Gateway の手前(WAF が検査) |
使用技術 | AWS WAF(GUI/JSON設定) |
コスト | 基本料金 $5/月 + ルールごとに課金(少額) |
制御内容例 | Origin、IP、国、User-Agent、SQLi/XSS 対策など |
メリット
- GUI でルール作成でき、開発者以外でも運用可能
- Lambda 呼び出し完全防止 → コスト削減
- 高度な攻撃対策(OWASP Top 10)にも対応
デメリット
- 月額基本料金あり($5〜)
- カスタムヘッダーの利用が必要なケースあり(Origin 制御など)
実装例(Origin 制限ルール)
{
"Name": "AllowOnlySpecificOrigin",
"Priority": 1,
"Action": { "Block": {} },
"Statement": {
"ByteMatchStatement": {
"FieldToMatch": {
"SingleHeader": { "Name": "origin" }
},
"PositionalConstraint": "EXACTLY",
"SearchString": "https://example.com",
"TextTransformations": [
{ "Priority": 0, "Type": "NONE" }
]
}
},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "AllowOnlySpecificOrigin"
}
}
3. 比較まとめ
比較項目 | CloudFront + Lambda@Edge | API Gateway + WAF |
---|---|---|
処理速度 | ✅ 非常に高速(エッジ実行) | やや遅い(リージョン内処理) |
Lambda 呼び出し削減 | ✅ 完全カット可能 | ✅ 完全カット可能 |
初期設定の手間 | やや複雑(関数デプロイ必要) | 比較的簡単(GUI or JSON でルール) |
コスト | 非常に安価(Functions なら無料枠あり) | 安価だが固定費あり($5/月〜) |
セキュリティ対策 | CORS や Bot 対策に向く | SQLi/XSS/地理制限に強い |
4. 結論:どちらを選ぶべきか?
✅ CloudFront + Lambda@Edge / Functions を選ぶべきケース
- 静的サイトや動画などの高速配信が重要
- Origin や User-Agent チェックのみで済む
- Lambda 呼び出しコストを限りなくゼロにしたい
✅ API Gateway + WAF を選ぶべきケース
- REST API や GraphQL を提供している
- SQLi/XSS などのセキュリティ対策が必要
- 管理コンソール上で ルールベース運用をしたい
5. さいごに
Lambda は便利でスケーラブルですが、無駄なリクエストにも課金が発生するため、早い段階でのブロックが非常に重要です。CloudFront Functions や WAF を活用することで、セキュリティとコスト最適化の両立が可能になります。あなたのユースケースに合った方法で、スマートなアーキテクチャを実現してください!
コメント