DEV Community

Vilmara
Vilmara

Posted on

Azure: Usando Resources ID com Terraform

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
}

Enter fullscreen mode Exit fullscreen mode

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}"
Enter fullscreen mode Exit fullscreen mode

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
}

Enter fullscreen mode Exit fullscreen mode

Top comments (0)