【问题标题】:Unable to set dynamic IP to Azure Virtual machines by terraform无法通过 terraform 为 Azure 虚拟机设置动态 IP
【发布时间】:2019-07-17 11:06:42
【问题描述】:

不确定哪里出了问题,但我无法使以下代码正常工作。

目标:创建两个(或更多)具有公共 IP 的虚拟机。

问题:遇到 terraform plan 报告错误,如错误代码块所示。

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'

想不通...任何帮助都会很棒。

【问题讨论】:

    标签: terraform azure-virtual-machine terraform-provider-azure


    【解决方案1】:

    您创建了 2 个公共 ip,而不是一个,但您尝试引用它,就像它是单个 ip 一样,但事实并非如此。它是一个列表。您需要获取个人公共 ip id,如下所示:

    "${element(azurerm_public_ip.tf-pubip-cluster-aos.*.id, count.index)}"
    

    【讨论】:

    • 谢谢@4c74356b41 :) 那是我的错误,我以前用过它,但我不知道它的真正作用是什么?请问,.*.id,count.index 到底是做什么的?
    • 从 id 列表中获取元素编号 x。您可以阅读有关元素功能的文档
    • 表达式“resource_name.*.id”中的*称为“splat”运算符。它返回由特定“resource_name”类型创建的所有资源的列表(数组),而无需提前定义列表变量。然后,像任何其他列表一样,您可以使用“element(, )”函数访问列表中的任何元素,该函数接收 2 个参数 1. 列表 2. 索引(列表中的编号位置)
    猜你喜欢
    • 2016-01-29
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    相关资源
    最近更新 更多