Terraform - недопустимая ошибка индекса с множественным счетом - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь настроить 2 Publi c 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 для назначения их двум машинам VM.

Когда я запускаю terraform plan, я получаю сообщение об ошибке:

enter image description here

Версия Terraform - "v0.12.3", а azure версия поставщика "v1.40.0"

Ответы [ 2 ]

1 голос
/ 17 января 2020

На самом деле, я думаю, что в коде Terraform, который вы указали в вопросе, все в порядке, и все у меня хорошо работает.

В ошибке также сказано:

The given key does not identity an element this collection value.

Вероятно, потому, что ваши публичные c IP-адреса не созданы до сетевого интерфейса. Это странно. Terraform упорядочит все ресурсы в правильной последовательности. Может быть, вы можете попробовать обновить версию Terraform. Я использовал самую новую версию:

Terraform v0.12.19
+ provider.azurerm v1.41.0

Или вы можете попробовать изменить код следующим образом:

public_ip_address_id    = "${element(azurerm_public_ip.example.*.id, count.index)}"
1 голос
/ 16 января 2020

Учитывая, что это Terraform 0.12, а не Terraform 0.11, как предполагает синтаксис вопроса, фактическая ошибка содержится в указанном c экспортируемом атрибуте. Чтобы получить доступ к IP-адресу, экспортируемому ресурсом azurerm_public_ip.example, нам нужно использовать экспортированный атрибут ip_address, а не id. Вот почему выдается ошибка для неверного ключа, хотя указанная ссылка c в ошибке действительно вводит в заблуждение.

Мы можем обновить ваш код, чтобы исправить это следующим образом:

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}"
}
...