具有多个来源的 Terraform aws cloudfront 分布

问题描述 投票:0回答:1

所以,我正在尝试根据我的 terraform 模块的列表创建多个起源

我正在尝试做以下事情:

resource "aws_cloudfront_distribution" "photos" {

  origin {
      for_each = { for redirection in var.redirections : redirection.origin_id => redirection }
    domain_name              = each.value.origin 
    origin_access_control_id = each.value.origin_id 
    origin_id                = each.value.origin_id
  }
#... rest of terraform resource code
}

我知道它允许我添加多个来源,如下所示:

resource "aws_cloudfront_distribution" "photos" {

  origin {
    domain_name              = "orig1" 
    origin_access_control_id = "origin1.com"
    origin_id                = "origi1"
  }

  origin {
    domain_name              = "orig2" 
    origin_access_control_id = "origin2.com"
    origin_id                = "origi2"
  }


但是,使用这种模式,我无法将其作为变量发送以进行迭代

有什么方法可以仅迭代 terraform 子字段上的数组吗?我尝试将 for every 放在 aws_cloudfront_distribution 资源下,但这会为数组中的每个元素创建一个 cloudfront 分布,这不是我想要的。

amazon-web-services terraform amazon-cloudfront
1个回答
1
投票

您可以使用动态块,记录于here

resource "aws_cloudfront_distribution" "photos" {
  dynamic "origin" {
    for_each = { for redirection in var.redirections : redirection.origin_id => redirection }
    content {
        domain_name              = each.value.origin 
        origin_access_control_id = each.value.origin_id 
        origin_id                = each.value.origin_id
    }
  }
  #... rest of terraform resource code
}

(这可能会简化为

for_each = toset(var.redirections)
,因为您不使用密钥并且无法从外部引用这些
origin
块,因此实际的键值对您来说没有特别的兴趣,并且顺序也不会无论如何,这里很重要)

© www.soinside.com 2019 - 2024. All rights reserved.