@@ -31,6 +31,7 @@ resource "aws_cloudfront_distribution" "cloudfront_distribution" {
3131 cached_methods = [" GET" , " HEAD" ]
3232 target_origin_id = " S3-${ aws_s3_bucket . s3_1 . id } "
3333 viewer_protocol_policy = " redirect-to-https"
34+ compress = true # Gzip/Brotli 압축 활성화
3435
3536 forwarded_values {
3637 query_string = false
@@ -39,10 +40,10 @@ resource "aws_cloudfront_distribution" "cloudfront_distribution" {
3940 }
4041 }
4142
42- # 캐시 설정
43+ # 캐시 설정 - 정적 리소스는 길게
4344 min_ttl = 0
44- default_ttl = 86400
45- max_ttl = 31536000
45+ default_ttl = 86400 # 1일
46+ max_ttl = 31536000 # 1년
4647 }
4748
4849 restrictions {
@@ -51,9 +52,22 @@ resource "aws_cloudfront_distribution" "cloudfront_distribution" {
5152 }
5253 }
5354
55+ # 존재하지 않는 오브젝트 요청 시
5456 custom_error_response {
55- error_caching_min_ttl = 600
5657 error_code = 404
58+ error_caching_min_ttl = 300 # 5분 (에러 캐싱으로 Origin 부하 감소)
59+ }
60+
61+ # 권한 없음 에러 (예: S3 퍼미션 문제)
62+ custom_error_response {
63+ error_code = 403
64+ error_caching_min_ttl = 120
65+ }
66+
67+ # S3 서비스 장애 시
68+ custom_error_response {
69+ error_code = 503
70+ error_caching_min_ttl = 10
5771 }
5872
5973 # 과금 정책
@@ -62,15 +76,15 @@ resource "aws_cloudfront_distribution" "cloudfront_distribution" {
6276 # PriceClass_All: 전세계
6377 price_class = " PriceClass_100"
6478
65- # fixme: CDN 도메인 설정
66- # aliases = [var.cdn_domain]
79+ # CDN 도메인 설정
80+ aliases = [var . cdn_domain ]
6781
6882 viewer_certificate {
69- cloudfront_default_certificate = true
70- # fixme: ACM 인증서 사용(CDN 도메인 설정) 시 아래 주석 해제
71- # acm_certificate_arn = aws_acm_certificate.cdn_domain_cert.arn
72- # ssl_support_method = "sni-only"
73- # minimum_protocol_version = "TLSv1.2_2021"
83+ # cloudfront_default_certificate = true
84+ # ACM 인증서 사용(CDN 도메인 설정) 시 아래 주석 해제
85+ acm_certificate_arn = aws_acm_certificate_validation . cdn_domain_cert_validation . certificate_arn
86+ ssl_support_method = " sni-only"
87+ minimum_protocol_version = " TLSv1.2_2021"
7488 }
7589
7690 tags = merge (local. common_tags , {
@@ -82,17 +96,26 @@ resource "aws_cloudfront_distribution" "cloudfront_distribution" {
8296# ACM 인증서
8397# #################
8498# CloudFront는 us-east-1 리전에 있어야 함
85- # fixme: CDN 도메인 설정 시 주석 해제
86- # resource "aws_acm_certificate" "cdn_domain_cert" {
87- # provider = "us-east-1"
88- # domain_name = var.cdn_domain
89- # validation_method = "DNS"
90- #
91- # lifecycle {
92- # create_before_destroy = true
93- # }
94- #
95- # tags = merge(local.common_tags, {
96- # Name = "${var.prefix}-cdn-domain-cert"
97- # })
98- # }
99+ resource "aws_acm_certificate" "cdn_domain_cert" {
100+ provider = aws. us_east_1
101+ domain_name = var. cdn_domain
102+ key_algorithm = " EC_prime256v1"
103+ validation_method = " DNS"
104+
105+ lifecycle {
106+ create_before_destroy = true
107+ }
108+
109+ tags = merge (local. common_tags , {
110+ Name = " ${ var . prefix } -cdn-domain-cert"
111+ })
112+ }
113+
114+ resource "aws_acm_certificate_validation" "cdn_domain_cert_validation" {
115+ provider = aws. us_east_1
116+ certificate_arn = aws_acm_certificate. cdn_domain_cert . arn
117+
118+ timeouts {
119+ create = " 1h"
120+ }
121+ }
0 commit comments