如何使用Terraform将现有的多个Azure策略分配给多个资源



我正在使用带有AZURE的开源Terraform,我被困在以下任务中。请告知您是否有更好的解决方案。

我在列表中有Azure策略的ID

variable "existing_policy_ids" {
"policy-id1",
"policy-id2",
"policy-id3",
......
}

我需要将所有这些策略动态分配给Azure中的资源组。资源组具有如下计数元参数:

resource "azurerm_resource_group" "my-rg" {
count    = var.environment == "dev" ? 1 : 2
name     = "my-rg-${count.index}"
location = var.rg_location
}

现在的问题是-策略分配应该是什么样子,因为有多个策略(10(,而资源组可以是1或2,具体取决于环境。意味着我不能使用标准的计数方式或for_each?!

resource "azurerm_resource_group_policy_assignment" "assign-policy" {
count        = length(azurerm_resource_group.my-rg.id)
name         = "${azurerm_resource_group.my-rg[count.index].name}"
policy_definition_id = var.existing_policy_id[count.index]  # ISSUE
resource_group_id = azurerm_resource_group.my-rg[count.index].id   # ISSUE
}

现在政策分配块的最后两行是我被卡住的地方。如果我使用count.index,那么计数器将只运行一次或最多运行2次。而政策是超过2。

现在,我如何编码每个创建的resource_group都被分配给变量existing_policy_ids.中的所有策略

提前感谢大家!

您已经迭代了existing_policy_idsazurerm_resource_group的数量的累积列表。在您的情况下,可以使用setproduct。

locals {
cummulative_list = setproduct(
range(length(azurerm_resource_group.my-rg)), 
var.existing_policy_ids)  
}
resource "azurerm_resource_group_policy_assignment" "assign-policy" {
count     = length(local.cummulative_list)
name      = azurerm_resource_group.my-rg[local.cummulative_list[count.index][0]].name
policy_definition_id = local.cummulative_list[count.index][1] 
resource_group_id = azurerm_resource_group.my-rg[local.cummulative_list[count.index][0]].id   
}

最新更新