Я пытаюсь реализовать вложенные циклы, используя новые функции Terraform 0.12, чтобы проходить через пользователей AWS IAM, к каждому из которых может быть прикреплена одна или несколько политик. Переменная, используемая для представления этого списка, имеет тип карты (список (строка)) и выглядит примерно так:
{
"user 1" = [ "policy1", "policy2" ],
"user 2" = [ "policy1" ]
}
Получение списка пользователей для создания достаточно просто с помощью keys()
, но поскольку в настоящее время в Terraform отсутствует механизм для создания вложенных циклических ресурсов, вложения политики должны выполняться в виде отдельного цикла, независимого от каждого пользователя. Итак, я пытаюсь составить список связей пользователя и политики из входных данных карты, которые будут выглядеть примерно так на основе приведенного выше примера:
[
[ "user1", "policy1" ],
[ "user1", "policy2" ],
[ "user2", "policy1" ]
]
Я пытаюсь создать этот список и сохранить его в локальной переменной, например, где var.iam-user-policy-map
- карта ввода:
locals {
...
association-list = [
for user in keys(var.iam-user-policy-map):
[
for policy in var.iam-user-policy-map[user]:
[user, policy]
]
]
...
}
Однако я получаю ошибки при попытке получить доступ к значениям в этом вложенном списке. Я пытаюсь получить доступ к пользовательской части ассоциации со ссылкой local.association-list[count.index][0]
и политике с local.association-list[count.index][1]
, но при запуске terraform plan
выдает ошибку:
Error: Incorrect attribute value type
on main.tf line 27, in resource "aws_iam_user_policy_attachment" "test-attach":
27: user = local.association-list[count.index][0]
Inappropriate value for attribute "user": string required.
Error: Incorrect attribute value type
on main.tf line 27, in resource "aws_iam_user_policy_attachment" "test-attach":
27: user = local.association-list[count.index][0]
Inappropriate value for attribute "user": string required.
Error: Invalid index
on main.tf line 28, in resource "aws_iam_user_policy_attachment" "test-attach":
28: policy_arn = "arn:aws-us-gov:iam::aws:policy/${local.association-list[count.index][1]}"
|----------------
| count.index is 0
| local.association-list is tuple with 2 elements
The given key does not identify an element in this collection value.
Error: Invalid template interpolation value
on main.tf line 28, in resource "aws_iam_user_policy_attachment" "test-attach":
28: policy_arn = "arn:aws-us-gov:iam::aws:policy/${local.association-list[count.index][1]}"
|----------------
| count.index is 1
| local.association-list is tuple with 2 elements
Cannot include the given value in a string template: string required.
Что я делаю не так?