Как передать несколько провайдеров aws в один модуль?

У меня есть модуль, который объединяет два ресурса, экземпляр rds и секрет, каждому из которых нужен собственный провайдер.

      .
├── environments
│   └── myenv
│       ├── locals.tf
│       ├── main.tf
│       └── variables.tf
└── modules
    └── db
        ├── main.tf
        ├── secrets.tf
        └── variables.tf

modules/db/main.tf:

      resource "aws_db_instance" "database"{
    #needs aws.db-provider
    ...
}

modules/db/secrets:

      data "aws_secretsmanager_secret_version" "rds_pg_credentials" {
  #needs aws.secret-provider 
  secret_id = var.secret_id
}

Оба провайдера указаны в environments/myenv/main.tf:

      provider "aws" {
  alias = "db-provider"
  assume_role {
     role_arn = "arn:aws:iam::123:role/db-role"
  }
  ...
}

provider "aws" {
  alias = "secret-provider"
  assume_role {
     role_arn = "arn:aws:iam::123:role/secrets-role"
  }
  ...
}

До сих пор секреты определялись в собственном модуле

Поэтому я назначил провайдеров так:

      module "my-db" {
  source = ".//../../modules/db"
  providers = {
    aws = aws.db-provider
  }
  ...
}

module "secrets" {
  source = ".//../../modules/secrets"
  providers = {
    aws = aws.secret-provider
  }
  ...
}

Но теперь, когда я двигаюсь secrets в db, Мне как-то нужно передать оба в одном блоке провайдера.
Я считаю, что оба ресурса ожидают, что их поставщик будет называться "aws", поэтому я предполагаю, что мне просто нужно передать их под разными именами, например

      module "my-db" {
  source = ".//../../modules/db"
  providers = {
    aws1 = aws.db-provider
    aws2 = aws.secret-provider
  }
  ...
}

Но тогда как мне настроить модули для использования aws{1,2} вместо aws?

1 ответ

Решение

Вы бы передали это так:

      module "my-db" {
  source = ".//../../modules/db"
  providers = {
    aws.db-provider = aws.db-provider
    aws.secret-provider = aws.secret-provider
  }
  ...
}

В вашем модуле my-db вам понадобятся такие определения прокси-провайдера:

      provider "aws" {
  alias = "db-provider"
}

provider "aws" {
  alias = "secret-provider"
}

Каждый ресурс в вашем модуле должен иметь собственный атрибут провайдера, для которого установлено значение aws.db-provider или же aws.secret-provider чтобы выбрать, какую из двух конфигураций провайдера использовать.

Документация: поставщики в модулях

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