Terraform 0.11: условный vpc_config в aws_lambda_function
Я пытаюсь развернуть лямбда-функцию с условием vpc_config
блок. Я пробовал использовать счет внутриvpc_config
но там нельзя использовать оператор count. Согласно документации для ресурса, если вы передадите пустые списки следующим образом,vpc_config
часть игнорируется:
vpc_config {
subnet_ids = []
security_group_ids = []
}
Я могу подтвердить, что это работает должным образом (попытки настройки VPC не выполняются).
Поэтому я попытался использовать условные выражения для subnet_ids
а также security_group_ids
- что-то вроде var.vpc_function ? var.subnet_ids : []
- но вы не можете передать список в условном выражении. Самое близкое, что я нашел к решению, - это приведенный ниже хакерский номер, который объединяется, а затем разделяет списки:
resource "aws_lambda_function" "lambda_function" {
...
vpc_config {
subnet_ids = ["${split(",", var.vpc_function ? join(",", var.subnet_ids) : join(",", var.empty_array))}"]
security_group_ids = ["${split(",", var.vpc_function ? join(",", aws_security_group.lambda_security_group.*.id) : join(",", var.empty_array))}"]
}
variable "vpc_function" {
default = "false"
}
variable "subnet_ids" {
type = "list"
default = ["subnet-a", "subnet-b"]
}
variable "empty_array" {
type = "list"
default = []
}
Это нормально применяется в первый раз, когда vpc_function
правда или ложь, и это здорово, но где vpc_function
ложно, terraform всегда видит вышеизложенное как изменение при каждом повторном применении:
vpc_config.#: "0" => "1"
vpc_config.0.security_group_ids.#: "0" => "1"
vpc_config.0.security_group_ids.0: "" => ""
vpc_config.0.subnet_ids.#: "0" => "1"
vpc_config.0.subnet_ids.0: "" => ""
Я предполагаю, что проблема в том, что мой список, объединенный и разделенный, отображается не как [], а как список с некоторым (пустым) содержимым.
У кого-нибудь еще есть решение для этого? Я также пробовал использовать Terraform 0.12, но не мог понять. Может быть, кто-то сделал что-то подобное в Terraform 0.12 и может дать какие-то указатели?
1 ответ
В итоге я нашел решение в terraform 12:
resource "aws_lambda_function" "lambda_function" {
...
vpc_config {
subnet_ids = var.vpc_function ? var.subnet_ids : []
security_group_ids = var.vpc_function ? aws_security_group.lambda_security_group.*.id : []
}
...
}
Переменная subnet_ids передается следующим образом:
subnet_ids = ["subnet-123", "subnet-345", "subnet-456"]
И aws_security_group.lambda_security_group.*. Id создается как обычный ресурс.