如何将多个 aws 提供程序传递给一个模块?
How to pass several aws providers to one module?
我有一个模块结合了两个资源,一个 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"
}
...
}
到目前为止,secrets 都是在它们自己的模块中定义的
所以我这样分配供应商:
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
?
你会像这样传递它:
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
以选择使用两个提供程序配置中的哪一个。
我有一个模块结合了两个资源,一个 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"
}
...
}
到目前为止,secrets 都是在它们自己的模块中定义的
所以我这样分配供应商:
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
?
你会像这样传递它:
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
以选择使用两个提供程序配置中的哪一个。