PR

CloudFront + Lambda@Edge vs API Gateway + WAF:Lambdaコスト最適化完全ガイド

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@EdgeAPI 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 を活用することで、セキュリティとコスト最適化の両立が可能になります。あなたのユースケースに合った方法で、スマートなアーキテクチャを実現してください!

コメント

タイトルとURLをコピーしました