[英]Terraform on Azure - Deploy multiple subnet
我正在嘗試實現一個 Terraform 腳本來創建多個子網。
resource "azurerm_subnet" "test_subnet" {
name = "testSUBNET"
resource_group_name = "${local.resource_group_name}"
virtual_network_name = "${azurerm_virtual_network.lab_vnet.name}"
address_prefix = "10.0.1.0/24"
}
有沒有辦法對變量執行 for-each 或循環以便同時創建它們?
您可以使用變量和計數索引來實現此目的,如下所示:
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 = "${local.resource_group_name}"
virtual_network_name = "${azurerm_virtual_network.lab_vnet.name}"
address_prefix = "${lookup(element(var.subnet_prefix, count.index), "ip")}"
}
新版本中還為每個人提供了預覽功能
如果您使用的是 Terraform 12,則可以使用for-each功能或count 功能來實現
如果您希望創建幾乎相同的資源,則應使用count 。
for-each應該用於根據不同的映射或一組值創建多個每個實例。
使用字符串列表和toset()
函數進行轉換是實現此目的的一種巧妙方法
variable "subnet_ids" {
type = list(string)
}
resource "aws_instance" "server" {
for_each = toset(var.subnet_ids)
ami = "ami-a1b2c3d4"
instance_type = "t2.micro"
subnet_id = each.key # note: each.key and each.value are the same for a set
tags = {
Name = "Server ${each.key}"
}
}
或者您可以通過使用以下內容來實現此目的:
resource "azurerm_resource_group" "rg" {
for_each = {
a_group = "eastus"
another_group = "westus2"
}
name = each.key
location = each.value
}
如果您希望使用 Terraform 11 實現此目的,則count
和variable
功能是除代碼重復之外的唯一方法。 (Rajat Arora 提到過)
我強烈建議使用 Terraform 12,因為在不久的將來,Terraform 11 的提供程序將不受支持,如果您現在可以免於重構,那么您應該這樣做!
我正在嘗試完成類似的事情。
variable "custom_role_list" {
type = list(object ({ service_principal_id = string, role = string }) )
}
當我嘗試從資源模塊設置它時
resource "azurerm_role_assignment" "ad_sp_role_assignment" {
scope = azurerm_container_registry.acr.id
for_each = var.custom_role_list
role_definition_name = each.value.role
principal_id = each.value.service_principal_id
}
本質上,我試圖將 azure 容器注冊表設置為與具有特定訪問角色的多個服務主體一起使用。
以下是 var 定義。
custom_role_list = [
{
service_principal_id = aserviceprincipal.id
role = "Contributor"
},
{
service_principal_id = bserviceprincipal.id
role = "Contributor"
}
]
當我執行它時,我收到以下錯誤。
Error: Invalid for_each argument
on ../modules/az-acr/main.tf line 46, in resource "azurerm_role_assignment" "ad_sp_role_assignment":
46: for_each = var.custom_role_list
The given "for_each" argument value is unsuitable: the "for_each" argument
must be a map, or set of strings, and you have provided a value of type list
of object.
請如果有人可以指導將非常有幫助。 謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.