#amazon-web-services #aws-lambda #terraform
#amazon-web-services #aws-lambda #terraform
Вопрос:
Я использую разрешения на основе ресурсов для управления доступом к лямбдам, и я хочу применить эти разрешения к нескольким псевдонимам для каждой лямбды.
resource "aws_lambda_permission" "invoke_permission" {
count = length(var.invoked_by)
statement_id_prefix = "${var.function_name}InvokePermission"
action = "lambda:InvokeFunction"
function_name = var.function_name
principal = var.invoked_by[count.index].principal
source_arn = var.invoked_by[count.index].arn
}
Мой модуль lambda содержит псевдонимы для dev, qa и prod, и я не ожидаю, что буду часто добавлять новые псевдонимы. У меня есть еще три записи, по одной для каждого псевдонима:
resource "aws_lambda_permission" "invoke_permission_dev" {
count = length(var.invoked_by)
statement_id_prefix = "${var.function_name}InvokePermission"
action = "lambda:InvokeFunction"
function_name = var.function_name
principal = var.invoked_by[count.index].principal
source_arn = var.invoked_by[count.index].arn
qualifier = "dev"
}
Это работает, но это влажно (в отличие от СУХОГО), и с ним трудно справиться, если псевдонимы используются более подробно. Есть ли простой способ зациклить оператор разрешения на несколько квалификаторов, а также разрешить нескольким службам вызывать лямбда?
Комментарии:
1. Что такое
var.invoked_by
?2. Тип
list(object({arn=string, principal=string}))
— просто держатель для служб, которым может потребоваться вызвать этот lambda.