理解Terraform for_each循环迭代



我正在学习terraform,并试图理解terraform中的for_each循环迭代。

我正在通过在Azure云中创建RGs的循环进行迭代,我想了解的是访问实例值之间的区别。或(";")。例如,下面是我的tfvar文件:

resource_groups = {
resource_group_1 = {
name     = "terraform-apply-1"
location = "eastus2"
tags = {
created_by = "vivek89@test.com"
}
},
resource_group_2 = {
name     = "terraform-apply-2"
location = "eastus2"
tags = {
created_by = "vivek89@test.com"
}
},
resource_group_3 = {
name     = "terraform-apply-3"
location = "eastus2"
tags = {
created_by = "vivek89@test.com"
contact_dl = "vivek89@test.com"
}
}
}

及以下是我的地形主目录。tf文件:

resource "azurerm_resource_group" "terraformRG" {
for_each = var.resource_groups
name = each.value.name
location = each.value.location
tags = each.value.tags
}

我对RG创建块中的for_each中的表达式感到困惑。下面两个代码都可以工作并创建RGs:

name = each.value.name
name = each.value["name"]

我想知道两者之间的区别,哪一个是正确的。

它们是等价的,如文档中所述:

Map/object属性的名称是有效的标识符,也可以使用点分隔的属性表示法访问,如local.object.attrname。在映射可能包含任意用户指定的键的情况下,我们建议仅使用方括号索引表示法(local.map["keyname"])。

主要区别在于dot符号要求键属性是有效的标识符。相反,方括号表示法适用于任何标识符。

最新更新