es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Crear un recurso dinámico de Terraform.

Todos los ejemplos de terraform que he encontrado para for_each y dynamic están anidados dentro de un recurso. Quiero crear una lista dinámica de recursos a partir de una variable de entrada de tipo ‘set’.

Por ejemplo, ‘azurerm_mssql_firewall_rule’ es un recurso discreto, por lo que para tener varias reglas de firewall, necesitaría algo como lo siguiente:

Módulo principal:

module "AzureSqlServer" {
    allowedIPs = local.azureSqlAllowedIPs
}

variable "azureSQLAllowedIPs" {
    type = map(object({
        name = string
        ipAddress = string
    }))
}

Módulo hijo:

resource "azurerm_mssql_firewall_rule" "azureSQLFirewall"{
    for_each var.azureSQLAllowedIPs
    name             = each.value["name"]
    server_id        = azurerm_mssql_server.azureSqlServer.id
    start_ip_address = each.value["ipAddress"]
    end_ip_address   = each.value["ipAddress"]
}

¿Existe alguna forma de utilizar ‘dynamic’ fuera del bloque?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, puede usar el bloque dinámico fuera de un bloque de recurso para crear múltiples recursos con variables de entrada dinámicas. Aquí hay un ejemplo:

    module "AzureSqlServer" {
        allowed_ips = local.azure_sql_allowed_ips
    }
    
    variable "azure_sql_allowed_ips" {
        type = set(object({
            name = string
            ip_address = string
        }))
    }
    
    dynamic "azurerm_mssql_firewall_rule" {
        for_each = var.azure_sql_allowed_ips
        content {
            name             = azurerm_mssql_firewall_rule.value.name
            server_id        = module.AzureSqlServer.azure_sql_server_id
            start_ip_address = azurerm_mssql_firewall_rule.value.ip_address
            end_ip_address   = azurerm_mssql_firewall_rule.value.ip_address
        }
    }
    

    En este ejemplo, se utiliza el bloque dinámico para generar múltiples instancias del recurso azurerm_mssql_firewall_rule basado en las variables de entrada del módulo. El argumento for_each se utiliza para iterar sobre el conjunto de direcciones IP permitidas, y el bloque content define las propiedades de cada regla de firewall basada en las variables de entrada. Tenga en cuenta que la variable module.AzureSqlServer.azure_sql_server_id se utiliza para hacer referencia al recurso principal en este ejemplo.

Comments are closed.