如何在不将值复制到另一个变量的情况下从 Terraform jsondecode 向对象添加值?

How to add value(s) to an object from Terraform jsondecode without copying values over to another variable?

我有一个 Terraform 资源的以下示例,我在其中从机密管理器获取值并将它们传递给 Lambda 函数。问题是如何在不复制值的情况下将对象传递给环境变量之前向对象添加额外的值?

resource "aws_secretsmanager_secret" "example" {
  name = "example"
}

resource "aws_secretsmanager_secret_version" "example" {
  secret_id     = aws_secretsmanager_secret.example.id
  secret_string = <<EOF
   {
    "FOO": "bar"
   }
EOF
}

data "aws_secretsmanager_secret_version" "example" {
  secret_id  = aws_secretsmanager_secret.example.id
  depends_on = [aws_secretsmanager_secret_version.example]
}

locals {
  original_secrets = jsondecode(
    data.aws_secretsmanager_secret_version.example.secret_string
  )
}

resource "aws_lambda_function" "example" {
  ...
  environment {
    variables = local.original_secrets
  }
}

作为伪代码,我想做这样的事情:

local.original_secrets["LOG_LEVEL"] = "debug"

我目前的方法只是复制原始值并添加一个新值,但这当然不是 DRY。

locals {
    ...
    updated_secrets = {
        FOO     = try(local.original_secrets.FOO, "")
        DEBUG   = "false"
    }
}

您可以使用 Terraform merge 函数生成新的环境变量组合图。

lambda_environment_variables = merge(local.lambda_secrets, local.environment_variables)