Я использую метааргумент for_each
для создания ролей IAM. Есть ли способ установить значение по умолчанию для объекта, если оно не определено ни в одной из карт ключей?
Например, если карта ключей не содержит цепочку создания стоимости, определенную для create_custom_role_trust_policy
, она должна принять значение по умолчанию как false
.
module "iam_assumable_roles" {
for_each = local.iam_roles
source = "terraform-aws-modules/iam/aws//modules/iam-assumable-role"
version = "v5.41.0"
create_role = true
role_requires_mfa = false
role_name = each.key
custom_role_policy_arns = each.value.custom_role_policy_arns
custom_role_trust_policy = each.value.custom_role_trust_policy
create_custom_role_trust_policy = each.value.create_custom_role_trust_policy
trusted_role_arns = each.value.trusted_role_arns
trusted_role_services = each.value.trusted_role_services
}
locals {
iam_roles = {
"${terraform.workspace}_arn_lookup" = {
trusted_role_arns = formatlist(
"arn:aws:iam::%s:root",
local.acceptor_account_ids
)
trusted_role_services = []
custom_role_policy_arns = [
module.iam_policies["permit_role_anywhere_id_lookup_policy"].id
]
},
"ssm_hybrid_role" = {
trusted_role_arns = []
trusted_role_services = ["ssm.amazonaws.com"]
custom_role_policy_arns = [
"arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore",
module.iam_policies["ssm_cwl_iam_policy"].id
]
},
"developer_test" = {
create_custom_role_trust_policy = "true"
custom_role_trust_policy = data.aws_iam_policy_document.custom_trust_policy.json
custom_role_policy_arns = [
module.iam_policies["ssm_session_access"].arn
]
}
}
Вы можете использовать функцию поиска :
поиск извлекает значение одного элемента из карты по его ключу. Если данный ключ не существует, вместо него возвращается заданное значение по умолчанию.
Так что-то вроде этого
create_custom_role_trust_policy = lookup(each.value, "create_custom_role_trust_policy", false)
Я пробовал тот же подход, используя функцию поиска для другого проекта, но он выдает ошибки. Какие-либо предложения ? Код и ошибка отражены в следующей сути. gist.github.com/gowgopal83/8334e86968117e29c62dbd3307819b40
Вы запрашиваете аргумент из определения переменной vm
. Смотрите ваш код . Измените его на map(any)
.
Спасибо за продолжение. Я только что попробовал использовать карту (любая) для этой переменной, но выдает следующую ошибку: Ключевое слово ограничения типа «любой» не ожидает аргументов.
Это сработало. Спасибо @Mornor