1
1
locals {
2
2
public_dir_with_leading_slash = " ${ length (var. public_dir ) > 0 ? " /${ var . public_dir } " : " " } "
3
- static_website_routing_rules = << EOF
3
+ static_website_routing_rules = << EOF
4
4
[{
5
5
"Condition": {
6
6
"KeyPrefixEquals": "${ var . public_dir } /${ var . public_dir } /"
@@ -40,9 +40,9 @@ data "aws_iam_policy_document" "static_website_read_with_secret" {
40
40
}
41
41
42
42
condition {
43
- test = " StringEquals"
43
+ test = " StringEquals"
44
44
variable = " aws:UserAgent"
45
- values = [" ${ var . secret } " ]
45
+ values = [var . secret ]
46
46
}
47
47
}
48
48
}
@@ -63,15 +63,15 @@ resource "aws_cloudfront_distribution" "cdn" {
63
63
origin_id = " ${ local . s3_origin_id } "
64
64
65
65
custom_origin_config {
66
- http_port = 80
67
- https_port = 443
68
- origin_protocol_policy = " http-only"
69
- origin_ssl_protocols = [" TLSv1.2" , " TLSv1.1" , " TLSv1" ]
66
+ http_port = 80
67
+ https_port = 443
68
+ origin_protocol_policy = " http-only"
69
+ origin_ssl_protocols = [" TLSv1.2" , " TLSv1.1" , " TLSv1" ]
70
70
}
71
71
72
72
custom_header {
73
73
name = " User-Agent"
74
- value = " ${ var . secret } "
74
+ value = var. secret
75
75
}
76
76
}
77
77
@@ -82,15 +82,15 @@ resource "aws_cloudfront_distribution" "cdn" {
82
82
aliases = [" ${ var . domain_name } " ]
83
83
84
84
custom_error_response {
85
- error_code = 403
86
- response_page_path = " /error.html"
87
- response_code = 404
85
+ error_code = 403
86
+ response_page_path = " /error.html"
87
+ response_code = 404
88
88
}
89
89
90
90
custom_error_response {
91
- error_code = 404
92
- response_page_path = " /error.html"
93
- response_code = 404
91
+ error_code = 404
92
+ response_page_path = " /error.html"
93
+ response_code = 404
94
94
}
95
95
96
96
default_cache_behavior {
@@ -116,62 +116,45 @@ resource "aws_cloudfront_distribution" "cdn" {
116
116
}
117
117
118
118
viewer_certificate {
119
- acm_certificate_arn = " ${ var . cert_arn } "
120
- ssl_support_method = " sni-only"
121
- minimum_protocol_version = " TLSv1.1_2016"
119
+ acm_certificate_arn = " ${ var . cert_arn } "
120
+ ssl_support_method = " sni-only"
121
+ minimum_protocol_version = " TLSv1.1_2016"
122
122
}
123
123
124
124
tags = " ${ merge (map (" Name" , " ${ var . domain_name } -cdn" ), var. tags )} "
125
125
}
126
126
127
- resource "aws_route53_record" "alias" {
128
- count = " ${ length (var. zone_id ) > 0 ? 1 : 0 } "
129
-
130
- zone_id = " ${ var . zone_id } "
131
- name = " ${ var . domain_name } "
132
- type = " A"
133
-
134
- alias {
135
- name = " ${ aws_cloudfront_distribution . cdn . domain_name } "
136
- zone_id = " ${ aws_cloudfront_distribution . cdn . hosted_zone_id } "
137
- evaluate_target_health = false
138
- }
139
- }
140
127
141
128
resource "aws_s3_bucket" "redirect" {
142
- count = " ${ length (var. redirects )} "
143
-
144
- bucket = " ${ element (var. redirects , count. index )} "
145
-
129
+ for_each = var. redirects
130
+ bucket = each. value
146
131
website {
147
132
redirect_all_requests_to = " https://${ var . domain_name } "
148
133
}
149
-
150
- tags = " ${ merge (map (" Name" , " ${ element (var. redirects , count. index )} -redirect" ), var. tags )} "
134
+ tags = " ${ merge (map (" Name" , each. key ), var. tags )} "
151
135
}
152
136
153
137
resource "aws_cloudfront_distribution" "redirect" {
154
- count = " ${ length (var. redirects )} "
155
-
138
+ for_each = var. redirects
156
139
origin {
157
- domain_name = " ${ element (aws_s3_bucket . redirect . * . website_endpoint , count . index ) } "
158
- origin_id = " cloudfront-distribution-origin-${ element (var . redirects , count . index ) } .s3.amazonaws.com"
140
+ domain_name = each . value
141
+ origin_id = " cloudfront-distribution-origin-${ each . key } .s3.amazonaws.com"
159
142
160
143
custom_origin_config {
161
- http_port = 80
162
- https_port = 443
163
- origin_protocol_policy = " http-only"
164
- origin_ssl_protocols = [" TLSv1.2" , " TLSv1.1" , " TLSv1" ]
144
+ http_port = 80
145
+ https_port = 443
146
+ origin_protocol_policy = " http-only"
147
+ origin_ssl_protocols = [" TLSv1.2" , " TLSv1.1" , " TLSv1" ]
165
148
}
166
149
}
167
150
168
- comment = " CDN for ${ element (var . redirects , count . index ) } S3 Bucket (redirect)"
151
+ comment = " CDN for ${ each . value } S3 Bucket (redirect)"
169
152
enabled = true
170
153
is_ipv6_enabled = true
171
- aliases = [" ${ element (var . redirects , count . index ) } " ]
154
+ aliases = [" ${ each . value } " ]
172
155
173
156
default_cache_behavior {
174
- target_origin_id = " cloudfront-distribution-origin-${ element (var . redirects , count . index ) } .s3.amazonaws.com"
157
+ target_origin_id = " cloudfront-distribution-origin-${ each . key } .s3.amazonaws.com"
175
158
allowed_methods = [" GET" , " HEAD" ]
176
159
cached_methods = [" GET" , " HEAD" ]
177
160
@@ -193,25 +176,40 @@ resource "aws_cloudfront_distribution" "redirect" {
193
176
}
194
177
195
178
viewer_certificate {
196
- acm_certificate_arn = " ${ var . cert_arn } "
197
- ssl_support_method = " sni-only"
198
- minimum_protocol_version = " TLSv1.1_2016"
179
+ acm_certificate_arn = " ${ var . cert_arn } "
180
+ ssl_support_method = " sni-only"
181
+ minimum_protocol_version = " TLSv1.1_2016"
199
182
}
200
183
201
- tags = " ${ merge (map (" Name" , " ${ element (var . redirects , count . index ) } -cdn_redirect" ), var. tags )} "
184
+ tags = " ${ merge (map (" Name" , " ${ each . key } -cdn_redirect" ), var. tags )} "
202
185
}
203
186
204
- resource "aws_route53_record" "redirect " {
205
- count = " ${ length (var. zone_id ) > 0 ? length (var . redirects ) : 0 } "
187
+ resource "aws_route53_record" "alias " {
188
+ # count = "${length(var.zone_id) > 0 ? 1 : 0}"
206
189
207
190
zone_id = " ${ var . zone_id } "
208
- # Work-around (see: https://github.com/hashicorp/terraform/issues/11210)
209
- name = " ${ length (var. redirects ) > 0 ? element (concat (var. redirects , list (" " )), count. index ): " " } "
191
+ name = " ${ var . domain_name } "
210
192
type = " A"
211
193
212
194
alias {
213
- name = " ${ element (aws_cloudfront_distribution. redirect . * . domain_name , count. index )} "
214
- zone_id = " ${ element (aws_cloudfront_distribution. redirect . * . hosted_zone_id , count. index )} "
215
- evaluate_target_health = false
195
+ name = " ${ aws_cloudfront_distribution . cdn . domain_name } "
196
+ zone_id = " ${ aws_cloudfront_distribution . cdn . hosted_zone_id } "
197
+ evaluate_target_health = false
198
+ }
199
+ }
200
+
201
+ resource "aws_route53_record" "redirect" {
202
+ # count = "${length(var.zone_id) > 0 ? length(var.redirects) : 0}"
203
+
204
+ for_each = var. redirects
205
+ zone_id = " ${ var . zone_id } "
206
+ # Work-around (see: https://github.com/hashicorp/terraform/issues/11210)
207
+ name = each. key
208
+ type = " A"
209
+
210
+ alias {
211
+ name = each. value
212
+ zone_id = each. value
213
+ evaluate_target_health = false
216
214
}
217
215
}
0 commit comments