Терраформируйте строку передачи в виде списка, используя для выражения

#amazon-web-services #terraform

#amazon-веб-сервисы #терраформирование

Вопрос:

Я пытаюсь создать трех пользователей redis elasticache, используя случайно сгенерированный пароль. У каждого из этих пользователей ES Redis будет другое имя, поэтому я использую for_each его для установки имени пользователя на основе a service_name . Это отлично работает! Проблема, с которой я сталкиваюсь, заключается в использовании случайного пароля для этого пользователя. Я использую генератор случайных паролей с количеством по 3 одному для каждого пользователя. Я не могу передать пароль в виде списка и сталкиваюсь с этой ошибкой: Inappropriate value for attribute "passwords": set of string required. любая помощь будет признательна.

 resource "random_password" "my_passwords" {  count = 3  length = 19  special = true  override_special = "_%@" }  resource "aws_elasticache_user" "my-users" {  for_each = toset(var.my_service_names)  user_id = "${each.key}-${var.env}"  user_name = "${each.key}-${var.env}"  access_string = "on ~*  @all"  engine = "REDIS"  passwords = "[for r random_password.my_passwords : r.result]"  

Комментарии:

1. У вас есть опечатка в значении passwords аргумента. Вы приводите свое for выражение внутри list конструктора в виде буквальной строки из-за вашей опечатки с " . Удалите опечатку " из значения и сообщите нам, что произойдет дальше.

2. Я исправил это — все та же проблема.

Ответ №1:

Вместо жесткого кодирования суммы с подсчетом random_password я буду использовать то же самое для цикла…

Смотрите код ниже:

 resource "random_password" "pws" {  for_each = toset(var.my_service_names)  length = 19  special = true  override_special = "_%@" }  resource "aws_elasticache_user" "my-users" {  for_each = toset(var.my_service_names)  user_id = "${each.key}-${var.env}"  user_name = "${each.key}-${var.env}"  access_string = "on ~*  @all"  engine = "REDIS"  passwords = [ random_password.pws[each.key].result ] }  

Таким образом, ключи одинаковы на обоих ресурсах, и мы можем получить к ним доступ с любого ресурса, который зацикливается на том my_service_names же, что и я там:
random_password.pws[each.key].result

Комментарии:

1. Сработало как заклинание! Огромное спасибо.

2. @Дуг рад, что это сработало для вас, терраформирование довольно жесткое, но как только вы сделаете несколько из них, это станет второй натурой