如何添加带有Terraform的Lambda环境变量?

时间:2018-10-27 13:32:24

标签: aws-lambda terraform terraform-provider-aws

我希望我的lambda调用API,而这需要API令牌。我想将API令牌放入lambda环境变量中。我怎样才能让terraform代替呢?还是我走错路了?

4 个答案:

答案 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文件,则可以考虑使用VaultAWS Secret Manager

但是,即使您使用VaultAWS 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中使用它们,请执行以下步骤:

  1. 存储您的敏感数据,例如密码和api键。
  2. 将“ aws_secretsmanager_secret”数据添加到您的地形more info
  3. 根据上一步中的秘密添加“ aws_secretsmanager_secret_version”。 more info
  4. 假设您的秘密存储在键值结构中,请使用
  

$ {jsondecode(data.aws_secretsmanager_secret_version.secrets.secret_string)[“ YOUR_KEY”]}