如何使用terraform中的循环概念在虚拟网络中创建子网和在nsg中创建安全规则



我试图在一个脚本中创建具有多个安全规则的网络安全组,并在一个脚本中创建虚拟网络以及五个子网。

为此,我参考了azurerm_virtual_network和azurerm_subnet_network_security_group_association文档。

上面的文档包含带有硬编码值的代码。但是我想用循环的概念在虚拟网络内部创建子网,在网络安全组内部创建安全规则,然后将每个子网与网络安全组关联。

提前感谢您的帮助!

为了"循环";您可以使用for_each = var.value方法,而不是将值放在Main中。如果使用.tfvars文件,则可以使用.tfvars文件来循环遍历# of资源。

由于这是相当高级的,您最好剖析/重用已经可用的东西。看看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
}
]
}

最新更新