Как настроить переменные окружения в Hashicorp Terraform

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
0
21 253
4

Ответы 4

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

You can provide your credentials via the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY, environment variables, representing your AWS Access Key and AWS Secret Key, respectively.

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

$ 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

Спасибо за быстрый ответ! Просто чтобы предоставить немного больше деталей, я использую поставщика AzureRM, и для справки, вот некоторые из моей конфигурации main.tf: provider "azurerm" { version = "= 1.20.0" access_key = "${var.access_key }" region = "${var.region}" } Это мой файл конфигурации variable.tf: переменная "access_key" {} variable "region" { default = "eastus" } Я... думаю, я все еще не знаю, как перейти к назначению моего ключа доступа к переменной ${var.access_key}. Я должен что-то упустить. Извините, что туплю!

Neal 07.03.2019 21:35

Также извиняюсь, не знаю, как заставить форматирование сотрудничать с этими комментариями!

Neal 07.03.2019 21:35

Поставщик Azure не принимает параметр access_key. Вероятно, стоит быстро прочитать Документы поставщика AzureRM, чтобы лучше понять, как его использовать.

ydaetskcoR 07.03.2019 21:44

А, это имеет смысл. Возможно, я действительно неправильно формулирую свой вопрос. Итак, обратитесь к этой статье (docs.microsoft.com/en-us/azure/terraform/terraform-backend)‌​, это в основном то, что я пытаюсь сделать. Я просто пытаюсь получить ключ доступа к учетной записи хранения Azure, хранящийся в Azure Key Vault, и не могу заставить команду export ARM_ACCESS_KEY=<ключ доступа к хранилищу> выполняться правильно.

Neal 07.03.2019 22:51

Похоже, вы делаете две разные вещи. Удалите любую ссылку на «access_key» из ваших файлов tf, а затем попробуйте запустить export ARM_ACCESS_KEY=<your key> до tf plan

Stefan R 08.03.2019 11:56

Итак, я попробовал это, но не могу запустить команду export export ARM_ACCESS_KEY=<your key>. В нем говорится, что «экспорт» не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл. Любые идеи о том, как заставить это сотрудничать?

Neal 12.03.2019 17:54

Если у вас нет команды export, то вы, вероятно, работаете в Windows, а это значит, что вам нужно использовать команду set. Полная команда, которую вы хотите использовать, это set ARM_ACCESS_KEY = "<yourkey>" в приглашении cmd или $env:ARM_ACCESS_KEY = "<yourkey>"shellhacks.com/windows-set-environment-variable-cmd-powershe‌​ll.

SomeGuyOnAComputer 01.10.2019 19:38

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

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

Спасибо за эти предложения. Я пытаюсь заставить это работать в Azure, просто как доказательство концепции. Я мог бы взглянуть на AWS Vault в какой-то момент в будущем.

Neal 12.03.2019 17:55

Способ Terraform использования переменных среды и, следовательно, произвольных значений для всех хороших вещей Terraform заключается в добавлении к переменной Любыеокружающая обстановка префикса TF_VAR_, после чего Terraform автоматически использует ее.

Для вашего конкретного случая использования это будет означать, что вы можете установить переменную Терраформaccess_key, установив переменную **environment* TF_VAR_access_key.

Этот метод встроен в сам Terraform и, таким образом, не зависит от какого-либо конкретного поставщика.

Документацию можно найти на https://www.terraform.io/docs/commands/environment-variables.html#tf_var_name, она также работает для версии старшая Terraform (я тестировал ее с 0.11).

  1. когда я начал изучать tf, я использовал файл terraform.tfvars, в который я вставил:
aws_access_key = "myaccesskey"
aws_secret_key = "mysecertkey"
region='aws-region'

в main.tf:


variable "aws_access_key" {}
variable "aws_secret_key" {}
variable "private_key_path" {}

provider "aws" {
  access_key = var.aws_access_key
  secret_key = var.aws_secret_key
  region     = var.region
}

убедившись, что оба файла находятся в одном каталоге.

  1. затем я начал использовать переменные env в Mac:
$ export AWS_ACCESS_KEY_ID = "AWS_ACCESS_KEY_ID"
$ export AWS_SECRET_ACCESS_KEY = "AWS_SECRET_ACCESS_KEY"
$ terraform plan
  1. используя профиль, ~/.aws/credentials
aws configure
AWS Access Key ID: yourID
AWS Secret Access Key: yourSecert
Default region name : aws-region
Default output format : env

Я надеюсь, что это помогает!

удачи, terraform — удивительная вещь для изучения!

Другие вопросы по теме