Quando estamos provisionando a infraestrutura Azure com o terraform nos deparamos com cenários que precisamos passar o resource id de determinados recursos. Existem algumas formas de obter o resource Id
Exemplo:
resource "azurerm_subnet_network_security_group_association" "example" {
subnet_id = azurerm_subnet.example.id
network_security_group_id = azurerm_network_security_group.example.id
}
Datasource
Em casos que utilizamos multi repo para declaração da infraestrutura, você poderia utilizar o data source, ele é fornecido pelo provider para coletar a informação e passar no argumento subnet_id. Também, é possível inseri-lo no output e buscar usando o data source do remote state.
Resource ID
Conforme sua infraestrutura vai crescendo e você possui diferentes resources e precisa passar os ids, vai ficando complexo e em alguns casos obtém erro de cycle por estar utilizando muitos datasources combinados com for_each (que foi o meu caso).
Uma solução que usei e achei que ajudou bastante e reduziu a quantidade de erros dis códigos que estávamos declarando, foi montar o resource id de acordo com a minha necessidade.
Resource Id de uma subnet
subnet_id = "/subscriptions/${local.subscriptionid}/resourceGroups/${local.rg}/providers/Microsoft.Network/virtualNetworks/${local.vnet}/subnets/${local.subnet_name}"
Nesse exemplo o path do resource id é padrão, as mudanças envolvem subscriptionId, resource group, virtual network e nome da subnet. Os valores são declarados via variável local e o path é montado de acordo com o ambiente de aplicação.
Exemplo completo
#main.tf
locals {
# Variáveis do resource id
subscriptionid = "3120-3120-3120-3120-312031203120"
rg = "rg-test"
vnet = "vnet-test"
subnet_name = "snet-test"
nsg_name = "nsg-test"
# Resources IDs
subnet_id = "/subscriptions/${local.subscriptionid}/resourceGroups/${local.rg}/providers/Microsoft.Network/virtualNetworks/${local.vnet}/subnets/${local.subnet_name}"
}
sg_id = "/subscriptions/${local.subscriptionid}/resourceGroups/${local.rg}/providers/Microsoft.Network/networkSecurityGroups/${local.nsg_name}
# Declaração do recurso
resource "azurerm_subnet_network_security_group_association" "snet_test" {
subnet_id = local.subnet_id
network_security_group_id = local.sg_id azurerm_network_security_group.example.id
}
Top comments (0)