我正在尝试在vpc_config
块上部署一个带有条件的 Lambda 函数。我曾尝试在内部使用 count ,vpc_config
但无法在其中使用 count 语句。根据资源的文档,如果您按如下方式传入空列表,则该vpc_config
部分将被忽略:
vpc_config {
subnet_ids = []
security_group_ids = []
}
我可以确认这确实按预期工作(未尝试 VPC 配置)。
subnet_ids
因此,我尝试对and使用条件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 中做了类似的事情并且可以提供一些指点?