Невозможно установить динамический IP-адрес для виртуальных машин Azure с помощью terraform

Не знаю, где что-то идет не так, но я не могу заставить работать следующий код.

Цель: создать две (или более) виртуальные машины с общедоступным IP.

Проблема: застрял с ошибками, сообщающими план терраформирования, как указано в блоке кода ошибки.

Блок кода Terraform ниже:

resource "azurerm_public_ip" "tf-pubip-cluster-aos" {
    count                        = 2
    name                         = "${var.ax_base_hostname}-${count.index+1}-PUBIP"
    location                     = "${azurerm_resource_group.tf-rg-cluster-aos.location}"
    resource_group_name          = "${azurerm_resource_group.tf-rg-cluster-aos.name}"
    allocation_method            = "Dynamic"
}

resource "azurerm_network_interface" "tf-ni-cluster-aos" {
 count               = 2
 name                = "${var.ax_base_hostname}-${count.index+1}-NI"
 location            = "${azurerm_resource_group.tf-rg-cluster-aos.location}"
 resource_group_name = "${azurerm_resource_group.tf-rg-cluster-aos.name}"

ip_configuration {
    name                          = "${var.ax_base_hostname}-${count.index+1}-IP"
    subnet_id                     = "${data.azurerm_subnet.tf-sn-cluster-aos.id}"
    private_ip_address_allocation = "Dynamic"
    public_ip_address_id          = "${azurerm_public_ip.tf-pubip-cluster-aos.id}"
}
}
resource "azurerm_virtual_machine" "tf-vm-cluster-aos" {
  count                 = 2
  name                  = "${var.ax_base_hostname}-${count.index+1}"
  location            = "${azurerm_resource_group.tf-rg-cluster-aos.location}"
  resource_group_name = "${azurerm_resource_group.tf-rg-cluster-aos.name}"
  availability_set_id   = "${azurerm_availability_set.tf-as-cluster-aos.id}"
  network_interface_ids = ["${element(azurerm_network_interface.tf-ni-cluster-aos.*.id, count.index)}"]
  vm_size               = "${var.ax_vm_size}"

}

Сообщение об ошибке находится ниже:

Error running plan: 1 error(s) occurred:

    azurerm_network_interface.tf-ni-cluster-aos: 2 error(s) occurred:
    azurerm_network_interface.tf-ni-cluster-aos[0]: Resource 'azurerm_public_ip.tf-pubip-cluster-aos' not found for variable 'azurerm_public_ip.tf-pubip-cluster-aos.id'
    azurerm_network_interface.tf-ni-cluster-aos[1]: Resource 'azurerm_public_ip.tf-pubip-cluster-aos' not found for variable 'azurerm_public_ip.tf-pubip-cluster-aos.id'

Не могу понять ... Любая помощь будет отличной.


person learner    schedule 23.02.2019    source источник


Ответы (1)


вы создаете 2 общедоступных IP-адреса, а не один, но вы пытаетесь ссылаться на него, как на один IP-адрес, но это не так. это список. вам нужно получить индивидуальный общедоступный IP-адрес, примерно так:

"${element(azurerm_public_ip.tf-pubip-cluster-aos.*.id, count.index)}"
person 4c74356b41    schedule 23.02.2019
comment
Спасибо @ 4c74356b41 :) Это моя ошибка, я использовал его раньше, но не знаю, что он на самом деле делает? Могу я спросить, что на самом деле делает. *. Id, count.index? - person learner; 24.02.2019
comment
берет элемент номер x из списка идентификаторов. вы можете прочитать документацию о функции элемента - person 4c74356b41; 24.02.2019
comment
Символ * в выражении имя_ресурса. *. Id называется оператором splat. Он возвращает список (массив) всех ресурсов, созданных для определенного типа resource_name, без необходимости заранее определять переменную списка. Затем, как и в любом другом списке, вы можете получить доступ к любому элементу в списке с помощью функции element (‹LIST›, ‹INDEX›), которая принимает 2 параметра 1. Список 2. Индекс (пронумерованное место в списке) - person J00MZ; 25.02.2019