CloudFront — CDN + TLS
概要
Amazon CloudFront は AWS のグローバル CDN (Content Delivery Network)。 世界中の Edge ロケーションでコンテンツをキャッシュし、訪問者に最寄りの Edge から配信する仕組みです。 静的サイト配信、動画ストリーミング、API のキャッシュ、TLS 終端、WAF 統合などで使われます。
OAC (Origin Access Control) と組み合わせると S3 を非公開にしたまま全世界配信できるため、 静的サイト + サーバレス API の標準パターンの中核になります。
主な機能
- 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 に転送するヘッダ・クエリを制御。
- Response Headers Policy — レスポンスヘッダ自動付与(SecurityHeadersPolicy 等)。
- CloudFront Function — viewer-request/response で動く軽量 JS。URI 書換えなどに。
- Lambda@Edge — 全 4 イベントで動くフル Lambda。複雑な処理に。
- Custom Error Response — 4xx/5xx を別レスポンスに置換。SPA フォールバック等。
- Geo Restriction — 国レベルでアクセス許可・拒否。
- Price Class — 100 (北米欧州) / 200 (+アジア) / All (全世界)。日本は 200 以上。
使うべきパターン
- 静的サイト配信 — S3 + OAC + CloudFront が標準。Public Access Block 全 true で安全。
- API のキャッシュ — API Gateway を Origin にして GET レスポンスをキャッシュ。
- 1 ドメインで複数 Origin に振り分け —
/api/*は API GW、それ以外は S3 という構成。 - 動画 / 大容量ファイル配信 — Edge キャッシュで Origin への負荷削減 + レイテンシ低減。
- WAF / TLS / Custom Error をまとめて適用したい時。
使わない方が良いパターン
- 頻繁に書き換わる動的コンテンツのみ — キャッシュヒット率が低いと CDN の意味が無い。
- 個人開発で月数アクセスのみ — S3 静的 Web サイトホスティングだけで足りる場合も。
- レスポンスにユーザ固有情報が大量に含まれる 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 のキャッシュを強制失効させる操作。デプロイ時に
/*で全パージ。