Terraform-具有多个计数的无效索引错误

Terraform-具有多个计数的无效索引错误,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我正在尝试配置2个公共IP地址和2个网络接口。到目前为止,我写的是: resource "azurerm_public_ip" "example" { name = "test-pip${count.index}" count = 2 location = "${azurerm_resource_group.rc.location}" resource_group_name = "${azurerm_re

我正在尝试配置2个公共IP地址和2个网络接口。到目前为止,我写的是:

resource "azurerm_public_ip" "example" {
  name                    = "test-pip${count.index}"
  count = 2
  location                = "${azurerm_resource_group.rc.location}"
  resource_group_name     = "${azurerm_resource_group.rc.name}"
  allocation_method       = "Dynamic"
  idle_timeout_in_minutes = 30
}
output "public_ip_address" {
  value = "${azurerm_public_ip.example.*.id}"
}

resource "azurerm_network_interface" "main" {
  name                = "test${count.index}"
  count = 2
  location            = "${azurerm_resource_group.rc.location}"
  resource_group_name = "${azurerm_resource_group.rc.name}"

    ip_configuration {
    name                          = "testconfiguration1${count.index}"
    subnet_id                     = "${azurerm_subnet.internal.id}"
    private_ip_address_allocation = "Dynamic"
    public_ip_address_id          = "${azurerm_public_ip.example[count.index].id}"
  }
}
稍后我将使用这两个IP和NI将它们分配给2台VM机器

当我运行
terraform plan
时,我会收到一个错误,提示:


Terraform版本是
“v0.12.3”
,azure提供程序版本是
“v1.40.0”

,如果这是Terraform 0.12,而不是问题语法所暗示的Terraform 0.11,那么实际错误在特定的导出属性中。要访问由
azurerm\u public\u ip.example
资源导出的ip地址,我们需要使用
ip\u address
导出属性,而不是
id
。这就是为无效密钥引发错误的原因,尽管错误中的特定引用确实具有误导性

我们可以通过以下方式更新您的代码以修复此问题:

ip_configuration {
  name                          = "testconfiguration1${count.index}"
  subnet_id                     = "${azurerm_subnet.internal.id}"
  private_ip_address_allocation = "Dynamic"
  public_ip_address_id          = "${azurerm_public_ip.example[count.index].ip_address}"
}

事实上,我认为你在问题中提供的地形代码中没有任何错误,在我这方面,一切都很好

错误还说:

The given key does not identity an element this collection value.
这可能是因为您的公共IP没有在网络接口之前创建。真奇怪。Terraform将按正确的顺序排列所有资源。也许你可以尝试升级地形版本。我使用的是最新版本:

Terraform v0.12.19
+ provider.azurerm v1.41.0
或者,您可以尝试如下更改代码:

public_ip_address_id    = "${element(azurerm_public_ip.example.*.id, count.index)}"

谢谢你的回答。但是,我已经将“public\u ip\u address\u id”值更改为您建议的值,并且得到了完全相同的错误。我正在运行terraform版本“v0.12.3”,我的azure提供程序版本是“v1.40.0”@Benjamin Ok如果您使用的是0.12,那么您使用的特定语法对于访问导出的属性是有效的,但您应该知道您通常使用的是0.11语法,可能需要更新。@Benjamin更新了答案以反映问题,因为这是0.12而不是0.11。根据git问题页面,这似乎是一个已知问题。该对话中提供的解决方案将“Public_IP_Address”作为输入变量,但是,在我的例子中,我使用terraform生成IP_地址。所以我不知道如何在我的问题上采用这种解决方案@Benjamin更新到最新的Terraform 0.12有帮助吗?还有更新吗?你用答案解决问题了吗?如果是,请接受。错误是误导性的,你是对的,当我将terraform版本从“v0.12.3”升级到“v0.12.19”这是最新的稳定版本时,一切都神奇地工作了。