Первый пример с format
не сработал, потому что format
ожидает, что все его аргументы будут единичными значениями, и выдает одно значение.
Как вы видели, функция formatlist
Это один из способов решения вашей проблемы: он создает список в качестве своего результата, и если какой-либо из его аргументов является списком, то он повторяет процесс форматирования один раз для каждого набора элементов с одинаковым индексом в списках.
Ваш второй пример не сработал, потому что вы поместили вызов в formatlist
в [ ... ]
, который составляет список. Becuse formatlist
возвращает сам список, поэтому результатом был список списков строк, а не просто список строк.
Мы можем заставить его работать, убрав лишние скобки:
resources = formatlist("arn:aws:rds-db:us-east-1:%s:dbuser:%s/%s", var.account_id, aws_db_instance.name.resource_id, var.usernames)
Еще один способ написать это - использовать выражение for
, которое позволит сделать повторение более явным в вашей конфигурации:
resources = [for u in var.usernames : "arn:aws:rds-db:us-east-1:${var.account_id}:dbuser:${aws_db_instance.name.resource_id}/${u}"]
Какой из них легче понять, так это Конечно, субъективно: подход formatlist
показывает строку формата заранее, но подразумевает, что мы повторяем на основе элементов var.usernames
. Подход с выражением for
выдвигает шаблон к концу строки, но делает повторение на основе var.usernames
более явным.