You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terraform的AWS CloudFront分发中批量配置多源站?

解决方案:使用Terraform动态块生成多个CloudFront源站

完全可以在Terraform的嵌套子字段(比如CloudFront的origin块)上进行数组迭代,你需要用**动态块(Dynamic Block)**来实现,这正是Terraform为生成重复嵌套块设计的功能。

具体实现步骤

  1. 先确保你的var.redirections变量是包含源站配置的列表或集合,比如:
variable "redirections" {
  type = list(object({
    origin_id   = string
    domain_name = string
    # 可按需添加其他源站配置字段,比如自定义源站路径、Origin Shield配置等
  }))
  description = "CloudFront多源站配置列表"
}
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:17:09