使用地形提供程序进行多区域部署



我构建了一个terraform代码,用于将不同类型的资源部署到单个AWS区域。代码结构如下:

- main.tf
- data.tf
- providers.tf
- variables.tf
- templates/
- modules/
- module_main.tf
- data.tf
- variables.tf
- modules/
- sub_module_main.tf
- data.tf
- variables.f

因此,我们的想法是使用外部模块创建一组具有相似特性的资源。然后外部模块将内部模块用于相同的目的。在内部模块中,它创建了一个S3存储桶。现在,对于内部模块中的每个存储桶,我想在不同的区域中创建一个复制存储桶。因此,复制存储桶是我需要在第二个区域部署的唯一资源。我读到有两个aws提供者,然后将特定提供者传递给模块,如:

module 'east' {
source = ./..
providers = {
aws = aws.east
}
...
}
module 'west' {
source = ./..
providers = {
aws = aws.west
}
...
}

但在我的情况下,我只想将模块内的特定资源部署到两个区域,而不是整个模块。考虑到我的代码结构,是否可以使用提供者或任何其他方法来处理此需求?

您可以如下定义您的提供者以实现您想要的行为:

#Standard AWS Provider Block:
terraform {
required_providers {
aws = {
source  = "hashicorp/aws"
version = "> 1.0"
}
}
}
#Define the default provider (no alias defined):
provider "aws" {
region  = "us-east-1"
profile = "DEV"
}
#Define alternate aliased providers:
provider "aws" {
region  = "us-east-1"
profile = "PROD"
alias   = "prod"
}
provider "aws" {
region  = "us-east-2"
profile = "PROD-DR"
alias   = "prod-dr"
}

定义了此配置后,未定义提供程序属性的资源将使用默认提供程序。在上面的情况下,它将映射到配置文件DEV。请注意,您在tf文件中定义的每个配置文件都必须在具有相同配置文件名称的.aws/config和.aws/credentials文件中定义。要为给定资源指定备用提供者,请使用别名为资源定义中值的提供者属性:

provider = aws.prod-dr

这种类型的配置将允许您定义多个aws帐户和多个区域,并根据需要可互换地引用它们。

最新更新