我正在尝试在一个脚本和虚拟网络中创建具有多个安全规则的网络安全组,以及在一个脚本中创建五个子网。
为此,我参考了 azurerm_virtual_network和azurerm_subnet_network_security_group_association文档。
上述文档包含带有硬编码值的代码。但我想使用循环概念在虚拟网络内创建子网,在网络安全组内创建安全规则,然后将每个子网与网络安全组相关联。
在此先感谢您的帮助 !
我正在尝试在一个脚本和虚拟网络中创建具有多个安全规则的网络安全组,以及在一个脚本中创建五个子网。
为此,我参考了 azurerm_virtual_network和azurerm_subnet_network_security_group_association文档。
上述文档包含带有硬编码值的代码。但我想使用循环概念在虚拟网络内创建子网,在网络安全组内创建安全规则,然后将每个子网与网络安全组相关联。
在此先感谢您的帮助 !
为了“循环”,您可以使用该for_each = var.value
方法,而不是将值放在 Main.tf 文件中,您可以使用 .tfvars 文件循环遍历资源数。
由于这是相当先进的,你最好剖析/重用已经可用的东西。看看来自 Claranet 的 Azurerm 子网模块,可在 Terraform 网站上的模块页面上找到(还有很多东西需要探索!)。以下是在本地定义 nsgs、vnet 和子网的方式,一目了然:
locals {
network_security_group_names = ["nsg1", "nsg2", "nsg3"]
vnet_cidr = "10.0.1.0/24"
subnets = [
{
name = "subnet1"
cidr = ["10.0.1.0/26"]
service_endpoints = ["Microsoft.Storage", "Microsoft.KeyVault", "Microsoft.ServiceBus", "Microsoft.Web"]
nsg_name = local.network_security_group_names[0]
vnet_name = module.azure-network-vnet.virtual_network_name
},
{
name = "subnet2"
cidr = ["10.0.1.64/26"]
service_endpoints = ["Microsoft.Storage", "Microsoft.KeyVault", "Microsoft.ServiceBus", "Microsoft.Web"]
nsg_name = local.network_security_group_names[2]
vnet_name = module.azure-network-vnet.virtual_network_name
}
]
}