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.

Argumento de módulo Terraform con valor nulo.

He creado un módulo de tabla de rutas en terraform con el id de la puerta de enlace a internet como argumento, pero quiero crear otra tabla de rutas para la instancia de NAT de la subred privada, pero el módulo de la tabla de rutas no tiene el argumento de id de la instancia.
Quiero usar el mismo módulo de tabla de rutas que puede tener el id de la puerta de enlace a internet si es para la puerta de enlace a internet o puede tener el id de la instancia si es para la instancia de NAT.
¿Puedo dar el valor “null” para cualquier argumento si no es requerido? Esto significa que quiero proporcionar 2 argumentos, uno es “id de la puerta de enlace” y otro es “id de la instancia” y quiero enviar el valor como “null” si alguno de ellos es requerido respectivamente.
No he ejecutado el código a continuación, pero planeo escribir un código como el siguiente. ¿Podrías sugerirme la manera correcta de manejar este escenario?

resource "aws_route_table" "rtable" {
    vpc_id = "${var.vpc_id}"

    route {
    cidr_block = "${var.igw_cidr_block}"
    gateway_id = "${var.igw_id}"
    instance_id = null
    }

    tags = {
       Name = "${var.name}"
    }
}
Tags:  

Answer

  1. Avatar for davy.ai

    Hay varias formas en las que puedes abordar este problema. Una opción es crear dos módulos separados: uno para el “internet_gateway_id” y otro para “NAT_Instance”. Esto te permitiría tener argumentos separados para cada tipo de tabla de enrutamiento.

    Otra opción es utilizar expresiones condicionales (operadores ternarios) para determinar qué argumento usar según una variable o parámetro. Por ejemplo:

    resource "aws_route_table" "rtable" {
      vpc_id = var.vpc_id
    
      route {
        cidr_block  = var.igw_cidr_block
        gateway_id = var.is_public ? var.igw_id : null
        instance_id = var.is_public ? null : var.nat_instance_id
      }
    
      tags = {
        Name = var.name
      }
    }
    

    En este ejemplo, la variable is_public se utiliza para determinar si la tabla de enrutamiento es para una subred pública o privada. Si es pública, se establece el argumento gateway_id en la variable igw_id y se establece el argumento instance_id en null. Si es privada, se establece el argumento gateway_id en null y se establece el argumento instance_id en nat_instance_id.

    Usar null como valor para un argumento es perfectamente válido en Terraform y puede ser útil en situaciones como esta en las que un argumento es opcional. Sin embargo, ten en cuenta que algunos recursos pueden requerir que ciertos argumentos no sean nulos para funcionar correctamente. Es importante consultar la documentación de cada recurso que estés utilizando para determinar si hay requisitos especiales para algún argumento.

Comments are closed.