Если есть ситуации, когда count
для одного ресурса может быть нулевым, то в любом другом месте, где вы ссылаетесь на этот ресурс, вы должны указать Terraform, как обрабатывать случай, когда другой объект не существует.
В этом случае кажется, что вам вообще не понадобится ресурс azurerm_subnet_network_security_group_association
, если группа сетевой безопасности не существует, и поэтому самый простой ответ - применить тот же count
к этому другому ресурсу:
resource "azurerm_network_security_group" "ProdNSG" {
count = var.DeployNSG ? 1 : 0
# ...other arguments as you already have set...
}
resource "azurerm_subnet_network_security_group_association" "ServersNSGAssociation" {
# Create one of this resource only if there is one of the other resource.
count = length(azurerm_network_security_group.ProdNSG)
subnet_id = azurerm_subnet.ServersSubnet.id
network_security_group_id = azurerm_network_security_group.ProdNSG[count.index].id
}
Обратите внимание, что теперь мы можем использовать count.index
при обращении к azurerm_network_security_group.ProdNSG
, поскольку azurerm_subnet_network_security_group_association.ServersNSGAssociation
имеет то же значение count
, что и azurerm_network_security_group.ProdNSG
.Когда существует один NSG, count.index
будет 0 и, таким образом, он выберет первый (и единственный) экземпляр NSG.Если не существует NSG, то и вложения NSG тоже не будут, поэтому count.index
никогда не будет оцениваться.