我正在尝试在vpc_config块上有条件地部署lambda函数。我已经尝试在vpc_config中使用count,但是无法在其中使用count语句。根据资源的文档,如果您按以下方式传递空列表,则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为true或false的情况下都很好,这很好,但是在vpc_function为false的情况下,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 12,但无法弄清楚。也许有人在terraform 12中做过类似的事情,可以借些指针吗?
答案 0 :(得分:0)
我最终在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创建为常规资源。