terraform - 使用计数元参数将公共 IP 的 terraform 分配给 VM
问题描述
我正在尝试构建一个基于计数构建 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 无效
解决方案
您可以使用以下内容满足您的要求:
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
}
}
输出:
推荐阅读
- sql - PostgreSQL:基于连接列从另一个表更新目标表
- java - 在这种情况下如何防止 ArrayIndexOutOfBoundsException?
- apache - 连接到端口 8080 的 Apache 问题
- c++ - c++ 如何将 min() 和 max() 作为构造函数参数传递?
- android - 将 snapchat SDK 添加到 android 项目会导致检测测试失败并显示“未找到测试”
- javascript - 无法将动作创建者导出到组件 mapDispatchToProps 方法
- html - 在 HTML 表格列上添加链接
- flutter - 更改 TextField 颤动的选定文本颜色
- angularjs - 如何将 AngularJs 与 Django 集成
- java - Spring Boot 拒绝启动,AbstractRepositoryConfigurationSourceSupport 的问题