gpt4 book ai didi

aws-lambda - 地形 0.11 : conditional vpc_config in aws_lambda_function

转载 作者:行者123 更新时间:2023-12-01 18:32:11 25 4
gpt4 key购买 nike

我正在尝试在 vpc_config block 上部署带有条件的 Lambda 函数。我尝试在 vpc_config 中使用 count,但不可能在那里使用 count 语句。根据资源的文档,如果您按如下方式传入空列表,则 vpc_config 部分将被忽略:

  vpc_config {
subnet_ids = []
security_group_ids = []
}

我可以确认这确实按预期工作(未尝试 VPC 配置)。

因此,我尝试对 subnet_idssecurity_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 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 : []
}
...
}

变量subnet_ids传入如下:

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

并且 aws_security_group.lambda_security_group.*.id 被创建为普通资源。

关于aws-lambda - 地形 0.11 : conditional vpc_config in aws_lambda_function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58187619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com