Как настроить переменные среды в Hashicorp Terraform - PullRequest
2 голосов
/ 07 марта 2019

Я довольно новичок в Terraform, хотя я просмотрел все учебные модули, доступные на сайте Hashicorp.

В настоящее время я пытаюсь понять, как настроить переменные среды. Я знаю, как ссылаться на переменные в конфигурации main.tf (access_key = "${var.access_key}"), и я знаю, как сохранить этот ключ доступа в отдельном файле и ссылаться на него, но чего я не понимаю (и не могу найти никакой документации / инструкция о том) как настроить переменные окружения, чтобы мне не нужно было сохранять ключ доступа в файл.

Кто-нибудь знает, как лучше это делать?

Ответы [ 3 ]

3 голосов
/ 07 марта 2019

Некоторые провайдеры могут устанавливать учетные данные / конфигурацию провайдера напрямую через переменные среды.Например, в случае провайдера AWS вы можете использовать переменные среды AWS SDK , как указано в документации провайдера AWS :

Вы можете предоставитьваши учетные данные через AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY, переменные среды, представляющие ваш ключ доступа AWS и секретный ключ AWS, соответственно.

Пример использования показан как:

$ export AWS_ACCESS_KEY_ID="anaccesskey"
$ export AWS_SECRET_ACCESS_KEY="asecretkey"
$ export AWS_DEFAULT_REGION="us-west-2"
$ terraform plan

Для Поставщик Azure Большая часть конфигурации поставщика может быть задана переменными среды без необходимости определения в конфигурации поставщика:

$ export ARM_CLIENT_ID="aclientid"
$ export ARM_SUBSCRIPTION_ID="asubscriptionid"
$ export ARM_TENANT_ID="atenantid"
$ terraform plan

В более общем случае Terraform автоматически загрузит любые определенные переменныес префиксом TF_VAR_.

Так что если у вас есть что-то вроде этого:

variable "foo" {}

Вы можете установить значение, экспортировав переменную среды TF_VAR_foo:

export TF_VAR_foo=bar
0 голосов
/ 12 марта 2019

Я предпочитаю использовать aws_vault для хранения моих учетных данных AWS в зашифрованном хранилище ключей, а не в виде простого текста.

# Store AWS credentials for the "home" profile
$ aws-vault add home
Enter Access Key Id: ABDCDEFDASDASF
Enter Secret Key: %

$ aws-vault exec home -- terraform init
...
$ aws-vault exec home -- terraform plan
...
$ aws-vault exec home -- terraform apply
...

Таким образом, вам не нужно дурачиться с файлом ~/.aws/credentials. Если в ваших учетных записях aws включена поддержка mfa, вам необходимо настроить файл ~/.aws/config.

Также если вам нравятся псевдонимы

$ alias av="aws-vault exec"
$ av home -- terraform init
0 голосов
/ 11 марта 2019

Terraform может вывести следующие переменные среды для AWS

export AWS_ACCESS_KEY_ID="anaccesskey"
export AWS_SECRET_ACCESS_KEY="asecretkey"

Ссылка: https://www.terraform.io/docs/providers/aws/#environment-variables

Но я бы предложил попробовать AWS Profile. Вы можете добавить учетные данные в файл ~/.aws/credentials, например

[myprofile]
aws_access_key_id     = anaccesskey
aws_secret_access_key = asecretkey

и затем вы можете установить переменную окружения export AWS_PROFILE=myprofile. Теперь, если вы запускаете terraform из этой оболочки, она должна выбрать учетные данные, перечисленные в myprofile.

Кроме того, вы можете указать код AWS Provider следующим образом:

provider "aws" {
  profile = "myprofile"
  region  = "${var.region}"
}

По моему опыту, взаимодействие с AWS с использованием profile проще и лучше, чем установка переменных среды для каждой оболочки.

Пример вы можете найти здесь https://github.com/pradeepbhadani/tf-examples/blob/master/ex2/provider.tf

Надеюсь, это поможет.

...