使用工作区从 aws secret manager 中检索 terraform 中的秘密

Retrieve a secret in terraform from aws secret manager using workspaces

我正在尝试使用以下代码行从 AWS Secret Manager 检索密钥:

"${terraform.workspace}.PROJECT_KEY"   = "${jsondecode(data.aws_secretsmanager_secret_version.take-sm-store-version.secret_string)["${terraform.workspace}.PROJECT_KEY"]}"

当我 运行 terraform plan 我可以看到环境变量被正确翻译:

  ~ environment {
      ~ variables = {
            "ENVIRONMENT"          = "test"
          + "test.PROJECT_KEY" = "example_key_test"

然而,当我 运行 terraform apply 我遇到了以下错误:

Error: Error modifying Lambda Function Configuration example-function-test: ValidationException: 
        status code: 400, request id: ae52d9bc-819e-4a45-ba0d-a5b4e4de9516

还有其他方法可以解决这个问题吗?我有三个工作区 (dev/acc/prod),所以我希望通过这种方式我可以拥有一个资源(Lambda 函数),其中的环境变量是基于当前工作区设置的。

环境变量不能包含句点。您可以通过 运行 export foo.bar=baz 在 shell:

中进行本地测试
bash: export: `foo.bar=baz': not a valid identifier

Lambda API docs表示允许的字符是[a-zA-Z]([a-zA-Z0-9_])+.

理想情况下,这将由 aws_lambda_function 资源本身验证,因此此错误会在计划或验证时显示,但不幸的是,它在架构的这一部分缺少 ValidateFunc 帮助程序。

我已提出 this pull request 添加对计划时间验证的支持。