@@ -6,26 +6,26 @@ provider "aws" {
6
6
}
7
7
8
8
provider "aws" {
9
- alias = " nvirginia"
9
+ alias = " nvirginia"
10
10
profile = " ${ var . aws_profile } "
11
- region = " us-east-1"
11
+ region = " us-east-1"
12
12
}
13
13
14
14
terraform {
15
15
backend "s3" {
16
- region = " us-east-1"
17
- encrypt = true
18
- bucket = " terraform-state-bucket.rtfpessoa.xyz"
16
+ region = " us-east-1"
17
+ encrypt = true
18
+ bucket = " terraform-state-bucket.rtfpessoa.xyz"
19
19
dynamodb_table = " terraform-state-table"
20
- key = " diff2html.xyz"
20
+ key = " diff2html.xyz"
21
21
}
22
22
}
23
23
24
24
resource "aws_acm_certificate" "cert" {
25
- provider = " aws.nvirginia"
26
- domain_name = " ${ var . domain } "
25
+ provider = " aws.nvirginia"
26
+ domain_name = " ${ var . domain } "
27
27
subject_alternative_names = [" *.${ var . domain } " ]
28
- validation_method = " DNS"
28
+ validation_method = " DNS"
29
29
30
30
lifecycle {
31
31
create_before_destroy = true
@@ -34,24 +34,24 @@ resource "aws_acm_certificate" "cert" {
34
34
35
35
resource "aws_route53_record" "root_domain" {
36
36
zone_id = " ${ var . hosted_zone_id } "
37
- name = " ${ var . domain } "
38
- type = " A"
37
+ name = " ${ var . domain } "
38
+ type = " A"
39
39
40
40
alias {
41
- name = " ${ aws_cloudfront_distribution . cdn . domain_name } "
42
- zone_id = " ${ aws_cloudfront_distribution . cdn . hosted_zone_id } "
41
+ name = " ${ aws_cloudfront_distribution . cdn . domain_name } "
42
+ zone_id = " ${ aws_cloudfront_distribution . cdn . hosted_zone_id } "
43
43
evaluate_target_health = false
44
44
}
45
45
}
46
46
47
47
resource "aws_route53_record" "www_domain" {
48
48
zone_id = " ${ var . hosted_zone_id } "
49
- name = " www. ${ var . domain } "
50
- type = " A"
49
+ name = " ${ local . www_domain } "
50
+ type = " A"
51
51
52
52
alias {
53
- name = " ${ aws_cloudfront_distribution . cdn . domain_name } "
54
- zone_id = " ${ aws_cloudfront_distribution . cdn . hosted_zone_id } "
53
+ name = " ${ aws_cloudfront_distribution . www_cdn . domain_name } "
54
+ zone_id = " ${ aws_cloudfront_distribution . www_cdn . hosted_zone_id } "
55
55
evaluate_target_health = false
56
56
}
57
57
}
@@ -60,13 +60,13 @@ resource "aws_route53_record" "cert_validation" {
60
60
zone_id = " ${ var . hosted_zone_id } "
61
61
name = " ${ aws_acm_certificate . cert . domain_validation_options . 0 . resource_record_name } "
62
62
type = " ${ aws_acm_certificate . cert . domain_validation_options . 0 . resource_record_type } "
63
-
63
+
64
64
records = [" ${ aws_acm_certificate . cert . domain_validation_options . 0 . resource_record_value } " ]
65
65
ttl = 60
66
66
}
67
67
68
68
resource "aws_acm_certificate_validation" "cert" {
69
- provider = " aws.nvirginia"
69
+ provider = " aws.nvirginia"
70
70
certificate_arn = " ${ aws_acm_certificate . cert . arn } "
71
71
validation_record_fqdns = [" ${ aws_route53_record . cert_validation . fqdn } " ]
72
72
}
@@ -75,6 +75,12 @@ resource "aws_cloudfront_origin_access_identity" "origin_access_identity" {
75
75
comment = " ${ var . domain } origin access identity"
76
76
}
77
77
78
+ locals {
79
+ s3_origin_id = " S3-${ var . domain } "
80
+ s3_www_origin_id = " S3-www-${ var . domain } "
81
+ www_domain = " www.${ var . domain } "
82
+ }
83
+
78
84
resource "aws_s3_bucket" "site" {
79
85
bucket = " ${ var . domain } "
80
86
acl = " private"
@@ -90,11 +96,7 @@ resource "aws_s3_bucket" "site" {
90
96
"Resource": "arn:aws:s3:::${ var . domain } /*"
91
97
}]
92
98
}
93
- EOF
94
- }
95
-
96
- locals {
97
- s3_origin_id = " S3-${ var . domain } "
99
+ EOF
98
100
}
99
101
100
102
resource "aws_cloudfront_distribution" "cdn" {
@@ -108,7 +110,7 @@ resource "aws_cloudfront_distribution" "cdn" {
108
110
}
109
111
110
112
# If using route53 aliases for DNS we need to declare it here too, otherwise we'll get 403s.
111
- aliases = [" ${ var . domain } " , " www. ${ var . domain } " ]
113
+ aliases = [" ${ var . domain } " ]
112
114
113
115
enabled = true
114
116
is_ipv6_enabled = true
@@ -121,6 +123,71 @@ resource "aws_cloudfront_distribution" "cdn" {
121
123
122
124
forwarded_values {
123
125
query_string = true
126
+
127
+ cookies {
128
+ forward = " none"
129
+ }
130
+ }
131
+
132
+ min_ttl = 0
133
+ default_ttl = 86400
134
+ max_ttl = 31536000
135
+ compress = true
136
+ viewer_protocol_policy = " redirect-to-https"
137
+ }
138
+
139
+ price_class = " PriceClass_All"
140
+
141
+ restrictions {
142
+ geo_restriction {
143
+ restriction_type = " none"
144
+ locations = []
145
+ }
146
+ }
147
+
148
+ viewer_certificate {
149
+ acm_certificate_arn = " ${ aws_acm_certificate_validation . cert . certificate_arn } "
150
+ minimum_protocol_version = " TLSv1.1_2016"
151
+ ssl_support_method = " sni-only"
152
+ }
153
+ }
154
+
155
+ resource "aws_s3_bucket" "www_site" {
156
+ bucket = " ${ local . www_domain } "
157
+ acl = " public-read"
158
+
159
+ website {
160
+ redirect_all_requests_to = " https://${ var . domain } "
161
+ }
162
+ }
163
+
164
+ resource "aws_cloudfront_distribution" "www_cdn" {
165
+ origin {
166
+ origin_id = " ${ local . s3_www_origin_id } "
167
+ domain_name = " ${ aws_s3_bucket . www_site . website_endpoint } "
168
+
169
+ custom_origin_config {
170
+ http_port = 80
171
+ https_port = 443
172
+ origin_protocol_policy = " http-only"
173
+ origin_ssl_protocols = [" TLSv1.1" , " TLSv1.2" ]
174
+ }
175
+ }
176
+
177
+ # If using route53 aliases for DNS we need to declare it here too, otherwise we'll get 403s.
178
+ aliases = [" ${ local . www_domain } " ]
179
+
180
+ enabled = true
181
+ is_ipv6_enabled = true
182
+
183
+ default_cache_behavior {
184
+ allowed_methods = [" GET" , " HEAD" , " OPTIONS" ]
185
+ cached_methods = [" GET" , " HEAD" ]
186
+ target_origin_id = " ${ local . s3_www_origin_id } "
187
+
188
+ forwarded_values {
189
+ query_string = true
190
+
124
191
cookies {
125
192
forward = " none"
126
193
}
0 commit comments