使用Terraform count元参数为Azure VM分配公网IP时报错如何解决
错误原因
- 资源引用类型写错:你要引用的是
azurerm_public_ip类型的公网IP资源,代码里错写为azurerm_network_interface - 插值表达式被错误加了引号:Terraform 0.12+版本中直接写资源引用表达式即可,不需要额外加双引号,加引号会把表达式内容当作普通字符串传递,无法被识别为有效的Azure资源ID
- 索引匹配错误:公网IP资源的count索引从0开始,和网卡的count索引一一对应,不需要额外加1,加1会出现索引越界问题(两个资源count都是2的情况下,最大索引为1,加1会尝试读取不存在的索引2的资源)
修正后的代码
# 创建公网IP resource "azurerm_public_ip" "myterraformpublicip" { count = 2 name = "myPublicIP-${count.index + 1}" location = "westeurope" resource_group_name = azurerm_resource_group.myterraformgroup.name allocation_method = "Dynamic" } # 创建网卡 resource "azurerm_network_interface" "myterraformnic" { count = 2 name = "myNIC-${count.index + 1}" location = "westeurope" resource_group_name = azurerm_resource_group.myterraformgroup.name ip_configuration { name = "myNicConfiguration" subnet_id = azurerm_subnet.myterraformsubnet.id private_ip_address_allocation = "Dynamic" # 修正后的公网IP引用写法 public_ip_address_id = azurerm_public_ip.myterraformpublicip[count.index].id } }
验证方式
修正后执行terraform plan,不会再出现资源ID解析错误,公网IP会和对应索引的网卡完成绑定。
内容的提问来源于stack exchange,提问作者Pav B
相关产品推荐
相关产品推荐

