Передача псевдонимов нескольких провайдеров в модуль terraform 0.12.13 - PullRequest
0 голосов
/ 06 ноября 2019

Я создаю код, который должен взаимодействовать с двумя разными учетными записями AWS, которые, как говорится в документации, должны работать. Это работало в 0.11.14

В основном, в моем файле provider.tf у меня есть:

provider "aws" {
  alias = "ca-central-1"
  region = "ca-central-1"
  profile = var.aws_profile
}

provider "aws" {
   alias = "other-ca-central-1"
   region = "ca-central-1"
   profile = var.aws_other_profile
}

(Эти переменные устанавливают правильные профили в моем файле учетных данных.)

В корне, в коде, который вызывает модуль,

module "obfuscated" {
  source = "./modules/obfuscated"
  providers = {
    aws.main = "aws.ca-central-1"
    aws.other = "aws.other-ca-central-1"
  }
  #other stuff
}

In ./modules/obfuscated/main.tf У меня есть

provider "aws" {
  alias = "main"
}
provider "aws" {
  alias = "other"
}

Что говорят документыявляется заполнителем, который может быть только пустым или иметь псевдоним. Без этого он жалуется, что провайдер не существует. Но при этом он жалуется, что я не указал регион, который конфликтует с документами.

Конечно, документация не может быть неправильной, нет, это не может быть возможным. Помогите мне, оби-ван-overflow ..

1 Ответ

0 голосов
/ 06 ноября 2019

Я столкнулся с такой же проблемой, но для принятия роли. Так что в моем случае я предоставляю роль для использования. В каталоге модуля, например my_module , у меня есть файл tf с провайдером. Внутри провайдера блоков у меня есть это:

variable "role_arn" {}

provider "aws" {
  alias   = "first"
  region  = "eu-west-1"
  version = "2.24.0"

  assume_role {
    role_arn = "${var.role_arn}"
  }
}

В файле tf в каталоге my_module, используя провайдера для создания экземпляра EC2, например, у меня есть это:

resource "aws_instance" "my_instance" {
  [...]
  provider = "aws.first"
}

И в корневом каталоге моего проекта у меня есть это:

module "using_my_module" {
  source = "modules/my_module"

  role_arn = "arn:aws:iam::123456789012:role/role_to_assume"
}

Я признаю, что это технический обходной путь, поэтому он может выглядеть уродливо, но он работал для меня!

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

...