Terraform兼容性错误-未使用count.index

Terraform兼容性错误-未使用count.index,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我使用的是0.12地形,脚本是用0.11地形编写的 代码块是: resource "azurerm_virtual_machine" "name_av_set" { count = "${var.node_count}" #count = "$length(var.node_count)" name = "${var.resource_name_prefix}-pool-${var.name}-${

我使用的是0.12地形,脚本是用0.11地形编写的

代码块是:

resource "azurerm_virtual_machine" "name_av_set" {
  count               = "${var.node_count}"
  #count               = "$length(var.node_count)"
  name                = "${var.resource_name_prefix}-pool-${var.name}-${format("%03d", count.index + 1)}-vm"

  availability_set_id = "${azurerm_availability_set.name_av_set.id}"
尝试运行Terraform脚本时,出现错误

错误:

Error: Missing resource instance key

  on main.tf, in resource "azurerm_virtual_machine" 
  58:   availability_set_id = "${azurerm_availability_set.name_av_set.id}"

Because azurerm_availability_set.name_av_set has "count" set, its
attributes must be accessed on specific instances.

For example, to correlate with indices of a referring resource, use:
    azurerm_availability_set.name_av_set[count.index]

如何更改以消除此错误?

因为您使用计数定义了resource azurerm\u availability\u set.name\u av\u set,它现在被视为对象列表。
因此,您不能在azurerm\u virtual\u machine.name\u av\u set.id中设置azurerm\u availability\u set.name\u av\u set.id或索引。正如错误消息中所建议的,您可以将
[count.index]
部分添加到引用中,只要这两个资源都有
count=var.node\u count

  availability_set_id = azurerm_availability_set.name_av_set[count.index].id
如果您遵循
terraform 0.12升级
工具可以自动处理此类重写。在这种情况下,升级工具将选择不同的解决方案,因为它是更保守的选择:

  availability_set_id = azurerm_availability_set.name_av_set[0].id
硬编码索引
0
更适合表达式的Terraform 0.11行为,因为在Terraform 0.11
azurerm\u availability\u set.name\u av\u set.id
中,意味着获取
azurerm\u availability\u set.name\u av\u set的第一个实例的
id


选择哪一个取决于您是否打算始终选择第一个可用性集,或者是否要将每个虚拟机与不同的可用性集关联。

此错误也会在0.11 Terraform上抛出。此答案值得更多的关注,你解决了一个问题,我一直在努力,因为不同的日子,谢谢!