我希望我的lambda调用API,而这需要API令牌。我想将API令牌放入lambda环境变量中。我怎样才能让terraform代替呢?还是我走错路了?
答案 0 :(得分:1)
Documentation here提供了一个很好的例子。基本上是一个environment
块和一个variables
块。然后,您想要任何键值对。假设您正在使用nodejs,则可以通过执行process.env.api_key
在lambda代码中引用这些变量。这些值将以纯文本的形式存储在您的terraform代码以及terraform状态文件中。 AWS encrypts the environment variables,但您确实需要关注这些价值观是如何实现的。如果您不满意将它们存储在git中以及状态文件使用的任何存储方式,则可以通过控制台手动添加它们。
resource "aws_lambda_function" "test_lambda" {
filename = "lambda_function_payload.zip"
function_name = "lambda_function_name"
runtime = "nodejs8.10"
...
environment = {
variables = {
api_key = "super_secret"
}
}
}
答案 1 :(得分:0)
如果要以terraform形式传递super_secret_value
,然后通过tfvars文件,则可以考虑使用Vault
或AWS Secret Manager
。
但是,即使您使用Vault
或AWS Secret Manager
,秘密也可能在tfstate文件中可见。但是为了减轻风险,您可以在S3上加密tfstate
文件,并设置限制策略,以便只有需要的人才能访问此状态文件。
答案 2 :(得分:0)
如果像大多数传统的NodeJS应用一样,具有在本地加载app.api.call('create', url, {record: this.model.get('id')}, {
的{{1}}文件,这是将这些变量作为变量代理到Terraform文件中的技巧:
.env
然后,只需将env var声明为变量并使用它们:
dotenv
答案 3 :(得分:0)
您可以使用AWS Secret Manager存储您的数据。 more info。要在您的Terraform中使用它们,请执行以下步骤:
$ {jsondecode(data.aws_secretsmanager_secret_version.secrets.secret_string)[“ YOUR_KEY”]}