#terraform
#terraform
Вопрос:
Я управляю функциями AWS lambda с помощью модуля terraform. Теперь я хочу добавить dead_letter_config
к одной из лямбда-функций, но оставить другие функции без изменений.
Я пытаюсь добавить dead_letter_config
поле (которое является необязательным в aws_lambda_function
ресурсе) в модуль, но я не могу найти, как я могу сделать dead_letter_config
поле доступным только в определенной лямбда-функции и заставить это поле игнорироваться другими вызывающими.
Моя terraform — версия 0.12.28, поэтому я попытался использовать null
значение по умолчанию для переменной.
resource "aws_lambda_function" "lambda" {
...
dead_letter_config {
target_arn = var.dead_letter_config_target
}
variable "dead_letter_config_target" {
default = null
type = string
}
Но target_arn
поле требуется для dead_letter_queue
поля, поэтому terraform plan
сбой.
Error: "dead_letter_config.0.target_arn": required field is not set
Есть ли какой-нибудь хороший способ условно игнорировать все поле целиком?
Ответ №1:
ДА. Для этого вы можете использовать динамический блок. В принципе, когда dead_letter_config_target
равно null, не dead_letter_config
будет создано. В противном случае будет создан один dead_letter_config
блок.
Например, измененный код может быть:
resource "aws_lambda_function" "lambda_tf" {
# other attributes
dynamic "dead_letter_config" {
for_each = var.dead_letter_config_target != null ? toset([1]) : toset([])
content {
target_arn = var.dead_letter_config_target
}
}
}
P.S.
Для DLQ вам, очевидно, потребуется настроить разрешения в роли выполнения lambda.
Комментарии:
1. Спасибо! Это становится хорошим шансом изучить динамический блок.
Ответ №2:
Оператор Terraform «splat» [*]
может использоваться как удобный способ преобразования значения, которое может быть либо заданным, либо нулевым, в список нулевой длины или одноэлементный список, который затем удобнее использовать с функциями языка Terraform, ориентированными на коллекции, такими, например, как dynamic
блоки:
resource "aws_lambda_function" "lambda" {
# ...
dynamic "dead_letter_config" {
for_each = var.dead_letter_config_target[*]
content {
target_arn = each.value
}
}
}