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





Некоторые провайдеры позволяют вам напрямую устанавливать учетные данные/конфигурацию провайдера через переменные среды. Например, в случае поставщика 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
Также извиняюсь, не знаю, как заставить форматирование сотрудничать с этими комментариями!
Поставщик Azure не принимает параметр access_key. Вероятно, стоит быстро прочитать Документы поставщика AzureRM, чтобы лучше понять, как его использовать.
А, это имеет смысл. Возможно, я действительно неправильно формулирую свой вопрос. Итак, обратитесь к этой статье (docs.microsoft.com/en-us/azure/terraform/terraform-backend), это в основном то, что я пытаюсь сделать. Я просто пытаюсь получить ключ доступа к учетной записи хранения Azure, хранящийся в Azure Key Vault, и не могу заставить команду export ARM_ACCESS_KEY=<ключ доступа к хранилищу> выполняться правильно.
Похоже, вы делаете две разные вещи. Удалите любую ссылку на «access_key» из ваших файлов tf, а затем попробуйте запустить export ARM_ACCESS_KEY=<your key> до tf plan
Итак, я попробовал это, но не могу запустить команду export export ARM_ACCESS_KEY=<your key>. В нем говорится, что «экспорт» не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл. Любые идеи о том, как заставить это сотрудничать?
Если у вас нет команды export, то вы, вероятно, работаете в Windows, а это значит, что вам нужно использовать команду set. Полная команда, которую вы хотите использовать, это set ARM_ACCESS_KEY = "<yourkey>" в приглашении cmd или $env:ARM_ACCESS_KEY = "<yourkey>"shellhacks.com/windows-set-environment-variable-cmd-powershell.
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 в какой-то момент в будущем.
Способ 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).
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
}
убедившись, что оба файла находятся в одном каталоге.
$ export AWS_ACCESS_KEY_ID = "AWS_ACCESS_KEY_ID"
$ export AWS_SECRET_ACCESS_KEY = "AWS_SECRET_ACCESS_KEY"
$ terraform plan
~/.aws/credentialsaws configure
AWS Access Key ID: yourID
AWS Secret Access Key: yourSecert
Default region name : aws-region
Default output format : env
Я надеюсь, что это помогает!
удачи, terraform — удивительная вещь для изучения!
Спасибо за быстрый ответ! Просто чтобы предоставить немного больше деталей, я использую поставщика 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}. Я должен что-то упустить. Извините, что туплю!