【问题标题】:terraform assignment of public IPs to VM's using count meta-argument使用计数元参数将公共 IP 的 terraform 分配给 VM
【发布时间】:2021-09-17 22:48:27
【问题描述】:

我正在尝试构建一个基于计数构建 VM 的脚本。我已经设法让它大部分工作,但我失败的部分是将创建的公共 Ips 分配给 Nic。 公共 ips 已创建但分配失败,我不确定如何正确解析。代码和错误。

# Create public IPs
resource "azurerm_public_ip" "myterraformpublicip" {
   count = 2
   name                         = "myPublicIP-${count.index + 1}"
   location                     = "westeurope"
   resource_group_name          = azurerm_resource_group.myterraformgroup.name
   allocation_method            = "Dynamic"
}

# Create network interface
resource "azurerm_network_interface" "myterraformnic" {
    count = 2
    name                      = "myNIC-${count.index + 1}"
    location                  = "westeurope"
    resource_group_name       = azurerm_resource_group.myterraformgroup.name

    ip_configuration {
      name                          = "myNicConfiguration"
      subnet_id                     = azurerm_subnet.myterraformsubnet.id
      private_ip_address_allocation = "Dynamic"
      public_ip_address_id          = "azurerm_network_interface.myterraformpublicip.[count.index + 1].id"
    }
}
 

#运行计划时的错误。

错误:无法将“ip_configuration.0.public_ip_address_id”解析为 资源 ID:无法解析 Azure ID:解析 “元素(azurerm_network_interface.myterraformpublicip.*.id, count.index + 1)": 请求的 URI 无效

【问题讨论】:

  • 错误消息是针对一行代码element(azurerm_network_interface.myterraformpublicip.*.id, count.index + 1),它没有出现在您迄今为止发布的代码中的任何位置。

标签: terraform terraform-provider-azure


【解决方案1】:

您可以使用以下内容满足您的要求:

provider "azurerm" {
    features{}
}

data "azurerm_resource_group" "test" {
  name = "yourresourcegroup"
}


resource "azurerm_virtual_network" "vnet" {
  name                = "ansuman--vnet"
  location            = data.azurerm_resource_group.test.location
  resource_group_name = data.azurerm_resource_group.test.name
  address_space       = ["10.0.0.0/16"]

}
variable "subnet_prefix" {
  type = list
  default = [
    {
      ip      = "10.0.1.0/24"
      name     = "subnet-1"
    },
    {
      ip      = "10.0.2.0/24"
      name     = "subnet-2"
    }
   ]
}

resource "azurerm_subnet" "test_subnet" {
    name = "${lookup(element(var.subnet_prefix, count.index), "name")}"
    count = "${length(var.subnet_prefix)}"
    resource_group_name = data.azurerm_resource_group.test.name
    virtual_network_name = azurerm_virtual_network.vnet.name
    address_prefix = "${lookup(element(var.subnet_prefix, count.index), "ip")}"
}

resource "azurerm_public_ip" "myterraformpublicip" {
   count = 2
   name                         = "myPublicIP-${count.index + 1}"
   location                     = data.azurerm_resource_group.test.location
   resource_group_name          = data.azurerm_resource_group.test.name
   allocation_method            = "Dynamic"
}
# Create network interface
resource "azurerm_network_interface" "myterraformnic" {
    count = 2
    name                      = "myNIC-${count.index + 1}"
    location                  = data.azurerm_resource_group.test.location
    resource_group_name       = data.azurerm_resource_group.test.name

    ip_configuration {
      name                          = "myNicConfiguration"
      subnet_id                     = azurerm_subnet.test_subnet[count.index].id
      private_ip_address_allocation = "Dynamic"
      public_ip_address_id          = azurerm_public_ip.myterraformpublicip[count.index].id
    }
}

输出:

【讨论】:

  • 很高兴能帮助到@PavB!
  • 快速提问。在此脚本中添加额外存储的最佳方法是什么
  • 您好@PavB,您可以创建另一个问题,添加您正在使用的详细信息以及您尝试过的内容,很乐意看看。
猜你喜欢
  • 1970-01-01
  • 2018-09-11
  • 2021-05-02
  • 2018-07-31
  • 2022-11-03
  • 2017-05-07
  • 2018-01-24
  • 2021-12-21
  • 2021-05-02
相关资源
最近更新 更多