Skip to content

Commit fcd12c3

Browse files
feat: Allow all policies to be specified by name or ID (#134)
Co-authored-by: Anton Babenko <anton@antonbabenko.com>
1 parent 3d2e4a2 commit fcd12c3

File tree

4 files changed

+53
-14
lines changed

4 files changed

+53
-14
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
repos:
22
- repo: https://github.com/antonbabenko/pre-commit-terraform
3-
rev: v1.88.0
3+
rev: v1.88.2
44
hooks:
55
- id: terraform_fmt
66
- id: terraform_wrapper_module_for_each

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,9 @@ No modules.
127127
| [aws_cloudfront_monitoring_subscription.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudfront_monitoring_subscription) | resource |
128128
| [aws_cloudfront_origin_access_control.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudfront_origin_access_control) | resource |
129129
| [aws_cloudfront_origin_access_identity.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudfront_origin_access_identity) | resource |
130+
| [aws_cloudfront_cache_policy.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/cloudfront_cache_policy) | data source |
131+
| [aws_cloudfront_origin_request_policy.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/cloudfront_origin_request_policy) | data source |
132+
| [aws_cloudfront_response_headers_policy.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/cloudfront_response_headers_policy) | data source |
130133

131134
## Inputs
132135

examples/complete/main.tf

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,10 @@ module "cloudfront" {
113113
viewer_protocol_policy = "allow-all"
114114
allowed_methods = ["GET", "HEAD", "OPTIONS"]
115115
cached_methods = ["GET", "HEAD"]
116-
compress = true
117-
query_string = true
118116

119-
# This is id for SecurityHeadersPolicy copied from https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/using-managed-response-headers-policies.html
117+
use_forwarded_values = false
118+
119+
cache_policy_id = "b2884449-e4de-46a7-ac36-70bc7f1ddd6d"
120120
response_headers_policy_id = "67f7725c-6f97-4210-82d7-5512b31e9d03"
121121

122122
lambda_function_association = {
@@ -141,8 +141,12 @@ module "cloudfront" {
141141

142142
allowed_methods = ["GET", "HEAD", "OPTIONS"]
143143
cached_methods = ["GET", "HEAD"]
144-
compress = true
145-
query_string = true
144+
145+
use_forwarded_values = false
146+
147+
cache_policy_name = "Managed-CachingOptimized"
148+
origin_request_policy_name = "Managed-UserAgentRefererHeaders"
149+
response_headers_policy_name = "Managed-SimpleCORS"
146150

147151
function_association = {
148152
# Valid keys: viewer-request, viewer-response
@@ -154,6 +158,18 @@ module "cloudfront" {
154158
function_arn = aws_cloudfront_function.example.arn
155159
}
156160
}
161+
},
162+
{
163+
path_pattern = "/static-no-policies/*"
164+
target_origin_id = "s3_one"
165+
viewer_protocol_policy = "redirect-to-https"
166+
167+
allowed_methods = ["GET", "HEAD", "OPTIONS"]
168+
cached_methods = ["GET", "HEAD"]
169+
170+
# Using Cache/ResponseHeaders/OriginRequest policies is not allowed together with `compress` and `query_string` settings
171+
compress = true
172+
query_string = true
157173
}
158174
]
159175

main.tf

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,11 @@ resource "aws_cloudfront_distribution" "this" {
139139
trusted_signers = lookup(i.value, "trusted_signers", null)
140140
trusted_key_groups = lookup(i.value, "trusted_key_groups", null)
141141

142-
cache_policy_id = lookup(i.value, "cache_policy_id", null)
143-
origin_request_policy_id = lookup(i.value, "origin_request_policy_id", null)
144-
response_headers_policy_id = lookup(i.value, "response_headers_policy_id", null)
145-
realtime_log_config_arn = lookup(i.value, "realtime_log_config_arn", null)
142+
cache_policy_id = try(i.value.cache_policy_id, data.aws_cloudfront_cache_policy.this[i.value.cache_policy_name].id, null)
143+
origin_request_policy_id = try(i.value.origin_request_policy_id, data.aws_cloudfront_origin_request_policy.this[i.value.origin_request_policy_name].id, null)
144+
response_headers_policy_id = try(i.value.response_headers_policy_id, data.aws_cloudfront_response_headers_policy.this[i.value.response_headers_policy_name].id, null)
145+
146+
realtime_log_config_arn = lookup(i.value, "realtime_log_config_arn", null)
146147

147148
min_ttl = lookup(i.value, "min_ttl", null)
148149
default_ttl = lookup(i.value, "default_ttl", null)
@@ -203,10 +204,11 @@ resource "aws_cloudfront_distribution" "this" {
203204
trusted_signers = lookup(i.value, "trusted_signers", null)
204205
trusted_key_groups = lookup(i.value, "trusted_key_groups", null)
205206

206-
cache_policy_id = lookup(i.value, "cache_policy_id", null)
207-
origin_request_policy_id = lookup(i.value, "origin_request_policy_id", null)
208-
response_headers_policy_id = lookup(i.value, "response_headers_policy_id", null)
209-
realtime_log_config_arn = lookup(i.value, "realtime_log_config_arn", null)
207+
cache_policy_id = try(i.value.cache_policy_id, data.aws_cloudfront_cache_policy.this[i.value.cache_policy_name].id, null)
208+
origin_request_policy_id = try(i.value.origin_request_policy_id, data.aws_cloudfront_origin_request_policy.this[i.value.origin_request_policy_name].id, null)
209+
response_headers_policy_id = try(i.value.response_headers_policy_id, data.aws_cloudfront_response_headers_policy.this[i.value.response_headers_policy_name].id, null)
210+
211+
realtime_log_config_arn = lookup(i.value, "realtime_log_config_arn", null)
210212

211213
min_ttl = lookup(i.value, "min_ttl", null)
212214
default_ttl = lookup(i.value, "default_ttl", null)
@@ -294,3 +296,21 @@ resource "aws_cloudfront_monitoring_subscription" "this" {
294296
}
295297
}
296298
}
299+
300+
data "aws_cloudfront_cache_policy" "this" {
301+
for_each = toset([for v in concat([var.default_cache_behavior], var.ordered_cache_behavior) : v.cache_policy_name if can(v.cache_policy_name)])
302+
303+
name = each.key
304+
}
305+
306+
data "aws_cloudfront_origin_request_policy" "this" {
307+
for_each = toset([for v in concat([var.default_cache_behavior], var.ordered_cache_behavior) : v.origin_request_policy_name if can(v.origin_request_policy_name)])
308+
309+
name = each.key
310+
}
311+
312+
data "aws_cloudfront_response_headers_policy" "this" {
313+
for_each = toset([for v in concat([var.default_cache_behavior], var.ordered_cache_behavior) : v.response_headers_policy_name if can(v.response_headers_policy_name)])
314+
315+
name = each.key
316+
}

0 commit comments

Comments
 (0)