Есть ли способ перебрать провайдера? - PullRequest
0 голосов
/ 28 октября 2019

Я настроил двух провайдеров (2 учетных записи aws), я хочу запустить экземпляр ec2 на каждой из учетных записей без повторения кода.

Я попытался использовать циклы с count и for_each, но безуспешно,

variable "providers" {
  default = [
    "aws.dev",
    "aws.qa"
  ]
}

resource "aws_instance" "test" {
  for_each      = toset(var.providers)
  ami           = "ami-0dc9a8d2479a3c7d7"
  instance_type = "t2.micro"
  provider      = each.value
}

Я получил следующую ошибку:

Ошибка: provider.each: нет подходящей версии, установленной требования к версии: "(любая версия)" версии установлены: нет

Я пробовал подобный код, перебирая другие значения, такие как ami, экземпляры, и это работает.

Я не уверен, есть ли что-то, чего я не вижу, или перебираю поставщиков, это не поддерживается.

Есть идеи или обходные пути для этого? Спасибо.

1 Ответ

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

Terraform связывает ресурсы с поставщиками перед другой обработкой (поскольку выбор поставщика влияет на значение aws_instance и, следовательно, на то, что еще является допустимым внутри), поэтому аргумент provider должен быть буквальной ссылкой на поставщика. Это сообщение об ошибке вызвано тем, что Terraform считает, что вы запрашиваете конфигурацию провайдера для провайдера, называемого «каждый» и alias = "value", и пытается установить этого провайдера.

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

...