Aws lambda Terraform 0.11:aws_lambda_函数中的条件vpc_配置

Aws lambda Terraform 0.11:aws_lambda_函数中的条件vpc_配置,aws-lambda,terraform,terraform-provider-aws,terraform0.11,Aws Lambda,Terraform,Terraform Provider Aws,Terraform0.11,我试图在vpc\u config块上部署一个Lambda函数。我曾尝试在vpc_config中使用count,但无法在那里使用count语句。根据资源的文档,如果按如下方式传入空列表,则忽略vpc\u config部分: vpc_config { subnet_ids = [] security_group_ids = [] } 我可以确认这确实如预期的那样工作(没有尝试VPC配置) 因此,我尝试使用subnet\u id和security\u group\u id的条

我试图在
vpc\u config
块上部署一个Lambda函数。我曾尝试在vpc_config中使用count,但无法在那里使用count语句。根据资源的文档,如果按如下方式传入空列表,则忽略
vpc\u config
部分:

  vpc_config {
    subnet_ids = []
    security_group_ids = []
  }
我可以确认这确实如预期的那样工作(没有尝试VPC配置)

因此,我尝试使用
subnet\u id
security\u group\u id
的条件-类似于
var.vpc\u函数?var.subnet\u id:[]
-但不能在条件语句中传递列表。我找到的最接近解决方案是下面的hacky number,它连接然后拆分列表:

  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_功能
为真或假的情况下首次适用,这很好,但在
vpc_功能
为假的情况下,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中做了类似的事情,可以提供一些指导

我最终在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 : []
  }
...
}
按如下方式传入可变子网\u ID:

subnet_ids = ["subnet-123", "subnet-345", "subnet-456"]

aws_security_group.lambda_security_group.*.id是作为普通资源创建的。

我相信这是克服Terraform 0.11限制的最好方法。您已经尝试了人们通常针对这种情况/用例尝试的方法。