#terraform #terraform-provider-aws #terraform0.12
#terraform #terraform-поставщик-aws #terraform0.12
Вопрос:
Просто пытаюсь создать пользователей IAM с дополнительными тегами:
resource "aws_iam_user" "root" {
for_each = var.iam_users_root
name = each.key
tags = lookup(each.value, "tags", {})
}
Переменная:
variable "iam_users_root" {
type = map(any)
default = {}
}
tfvars:
iam_users_root = {
"usr1": {},
"usr2": {"tags": {"key": "value"}},
}
Однако terraform
выдает ошибку:
Error: Invalid function argument
on iam_users.tf line 4, in resource "aws_iam_user" "root":
4: tags = lookup(each.value, "tags", {})
Invalid value for "default" parameter: the default value must have the same
type as the map elements.
Интересно, что если у всех пользователей нет тегов, то terraform
не жалуется:
iam_users_root = {
"usr1": {},
"usr2": {},
}
Есть идеи?
КСТАТИ:
> terraform --version
Terraform v0.14.2
Комментарии:
1. Я не получаю сообщение об ошибке с этим, но я должен был догадаться о том, как вы определили переменную
iam_users_root
. Может быть, вы могли бы опубликовать воспроизводимый пример?2. @MarkM Смотрите редактирование, теперь есть все данные, необходимые для воспроизведения.
3. Похоже, это, вероятно, ошибка , по крайней мере, в GitHub есть аналогичная открытая проблема.
Ответ №1:
Сегодня я столкнулся с той же проблемой, и после некоторого быстрого поиска я обнаружил, что лучшим (и фактически моим выходом из этого) было указать конкретные типы моих переменных вместо того, чтобы позволять Terraform пытаться это выяснить (и потерпеть неудачу в процессе). Позвольте мне объясниться:
Его довольно удобно использовать map(any)
в качестве типа переменной, это приводит к ситуациям, когда Terraform не может определить эти типы.
Для нас, людей, и "usr1": {}
то, и "usr2": {"tags": {"key": "value"}}
другое идеально вписывается в эту map(any)
категорию, поскольку имеет смысл, что любая карта может быть пустой или нет. Однако для Terraform это будет выглядеть так:
"usr1": {} = map
"usr2": {"tags": {"key": "value"}} = map(object({key: string}))
В результате чего Terraform отправляет вам это сообщение об ошибке. Мне кажется, что, хотя «возможно» иметь any
определенную гибкость, желательно и ожидается, что вы будете максимально конкретны в отношении типов, которые вы собираетесь использовать. Если вы хотите прочитать немного больше по этому вопросу, вы можете проверить как ссылку на ошибку в предыдущих ответах, так и эту проблему. В обоих случаях присутствовал один и тот же парень, что делает его последовательным в решении проблемы специфичности типа.