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
.
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ámetrords.logical_replication
. Esto se debe a que el métodolookup
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: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.