1
+ locals {
2
+ public_dir_with_leading_slash = " ${ length (var. public_dir ) > 0 ? " /${ var . public_dir } " : " " } "
3
+ static_website_routing_rules = << EOF
4
+ [{
5
+ "Condition": {
6
+ "KeyPrefixEquals": "${ var . public_dir } /${ var . public_dir } /"
7
+ },
8
+ "Redirect": {
9
+ "Protocol": "https",
10
+ "HostName": "${ var . domain_name } ",
11
+ "ReplaceKeyPrefixWith": "",
12
+ "HttpRedirectCode": "301"
13
+ }
14
+ }]
15
+ EOF
16
+ }
17
+
1
18
resource "aws_s3_bucket" "static_website" {
2
19
bucket = " ${ var . domain_name } "
3
20
4
21
website {
5
22
index_document = " index.html"
6
23
error_document = " error.html"
24
+
25
+ routing_rules = " ${ length (var. public_dir ) > 0 ? local . static_website_routing_rules : " " } "
7
26
}
8
27
9
28
tags = " ${ merge (map (" Name" , " ${ var . domain_name } -static_website" ), var. tags )} "
@@ -13,7 +32,7 @@ data "aws_iam_policy_document" "static_website_read_with_secret" {
13
32
statement {
14
33
sid = " 1"
15
34
actions = [" s3:GetObject" ]
16
- resources = [" ${ aws_s3_bucket . static_website . arn } ${ var . public_dir } /*" ]
35
+ resources = [" ${ aws_s3_bucket . static_website . arn } ${ local . public_dir_with_leading_slash } /*" ]
17
36
18
37
principals {
19
38
type = " AWS"
@@ -34,13 +53,13 @@ resource "aws_s3_bucket_policy" "static_website_read_with_secret" {
34
53
}
35
54
36
55
locals {
37
- s3_origin_id = " cloudfront-distribution-origin-${ var . domain_name } .s3.amazonaws.com${ var . public_dir } "
56
+ s3_origin_id = " cloudfront-distribution-origin-${ var . domain_name } .s3.amazonaws.com${ local . public_dir_with_leading_slash } "
38
57
}
39
58
40
59
resource "aws_cloudfront_distribution" "cdn" {
41
60
origin {
42
61
domain_name = " ${ aws_s3_bucket . static_website . website_endpoint } "
43
- origin_path = " ${ var . public_dir } "
62
+ origin_path = " ${ local . public_dir_with_leading_slash } "
44
63
origin_id = " ${ local . s3_origin_id } "
45
64
46
65
custom_origin_config {
0 commit comments