在 Terraform 中有没有办法为模块使用不同的提供者?
In Terraform is there a way to use different provider for module?
我使用 https://github.com/cloudposse/terraform-aws-acm-request-certificate 使用 terraform 和 aws 生成证书。
有没有办法为模块使用不同的提供商?
我的意思是在第一个模块中我想在区域 us-east-1 中执行,而另一个我想在 us-east-2 中执行。
但是因为我有一个供应商,这可以在单个文件或单个目录中使用 terraform 吗?
provider "aws" {
version = "~> 2.12.0"
profile = "..."
region = "us-east-1"
}
module "example_com" {
# Should be in us-east-1
source = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
domain_name = "example.com"
process_domain_validation_options = false
ttl = "300"
subject_alternative_names = ["*.example.com"]
}
module "cdn_example_com" {
# Should be in us-east-2
source = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
domain_name = "cdn.example.com"
process_domain_validation_options = false
ttl = "300"
}
类似于:
provider "aws" "aws-east-1" {
version = "~> 2.12.0"
profile = "..."
region = "us-east-1"
}
provider "aws" "aws-east-2" {
version = "~> 2.12.0"
profile = "..."
region = "us-east-2"
}
module "example_com" {
provider = "aws-east-1"
source = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
domain_name = "example.com"
process_domain_validation_options = false
ttl = "300"
subject_alternative_names = ["*.example.com"]
}
module "cdn_example_com" {
provider = "aws-east-2"
# Should be in us-east-2
source = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
domain_name = "cdn.example.com"
process_domain_validation_options = false
ttl = "300"
}
以下link可能会派上用场来解决你的问题
基于 terraform documation 您可以创建不同的提供程序并将它们“传递”给模块。
对于您的情况,可能是以下情况:
provider "aws" {
version = "~> 2.12.0"
profile = "..."
region = "us-east-1"
}
# create second provider with alias of "us-east-2"
provider "aws" {
version = "~> 2.12.0"
profile = "..."
region = "us-east-2"
alias = "us-east-2"
}
#
# Then for your modules
#
# use default provider
module "example_com" {
source = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
domain_name = "example.com"
process_domain_validation_options = false
ttl = "300"
subject_alternative_names = ["*.example.com"]
}
# use non-default provider
module "cdn_example_com" {
providers = {
aws = aws.us-east-2
}
# Should be in us-east-2
source = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
domain_name = "cdn.example.com"
process_domain_validation_options = false
ttl = "300"
}
我使用 https://github.com/cloudposse/terraform-aws-acm-request-certificate 使用 terraform 和 aws 生成证书。
有没有办法为模块使用不同的提供商?
我的意思是在第一个模块中我想在区域 us-east-1 中执行,而另一个我想在 us-east-2 中执行。
但是因为我有一个供应商,这可以在单个文件或单个目录中使用 terraform 吗?
provider "aws" {
version = "~> 2.12.0"
profile = "..."
region = "us-east-1"
}
module "example_com" {
# Should be in us-east-1
source = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
domain_name = "example.com"
process_domain_validation_options = false
ttl = "300"
subject_alternative_names = ["*.example.com"]
}
module "cdn_example_com" {
# Should be in us-east-2
source = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
domain_name = "cdn.example.com"
process_domain_validation_options = false
ttl = "300"
}
类似于:
provider "aws" "aws-east-1" {
version = "~> 2.12.0"
profile = "..."
region = "us-east-1"
}
provider "aws" "aws-east-2" {
version = "~> 2.12.0"
profile = "..."
region = "us-east-2"
}
module "example_com" {
provider = "aws-east-1"
source = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
domain_name = "example.com"
process_domain_validation_options = false
ttl = "300"
subject_alternative_names = ["*.example.com"]
}
module "cdn_example_com" {
provider = "aws-east-2"
# Should be in us-east-2
source = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
domain_name = "cdn.example.com"
process_domain_validation_options = false
ttl = "300"
}
以下link可能会派上用场来解决你的问题
基于 terraform documation 您可以创建不同的提供程序并将它们“传递”给模块。
对于您的情况,可能是以下情况:
provider "aws" {
version = "~> 2.12.0"
profile = "..."
region = "us-east-1"
}
# create second provider with alias of "us-east-2"
provider "aws" {
version = "~> 2.12.0"
profile = "..."
region = "us-east-2"
alias = "us-east-2"
}
#
# Then for your modules
#
# use default provider
module "example_com" {
source = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
domain_name = "example.com"
process_domain_validation_options = false
ttl = "300"
subject_alternative_names = ["*.example.com"]
}
# use non-default provider
module "cdn_example_com" {
providers = {
aws = aws.us-east-2
}
# Should be in us-east-2
source = "git::https://github.com/cloudposse/terraform-aws-acm-request-certificate.git?ref=master"
domain_name = "cdn.example.com"
process_domain_validation_options = false
ttl = "300"
}