如何在Terraform的AWS CloudFront分发中批量配置多源站?
解决方案:使用Terraform动态块生成多个CloudFront源站
完全可以在Terraform的嵌套子字段(比如CloudFront的origin块)上进行数组迭代,你需要用**动态块(Dynamic Block)**来实现,这正是Terraform为生成重复嵌套块设计的功能。
具体实现步骤
- 先确保你的
var.redirections变量是包含源站配置的列表或集合,比如:
variable "redirections" { type = list(object({ origin_id = string domain_name = string # 可按需添加其他源站配置字段,比如自定义源站路径、Origin Shield配置等 })) description = "CloudFront多源站配置列表" }
- 在
aws_cloudfront_distribution资源中,用dynamic "origin"块替代手动编写的多个origin块,通过for_each迭代变量生成源站:
resource "aws_cloudfront_distribution" "main" { # 分发基础配置 enabled = true default_root_object = "index.html" # 动态生成多个origin块 dynamic "origin" { for_each = var.redirections content { origin_id = origin.value.origin_id domain_name = origin.value.domain_name # 自定义源站配置示例,可根据需求调整 custom_origin_config { http_port = 80 https_port = 443 origin_protocol_policy = "https-only" origin_ssl_protocols = ["TLSv1.2"] } } } # 默认缓存行为配置(关联其中一个源站,可按需调整) default_cache_behavior { target_origin_id = var.redirections[0].origin_id viewer_protocol_policy = "redirect-to-https" allowed_methods = ["GET", "HEAD"] cached_methods = ["GET", "HEAD"] } # 其他分发配置(如缓存行为、自定义错误页面等)可按需添加 }
关键说明
- 动态块的
for_each支持遍历列表、集合或映射,这里直接使用var.redirections列表即可。 - 动态块内部通过
origin.value访问当前迭代元素的属性(origin是动态块的标签名,可自定义为其他名称,比如orig,对应orig.value)。 - 这种方式只会生成单个CloudFront分发,同时包含所有迭代生成的源站,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者TalesMGodois
相关产品推荐
相关产品推荐

