infra/terraform/cloudfront.tf
2022-10-06 16:36:31 +01:00

74 lines
1.9 KiB
HCL

resource "aws_cloudfront_distribution" "api-by-becki" {
origin {
domain_name = "abb.gmem.ca"
origin_id = "abb.gmem.ca"
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 = "abb.gmem.ca"
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-by-becki.gmem.ca"]
viewer_certificate {
acm_certificate_arn = aws_acm_certificate.api-by-becki.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-by-becki" {
domain_name = "api-by-becki.gmem.ca"
validation_method = "DNS"
provider = aws.virginia
}
resource "aws_acm_certificate_validation" "api-by-becki" {
certificate_arn = aws_acm_certificate.api-by-becki.arn
validation_record_fqdns = [for record in aws_route53_record.api-by-becki-acm : record.fqdn]
provider = aws.virginia
}