infra/terraform/cloudfront.tf

70 lines
1.8 KiB
HCL

resource "aws_cloudfront_distribution" "api-by-becki" {
origin {
domain_name = "couch.artbybecki.com"
origin_id = "couch.artbybecki.com"
custom_origin_config {
http_port = 80
https_port = 443
origin_protocol_policy = "https-only"
origin_ssl_protocols = ["TLSv1.2"]
}
}
default_cache_behavior {
allowed_methods = ["DELETE", "GET", "HEAD", "OPTIONS", "PATCH", "POST", "PUT"]
cached_methods = ["GET", "HEAD"]
target_origin_id = "couch.artbybecki.com"
compress = true
viewer_protocol_policy = "redirect-to-https"
cache_policy_id = aws_cloudfront_cache_policy.api.id
response_headers_policy_id = "eaab4381-ed33-4a86-88ca-d9558dc6cd63"
}
http_version = "http2and3"
enabled = true
is_ipv6_enabled = true
aliases = ["api.artbybecki.com"]
viewer_certificate {
acm_certificate_arn = aws_acm_certificate.api-artbybecki-com.arn
ssl_support_method = "sni-only"
}
restrictions {
geo_restriction {
restriction_type = "none"
}
}
}
resource "aws_cloudfront_cache_policy" "api" {
name = "APIs"
default_ttl = 300
max_ttl = 604800
min_ttl = 1
parameters_in_cache_key_and_forwarded_to_origin {
enable_accept_encoding_brotli = true
enable_accept_encoding_gzip = true
cookies_config {
cookie_behavior = "none"
}
headers_config {
header_behavior = "none"
}
query_strings_config {
query_string_behavior = "all"
}
}
}
resource "aws_acm_certificate" "api-artbybecki-com" {
domain_name = "api.artbybecki.com"
validation_method = "DNS"
provider = aws.virginia
subject_alternative_names = ["art-by-becki.gmem.ca"]
}