如何使用 terraform 在 Azure 中将静态私有 IP 设置为 NIC?

如何使用 terraform 在 Azure 中将静态私有 IP 设置为 NIC?

我正在使用 terraform 脚本在 Azure 中创建 NIC。默认情况下,它会为 NIC 分配动态私有 IP。如果我选​​择,private_ip_address_allocation = "Static"那么我必须传递静态 IP,而且管理所有 IP 信息非常困难。

我曾尝试使用如下方法 -Terraform-在 Azure 上配置静态 IP 地址

resource "azurerm_network_interface" "myterraformnic1" {
  count               = "${var.my_count}"
   name                      = "myNIC1"
    location                  = "eastus"
    resource_group_name       = "${azurerm_resource_group.myterraformgroup.name}"
    network_security_group_id = "${azurerm_network_security_group.myterraformnsg.id}"

    ip_configuration {
        name                          = "myNicConfiguration1"
        subnet_id                     = "${azurerm_subnet.myterraformsubnet.id}"
        private_ip_address_allocation = "static"
        private_ip_address            = "${cidrhost("10.0.1.0/24",  4+count.index)}"

    }

    tags = {
        environment = "Terraform Demo1"
    }
}

它适用于 1 个 NIC,但我已经为 20 个 NIC 分配了静态 IP,因此无法获取 IP 并设置可用的静态 IP。

我如何自动将私有 IP 设置为静止的在 Terraform 代码本身中?

答案1

不幸的是,这个问题没有简单的解决办法。如果你想要一个具有静态内部 IP 的 NIC,那么 Azure 希望你告诉它你想使用哪个 IP,它不会帮你挑刺。如果你看看这样做的例子使用 ARM 模板,他们作弊并首先将 IP 设置为动态,因此 Azure 生成一个 IP,然后将模式更改为静态。

因此在 Terraform 中,您需要做类似的事情,首先创建具有动态 IP 的 NIC,然后第二次创建相同的 NIC,但这次将其设为静态。

另一种方法是使用cidr子网在 Terraform 中使用 符号来生成子网中的有效 IP 地址。这样可以,但问题是,除非您使用 Terraform 创建了所有子网中的资源并确保每次都增加 IP,否则您无法保证此 IP 未被子网中的其他资源使用。

答案2

因此,这似乎是对 Azure 中私有 IP 的“动态”含义的误解。在 Azure 中创建具有“动态”私有 IP 的 NIC 意味着在创建接口时分配 IP,并且仅在删除接口时释放 IP。

这意味着它的行为与“静态”接口完全一样。

唯一的区别是“静态”接口有一个用户分配的(如输入参数中)IP,而“动态”接口则自动从子网中分配一个免费 IP。我已发送 PR 来更新 tf 文档https://github.com/hashicorp/terraform-provider-azurerm/pull/15264

https://github.com/Azure/azure-quickstart-templates/issues/12159

为了让大家百分百清楚,这确实意味着“动态”IP 永远不会改变,除非您删除 ipconfig 资源。它不会在虚拟机重新分配时改变,也不会在虚拟机崩溃并在另一台主机上启动时改变。

相关内容