#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. @Дуг рад, что это сработало для вас, терраформирование довольно жесткое, но как только вы сделаете несколько из них, это станет второй натурой