如何添加带有地形的lambda环境变量



我希望我的lambda调用API,这需要一个API令牌。我想将API标记放入一个lambda环境变量中。我怎么能让地形来代替呢?还是我走错了路?

这里的文档提供了一个很好的例子。基本上,它是一个带有variables块的environment块。然后是你想要的任何键值对。假设您使用的是nodejs,那么您可以通过执行process.env.api_key在lambda代码中引用这些变量。这些值将存储在地形代码以及地形状态文件中的纯文本中。AWS对环境变量进行加密,但您确实需要关心这些值是如何到达那里的。如果您对它们存储在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"
}
}
}

您可以使用aws密钥管理器来存储数据。更多信息。要在地形中使用它们,请执行以下步骤:

  1. 存储您的敏感数据,如密码和api密钥
  2. 将"aws_secretsmanager_secret"数据添加到地形中,了解更多信息
  3. 根据上一步中的机密添加"aws_secretsmanager_secret_version"。更多信息
  4. 假设您的秘密存储在键值结构中,请使用

${jsondecode(data.aws_secretsmanager_secret_version.secret_string(["YOUR_KEY"]}

如果您想以地形形式传递super_secret_value,而不是传递tfvars文件,您可能需要考虑使用VaultAWS Secret Manager

但是,即使使用VaultAWS Secret Manager,机密也可能在tfstate文件中可见。但为了降低风险,您可以在S3上加密tfstate文件,并设置限制策略,以便只有需要的人才能访问此状态文件。

如果你像大多数传统的NodeJS应用程序一样,有一个本地加载dotenv.env文件,这里有一个技巧可以将这些变量作为变量代理到Terraform文件中:

env $(sed -e 's/^/TF_VAR_/' ../../.env.preproduction) terraform plan 
-out=terraform-preproduction.plan

然后,只需将env-var声明为变量并使用它们:

variable "SECRET" {
description = "The application SECRET env var"
}
resource "aws_lambda_function" "test_lambda" {
filename         = "lambda_function_payload.zip"
function_name    = "lambda_function_name"
runtime          = "nodejs8.10"
...
environment {
variables = {
api_key = "${var.SECRET}"
}
}
}

相关内容

  • 没有找到相关文章

最新更新