У меня есть список объектов, указанных в файлеvariable.tf, следующим образом:
variable lambda_attributes {
description = "List of Lambda Objects"
type = list(object({
name = string
description = string
runtime = string
}))
default = [
{
name = "device-update",
description = "device update function",
runtime = "nodejs20.x"
},
{
name = "location-update ",
description = "location update function",
runtime = "nodejs20.x"
},
{
name = "ticket-update",
description = "ticket update Function",
runtime = "nodejs20.x"
}
]
}
и я создаю роли IAM в цикле с помощью этого кода:
resource "aws_iam_role" "role_for_lambda" {
for_each = {for i, v in var.lambda_attributes: i => v}
name = "iam_for_lambda_${each.value.name}"
assume_role_policy = data.aws_iam_policy_document.assume_role.json
}
Как мне ссылаться на роль при создании функции Lambda в цикле, как показано ниже?
resource "aws_lambda_function" "my_lambdas" {
for_each = {for i, v in var.lambda_attributes: i => v}
function_name = "${each.value.name}"
description = "${each.value.description}"
role = ???
Спасибо за вашу помощь.
aws_lambda_function
создается с помощью цикла for_each
на основе map
, поэтому вы можете получить доступ к его ресурсам по его ключу:
aws_iam_role.role_for_lambda[each.key].some_property
Пример (не проверялся):
locals {
# Use same map in both resources
attributes_map = {
for attribute in var.lambda_attributes :
attribute.name => attribute
}
}
resource "aws_iam_role" "role_for_lambda" {
for_each = locals.attributes_map
name = "iam_for_lambda_${each.value.name}"
assume_role_policy = data.aws_iam_policy_document.assume_role.json
}
resource "aws_lambda_function" "my_lambdas" {
for_each = local.attributes_map
function_name = each.value.name
description = each.value.description
role = aws_iam_role.role_for_lambda[each.key].arn
# ....
}
Обратите внимание, что я немного изменил код, чтобы:
name
в качестве ключа карты, а не индекс, как в вашем примере. Использование индексов может вызвать некоторые проблемы, поэтому их следует избегать.@BrianG тогда рассмотри возможность принятия этого ответа как правильного. Спасибо!
Спасибо за Ваш ответ. Это решило мою проблему, и я ценю комментарии, которые вы добавили в конце кода, чтобы объяснить свой ответ.