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.

Función de búsqueda de parámetros de base de datos RDS de Terraform.

El siguiente método Terraform lookup no funciona. Siempre muestra el valor predeterminado “immediate”.

 resource "aws_db_parameter_group" "postgres" {
  name   = var.db_parameter_group_name
  family = "postgres11"
}

dynamic "parameter" {
    for_each = var.db_parameters
    content {
      name         = parameter.value.name
      value        = parameter.value.value
      apply_method = lookup(parameter.value, "apply_method", null)
    }
  }
}

Por ejemplo: Este es el mapa de parámetros que estoy pasando

      parameters = [
    {
      name  = "rds.logical_replication"
      value = 1
    }
  ]

La salida es:

parameter {
      + apply_method = "immediate"
      + name         = "rds.logical_replication"
      + value        = "1"
    }

rds.logical_replication es un parámetro static y no se puede modificar durante la ejecución, requiere reiniciar la base de datos, por lo tanto, el valor esperado debería ser pending-reboot.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema con el método lookup proporcionado por Terraform es que siempre muestra el valor predeterminado “immediate” en lugar de “pending-reboot” como se esperaba para el parámetro rds.logical_replication. Esto se debe a que el método lookup solo verifica la existencia de la clave "apply_method" en el mapa de parámetros, pero no diferencia entre valores de cadena vacía y nulos.

    Para solucionar esto, el método lookup debe modificarse para verificar explícitamente un valor de cadena vacía y devolver "pending-reboot" en ese caso:

    apply_method = coalesce(lookup(parameter.value, "apply_method", null), "")
                    == "" ? "pending-reboot" : lookup(parameter.value, "apply_method", null)
    

    La función coalesce se utiliza aquí para devolver el primer valor no nulo y no vacío de los dos argumentos, y la comparación == "" verifica si el valor es una cadena vacía. Si se encuentra un valor no nulo y no vacío, se devuelve tal cual, y si el valor es explícitamente nulo o una cadena vacía, se devuelve "pending-reboot" como valor predeterminado.

Comments are closed.