Как передать несколько провайдеров 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
чтобы выбрать, какую из двух конфигураций провайдера использовать.
Документация: поставщики в модулях