Terraform does not make it easy to loop through subnet IDs. How can you add multiple subnet ids to the cosmos db azurerm resource virtual_network_rule block? I’m able to pass each subnet id, but this error shows up for all of them:
Can't access attributes on a primitive-typed value (string).
data.tf
#VNETs
data "azurerm_virtual_network" "vss-np-vnet" {
provider = azurerm.nonprod
name = var.np_vnet_name
resource_group_name = var.np_net_rg_name
}
#Subnets
data "azurerm_subnet" "np-subnets" {
provider = azurerm.nonprod
count = length(data.azurerm_virtual_network.vss-np-vnet.subnets)
name = data.azurerm_virtual_network.vss-np-vnet.subnets[count.index]
virtual_network_name = data.azurerm_virtual_network.vss-np-vnet.name
resource_group_name = data.azurerm_virtual_network.vss-np-vnet.resource_group_name
}
cosmos_db.tf
###############################################################################################
# Cosmos DB #
###############################################################################################
resource "azurerm_cosmosdb_account" "np-cosmos-db" {
provider = azurerm.nonprod
name = var.np_cosmos_db_name
location = var.ea2_location
resource_group_name = var.np_rg1_name
offer_type = "Standard"
kind = "GlobalDocumentDB"
is_virtual_network_filter_enabled = true
network_acl_bypass_for_azure_services = true
ip_range_filter = "104.42.195.92,40.76.54.131,52.176.6.30,52.169.50.45,52.187.184.26"
tags = merge(var.base_np_tags, { Componet = "Cosmos DB" })
capacity {
total_throughput_limit = 4000
}
consistency_policy {
consistency_level = "Session"
max_interval_in_seconds = 5
max_staleness_prefix = 100
}
backup {
type = "Periodic"
interval_in_minutes = 60
retention_in_hours = 72
storage_redundancy = "Local"
}
geo_location {
location = var.ea2_location
failover_priority = 0
}
analytical_storage {
schema_type = "WellDefined"
}
dynamic "virtual_network_rule" {
for_each = data.azurerm_subnet.np-subnets.*.id
content {
id = virtual_network_rule.value.id
ignore_missing_vnet_service_endpoint = true
}
}
}
Errors:
.
.
.
Error: Unsupported attribute
│
│ on cosmos_db.tf line 46, in resource "azurerm_cosmosdb_account" "np-cosmos-db":
│ 46: id = virtual_network_rule.value.id
│ ├────────────────
│ │ virtual_network_rule.value is "/subscriptions//resourceGroups/ACE-P-NETWORK-RGP-05/providers/Microsoft.Network/virtualNetworks/vnet_name/subnets/subnet_name"
│
│ Can't access attributes on a primitive-typed value (string).