使用工作区从AWS Secret Manager检索Terraform中的秘密

时间:2020-06-23 06:16:03

标签: amazon-web-services aws-lambda terraform terraform-provider-aws

我正在尝试使用以下代码行从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函数),并根据当前工作区设置环境变量。

1 个答案:

答案 0 :(得分:4)

环境变量不能包含句点。您可以通过在外壳中运行export foo.bar=baz在本地进行测试:

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,以增加对计划时间验证的支持。