我正在尝试创建一个Azure负载平衡器模块,其中包含所有其他属性,例如backendaddress pool等。下面是我的代码
resource azure load balancerresource azure backendaddrespool的数据库
resource "azurerm_lb" "lb-test" {
for_each = { for lb in var.load_balancers : lb.name => lb }
name = each.value.name
resource_group_name = each.value.resource_group_name
location = each.value.location
sku = each.value.sku
edge_zone = each.value.edge_zone
sku_tier = each.value.sku_tier
frontend_ip_configuration {
name = each.value.name
private_ip_address_allocation = each.value.frontend_ip_configuration.private_ip_address_allocation
private_ip_address_version = each.value.frontend_ip_configuration.private_ip_address_version
public_ip_address_id = var.public_ip_address_id
subnet_id = var.subnet_id
zones = each.value.frontend_ip_configuration.zones
}
}
resource "azurerm_lb_backend_address_pool" "bckaddresspool" {
for_each = { for bckaddresspool in var.backend_address_pool : bckaddresspool.name => bckaddresspool }
name = each.value.name
loadbalancer_id = azurerm_lb.lb-test[each.key].id
virtual_network_id = var.virtual_network_id
depends_on = [ azurerm_lb.lb-test ]
}
字符串
现在,当我获取在其他2个资源(backendaddressspool和loadbalancer探测器)中创建的LB的ID时,它会给我以下错误
在资源“azurerm_lb_probe”“azlb_probe”中:loadbalancer_id = azurerm_lb.lb-test[each.key].id
azurerm_lb.lb-test是每个属性为“LB 1”的对象。key是“Probe 1”
给定的键不标识此集合值中的元素。
任何人都可以帮助这个错误,因为我尝试了每一种可能的方式来采取的id作为输入,但仍然给我的问题。
在资源“azurerm_lb_probe”“azlb_probe”中:错误45:loadbalancer_id = azurerm_lb.lb-test[each.key].id不存在azurerm_lb.lb-test是每个具有1个属性“LB 1”的对象。key是“Probe 1”不存在给定的键不标识此集合值中的元素。
我也通过tfvars文件传递我所有的值。
1条答案
按热度按时间epggiuax1#
我尝试将terraform中使用for_each创建的资源ID引用到其他资源中,并且我能够成功地提供需求。
您看到的错误消息表明您在
for_each
循环中使用的键与您定义的实际数据结构中存在的键之间不匹配。该错误特别指出azurerm_lb.lb-test
集合中不存在键"Probe1"
。导致错误的主要问题是:
azurerm_lb_probe
中的for_each
循环似乎使用了与azurerm_lb.lb-test
中的键不匹配的键。for_each
中使用的键必须与您引用的资源中的键完全匹配。azurerm_lb.lb-test[each.key].id
可能不正确。为了克服这个问题,我尝试了一个符合要求的地形配置。
我的Terraform配置:
字符串
variable.tf:
型
terrafrom.tfvars:
型
输出:
的数据
的
的