我尝试在Lambda函数上部署一个具有对 vpc_config
块的条件限制。我尝试了在 vpc_config
中使用计数,但是无法在那里使用计数语句。根据资源文档,如果您按照以下方式传入空列表,则会忽略 vpc_config
部分:
vpc_config {
subnet_ids = []
security_group_ids = []
}
我可以确认这个操作按预期工作(不会尝试配置VPC)。
因此,我尝试使用条件语句来处理 subnet_ids
和 security_group_ids
- 大概是像 var.vpc_function ? var.subnet_ids : []
这样的方式 - 但是在条件语句中不能传递列表。我找到的最接近解决方案的方法是下面这个 hacky 的做法,即将列表合并后再拆分:
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中做过类似的事情,并可以提供一些指针?