Как мне управлять разрешениями для нескольких лямбда-псевдонимов с помощью terraform?

#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.