Terraform (azurerm):在同一资源组中使用创建多个静态 IP?
Terraform (azurerm): Create multiple static IPs using in the same resource group?
使用 terraform 0.14 和 azurerm 提供程序 2.52.0。
我需要在同一资源组中创建 10+ public/static 个 IP。
我创建了一个可以创建一个 IP 的模块并测试了它是否有效:
modules/public-ip/main.tf
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "ip-rg" {
name = var.resource_group
location = var.location
}
resource azurerm_public_ip "public_ip" {
name = var.public_ip_name
resource_group_name = azurerm_resource_group.ip-rg.name
location = azurerm_resource_group.ip-rg.location
allocation_method = "Static"
ip_version = "IPv4"
sku = "standard"
}
configurations/dev/main.tf
terraform {
backend "azurerm" {
key = "dev.tfstate"
}
}
module "public_ip_01" {
source = "../modules/public-ip/"
resource_group = "public_ip_rg"
location = "westeurope"
public_ip_name="my_public_001"
}
module "public_ip_02" {
source = "../modules/public-ip/"
resource_group = "public_ip_rg"
location = "westeurope"
public_ip_name="my_public_002"
}
.....
但这很快就会变得混乱 - 即使我使用相同的模块,也会有 10 多个这样的块。
我想我缺少在 terraform 中执行此操作的更好方法?
您可以在模块中使用for_each and count meta_arguments。特别是在Terraform 0.13中添加了对for_each
和count
的模块支持,之前的版本只能与资源一起使用。
例如,您可以使用一个 for_each
参数,其值为该模块块中的映射或一组字符串,Terraform 将为该映射或集合的每个成员创建一个实例。
要像这样创建两个 public IP 地址:
provider "azurerm" {
features {}
}
module "public_ip_01" {
for_each = toset(["my_public_001","my_public_002"])
source = "../modules/public-ip/"
resource_group = "public_ip_rg"
location = "westeurope"
public_ip_name= each.key
}
使用 terraform 0.14 和 azurerm 提供程序 2.52.0。
我需要在同一资源组中创建 10+ public/static 个 IP。
我创建了一个可以创建一个 IP 的模块并测试了它是否有效:
modules/public-ip/main.tf
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "ip-rg" {
name = var.resource_group
location = var.location
}
resource azurerm_public_ip "public_ip" {
name = var.public_ip_name
resource_group_name = azurerm_resource_group.ip-rg.name
location = azurerm_resource_group.ip-rg.location
allocation_method = "Static"
ip_version = "IPv4"
sku = "standard"
}
configurations/dev/main.tf
terraform {
backend "azurerm" {
key = "dev.tfstate"
}
}
module "public_ip_01" {
source = "../modules/public-ip/"
resource_group = "public_ip_rg"
location = "westeurope"
public_ip_name="my_public_001"
}
module "public_ip_02" {
source = "../modules/public-ip/"
resource_group = "public_ip_rg"
location = "westeurope"
public_ip_name="my_public_002"
}
.....
但这很快就会变得混乱 - 即使我使用相同的模块,也会有 10 多个这样的块。
我想我缺少在 terraform 中执行此操作的更好方法?
您可以在模块中使用for_each and count meta_arguments。特别是在Terraform 0.13中添加了对for_each
和count
的模块支持,之前的版本只能与资源一起使用。
例如,您可以使用一个 for_each
参数,其值为该模块块中的映射或一组字符串,Terraform 将为该映射或集合的每个成员创建一个实例。
要像这样创建两个 public IP 地址:
provider "azurerm" {
features {}
}
module "public_ip_01" {
for_each = toset(["my_public_001","my_public_002"])
source = "../modules/public-ip/"
resource_group = "public_ip_rg"
location = "westeurope"
public_ip_name= each.key
}