Как добавить лямбда-переменную среды с помощью terraform? - PullRequest
0 голосов
/ 27 октября 2018

Я хочу, чтобы моя лямбда вызывала API, а для этого требуется токен API. Я хочу поместить токен API в лямбда-переменную окружения. Как я могу сделать так, чтобы terraform сделал это? Или я подхожу к этому неправильно?

Ответы [ 3 ]

0 голосов
/ 29 октября 2018

Если вы хотите передать super_secret_value в терраформе, а затем пропустить через файл tfvars, вы можете рассмотреть возможность использования Vault или AWS Secret Manager.

Но даже если вы используете Vault или AWS Secret Manager, секреты могут быть видны в файле tfstate.Но чтобы снизить риск, вы можете зашифровать файл tfstate на S3 и установить политику ограничения, чтобы только необходимые люди могли получить доступ к этому файлу состояния.

0 голосов
/ 20 февраля 2019

Если у вас, как и для большинства традиционных приложений NodeJS, есть файл en .env, который загружается с dotenv локально, вот трюк для того, чтобы передать эти переменные в ваши файлы Terraform как переменные:

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

Затем просто объявите переменные env как переменные и используйте их:

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}"
    }
  }
}
0 голосов
/ 27 октября 2018

Документация здесь дает довольно хороший пример.По сути это блок environment с блоком variables.Тогда любые пары ключ-значение, которые вы хотите.Предполагая, что вы используете nodejs, вы можете ссылаться на эти переменные в своем лямбда-коде, выполнив process.env.api_key.Эти значения будут храниться в текстовом формате в вашем коде terraform, а также в файле состояния terraform. 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"
    }
  }
}
...