Terraform多Region的格式
Table of Contents
前
Terraform 在基础设施的管理是是非常方便的。但是面对一个中型项目,管理文件的复杂度也会大幅提升。
特别是针对一个多regoin的项目,需要按regoin来进行拆分和管理,来获得更直观的资源展示。
这篇文章记录一下现在使用的项目结构,以便后续的复用
项目结构
➜ my-server tree .
.
├── eu-central-1
│ ├── ec2.tf
│ ├── lbs.tf
│ ├── main.tf
│ ├── security.tf
│ └── vars.tf
├── main.tf
├── set_env.sh
├── terraform.tfstate.d
│ ├── terraform.tfstate
│ └── terraform.tfstate.backup
└── us-east-1
├── ec2.tf
├── main.tf
└── security.tf
项目结构如上面的目录树,每一个区域都拆分到了单独的文件夹中,对于多region的中小型项目,可以清晰的拆分各个区域的资源。
配置文件
在maintf 中,来设置 provider。通过 module 来引入,对应的模块的文件夹。
# Main.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "5.63.1"
}
}
backend "local" {
path = "./terraform.tfstate.d/terraform.tfstate"
}
}
module "us_east" {
source = "./us-east-1"
}
module "eu_central" {
source = "./eu-central-1"
}
在子文件夹中,就可以直接在main 里面设置provider 配置,这里设置的是region区域。
# us-east-1 main.tf
provider "aws" {
region = "us-east-1"
}
# eu-central-1 main.tf
provider "aws" {
region = "eu-central-1"
}
通过上面的模块引入之后,就可以使用,标准的方式来预定义一些变量了 。
variable "aws_vpc_id" {
type = string
description = "AWS VPC ID"
default = "vpc-xxxx"
}
locals {
vpc_info = {
id = "vpc-0936ab715c6cee712"
sub_private_a = "subnet-xxxx111"
sub_private_b = "subnet-xxxx222"
}
}
variable "public_subnets" {
description = "List of Availability Zones"
type = list(string)
default = ["subnet-xxxxcccc", "subnet-xxxxdddd"]
}
后
以上记录一下,对于多region 的场景下如何来设计项目的目录结构来进行合理的划分和隔离。
这样避免了单个层级,堆叠了多区域/多文件 带来的管理混乱的问题。