我正在尝试使用以下代码行从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函数),并根据当前工作区设置环境变量。
答案 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,以增加对计划时间验证的支持。