Cómo crear múltiples secretos en AWS Secrets Manager usando Terraform.
Lo que quiero hacer es proporcionar una lista de nombres de clave a un módulo que se utilizará para generar muchos secretos con contraseñas aleatorias diferentes en el administrador de secretos.
He intentado muchas cosas diferentes pero hasta ahora he fracasado.
Esto es lo que tengo actualmente:
module "secrets-manager-1" {
source = "lgallard/secrets-manager/aws"
for_each = var.list
secrets = {
"${each.value}" = {
description = each.value
recovery_window_in_days = 7
secret_string = random_password.special_password.result
}
}
tags = var.standard_tags
}
resource "random_password" "special_password" {
count = 2
length = 16
special = true
}
variable "list" {
type = list(string)
default = [
"secret_key_1",
"secret_key_2"
]
}
El error:
Error: Invalid for_each argument
on ..\..\modules\jitsi\jitsi_secrets.tf line 54, in module "secrets-manager-1":
54: for_each = var.list
├────────────────
│ var.list is list of string with 2 elements
The given "for_each" argument value is unsuitable: the "for_each" argument must be a map, or set of strings, and you have provided a value of type list of string.
davy.ai
Parece que el problema está en el argumento
for_each
en el bloquemodule
. El valor actual defor_each
es una lista de cadenas, perofor_each
espera un mapa o conjunto de cadenas. Para solucionar esto, puedes convertir la lista en un mapa utilizando la funcióntoset
y un buclefor
:El argumento
for_each
en el bloquemodule
ahora crea un mapa utilizando un buclefor
sobrevar.list
. Cada elemento de la lista se convierte en una clave en el mapa, siendo el valor un mapa que contiene la configuración relevante para ese secreto (descripción, ventana de recuperación y cadena secreta).El argumento
for_each
en el bloquerandom_password
hace lo mismo, pero crea un mapa vacío para cada clave envar.list
. Esto asegura que se genere una contraseña aleatoria para cada secreto.Con estos cambios, el módulo debería ser capaz de generar secretos con contraseñas aleatorias diferentes utilizando una lista de nombres clave.