CloudFront — CDN + TLS

概要

Amazon CloudFront は AWS のグローバル CDN (Content Delivery Network)。 世界中の Edge ロケーションでコンテンツをキャッシュし、訪問者に最寄りの Edge から配信する仕組みです。 静的サイト配信、動画ストリーミング、API のキャッシュ、TLS 終端、WAF 統合などで使われます。

OAC (Origin Access Control) と組み合わせると S3 を非公開にしたまま全世界配信できるため、 静的サイト + サーバレス API の標準パターンの中核になります。

主な機能

使うべきパターン

使わない方が良いパターン

Terraform 最小サンプル(S3 + OAC)

resource "aws_cloudfront_origin_access_control" "site" {
  name                              = "site-oac"
  origin_access_control_origin_type = "s3"
  signing_behavior                  = "always"
  signing_protocol                  = "sigv4"
}

resource "aws_cloudfront_distribution" "site" {
  enabled             = true
  is_ipv6_enabled     = true
  default_root_object = "index.html"
  aliases             = ["lab.iigtn.com"]
  price_class         = "PriceClass_200"

  origin {
    domain_name              = aws_s3_bucket.site.bucket_regional_domain_name
    origin_id                = "s3-site"
    origin_access_control_id = aws_cloudfront_origin_access_control.site.id
  }

  default_cache_behavior {
    target_origin_id       = "s3-site"
    viewer_protocol_policy = "redirect-to-https"
    allowed_methods        = ["GET", "HEAD"]
    cached_methods         = ["GET", "HEAD"]
    compress               = true

    # AWS マネージドポリシー
    cache_policy_id            = "658327ea-f89d-4fab-a63d-7e88639e58f6"  # CachingOptimized
    response_headers_policy_id = "67f7725c-6f97-4210-82d7-5512b31e9d03"  # SecurityHeadersPolicy
  }

  # SPA フォールバック (404→index.html)
  custom_error_response {
    error_code         = 404
    response_code      = 200
    response_page_path = "/index.html"
  }

  viewer_certificate {
    acm_certificate_arn      = var.acm_arn      # us-east-1 必須
    ssl_support_method       = "sni-only"
    minimum_protocol_version = "TLSv1.2_2021"
  }

  restrictions {
    geo_restriction { restriction_type = "none" }
  }
}

用語集

Distribution
CDN 設定 1 セット。世界中の Edge に展開される。
Origin
元データの取得先。S3 / API Gateway / ALB / カスタム HTTPS。
OAC (Origin Access Control)
CloudFront からのみ S3 を読めるようにする仕組み。SigV4 署名、OAI の後継。
Cache Policy
キャッシュキー (クエリ / ヘッダ / Cookie) と TTL の設定。
Origin Request Policy
Origin に転送するヘッダ・クエリの制御。AllViewerExceptHostHeader 等のマネージド版あり。
CloudFront Function
viewer-request/response で動く軽量 JS (1ms 以内)。URI 書換などに使う。
Lambda@Edge
4 イベントで動くフル Lambda。重めの処理に使えるが起動時間あり。
Custom Error Response
4xx/5xx を別レスポンス(index.html 等)に置換。SPA フォールバック実装に。
Price Class
配信する Edge の範囲。100 (北米欧州) / 200 (+アジア) / All (全世界)。
Invalidation
CloudFront のキャッシュを強制失効させる操作。デプロイ時に /* で全パージ。