我有一个模块,它结合了两种资源,一个 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
?