所以,我正在尝试根据我的 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 分布,这不是我想要的。
您可以使用动态块,记录于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
块,因此实际的键值对您来说没有特别的兴趣,并且顺序也不会无论如何,这里很重要)