resource "aws_cloudfront_origin_access_control" "default" { name = "default-oac" origin_access_control_origin_type = "s3" signing_behavior = "always" signing_protocol = "sigv4" } resource "aws_cloudfront_distribution" "cdn" { origin { domain_name = aws_s3_bucket_website_configuration.frontend.website_endpoint # origin_access_control_id = aws_cloudfront_origin_access_control.default.id origin_id = local.s3_origin_id custom_origin_config { http_port = 80 https_port = 443 origin_protocol_policy = "http-only" origin_ssl_protocols = ["TLSv1.2"] } } origin { domain_name = replace(aws_apigatewayv2_api.http_api.api_endpoint, "https://", "") origin_id = "api-origin" custom_origin_config { origin_protocol_policy = "https-only" http_port = 80 https_port = 443 origin_ssl_protocols = ["TLSv1.2"] } } enabled = true is_ipv6_enabled = true comment = "ReadFasterLabs CDN" default_root_object = "index.html" aliases = ["readfasterlabs.com", "www.readfasterlabs.com"] default_cache_behavior { allowed_methods = ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"] cached_methods = ["GET", "HEAD"] target_origin_id = local.s3_origin_id viewer_protocol_policy = "redirect-to-https" forwarded_values { query_string = true headers = ["Authorization"] cookies { forward = "none" } } min_ttl = 0 default_ttl = 3600 max_ttl = 86400 } # Cache behavior with precedence 0 ordered_cache_behavior { path_pattern = "/api/*" allowed_methods = ["GET", "HEAD", "OPTIONS", "POST", "PUT", "PATCH", "DELETE"] cached_methods = ["GET", "HEAD"] target_origin_id = "api-origin" forwarded_values { query_string = true headers=["Authorization"] cookies { forward = "none" } } min_ttl = 0 default_ttl = 3600 max_ttl = 86400 compress = true viewer_protocol_policy = "redirect-to-https" } price_class = "PriceClass_200" restrictions { geo_restriction { restriction_type = "whitelist" locations = ["US", "CA", "GB", "DE"] } } tags = { Environment = "production" } viewer_certificate { acm_certificate_arn = "arn:aws:acm:us-east-1:036487096349:certificate/dc4f8dcc-9809-4d6d-8258-362cf5e19244" ssl_support_method = "sni-only" minimum_protocol_version = "TLSv1.2_2021" } }