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

AWS Security LIVE!

Join us for AWS Security LIVE!

Discover the future of cloud security. Tune in live for trends, tips, and solutions from AWS and AWS Partners.

Learn More

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs