[Terraform] 독립적인 배포 환경 만들기DevOps/Terraform2022. 5. 3. 22:07
Table of Contents
728x90
해당 이미지는 마켓컬리 DevOps 팀의 Terraform 배포 환경이다.
dev, qa, stg 환경으로 분리하여 코드를 관리하고 있다.
보통 개발을 할 때 하나의 환경에서 진행하지 않고 여러 환경을 세팅한 뒤 test를 거친 후 실제 서비스로 배포한다.
Terraform에서도 같은 모듈을 참조하면서 목적에 따라 다른 환경을 세팅할 수 있다.
module-test/module/vpc/main.tf
variable "cidr" {
type = string
}
resource "asw_vpc" "my_vpc" {
cidr_bloc = var.cidr
tags = {
Name = "My_VPC"
}
}
모든 환경에서 사용할 공통 vpc 모듈이다.
[vagrant@controller module-test]$ tree
.
├── main.tf
└── module
└── vpc
└── main.tf
module-test/main.tf
module "test-vpc" {
source = "./module/vpc" # 현재 디렉토리의 module의 vpc에서 참조한다.
cidr = "172.18.0.0/16"
}
모듈을 이렇게 참조하여 사용할 수 있다.
독립적인 배포 환경을 세팅해보자
[vagrant@controller module-test]$ mkdir -p env/dev
[vagrant@controller module-test]$ mv main.tf env/dev
[vagrant@controller module-test]$ mkdir -p env/stage
[vagrant@controller module-test]$ mkdir -p env/prod
[vagrant@controller module-test]$ tree
cd env/dev
terraform init
dev, stage, prod 환경을 만든다.
[vagrant@controller module-test]$ tree
.
├── env
│ ├── dev
│ │ └── main.tf
│ ├── prod
│ └── stage
├── module
│ └── vpc
│ └── main.tf
└── terraform.tfstate
6 directories, 3 files
트리 구조는 다음과 같다.
약간의 수정을 거쳐 실제로 환경에 따라서 terraform 코드를 다르게 배포해보자
cp env/dev/main.tf env/prod/
cp env/dev/main.tf env/stage/
[vagrant@controller module-test]$ tree
.
├── env
│ ├── dev
│ │ └── main.tf # 실행할 곳, dev의 root 모듈
│ ├── prod
│ │ └── main.tf # 실행할 곳, prod의 root 모듈
│ └── stage
│ └── main.tf # 실행할 곳, stage의 root 모듈
├── module # 각 환경은 모두 하위 모듈을 참조하고 있다.
│ └── vpc
│ └── main.tf
└── terraform.tfstate
6 directories, 5 files
[vagrant@controller module-test]$ code env/prod/main.tf
[vagrant@controller module-test]$ code env/dev/main.tf
[vagrant@controller module-test]$ code env/stage/main.tf
각 파일의 cidr 블록을 prod 172.18.0.0/16 dev 172.19.0.0/16 stage 172.20.0.0/16 로 지정한다.
dev
[vagrant@controller module-test]$ cd env/dev
[vagrant@controller dev]$ ls
main.tf
[vagrant@controller dev]$ terraform plan
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# module.test-vpc.aws_vpc.my_vpc will be created
+ resource "aws_vpc" "my_vpc" {
+ arn = (known after apply)
+ cidr_block = "172.19.0.0/16"
stage
[vagrant@controller module-test]$ cd env/stage/
[vagrant@controller stage]$ terraform init
[vagrant@controller stage]$ terraform plan
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# module.test-vpc.aws_vpc.my_vpc will be created
+ resource "aws_vpc" "my_vpc" {
+ arn = (known after apply)
+ cidr_block = "172.20.0.0/16"
prod
[vagrant@controller module-test]$ cd env/prod
[vagrant@controller prod]$ terraform init
[vagrant@controller prod]$ terraform plan
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# module.test-vpc.aws_vpc.my_vpc will be created
+ resource "aws_vpc" "my_vpc" {
+ arn = (known after apply)
+ cidr_block = "172.18.0.0/16"
실행할 파일은 각 디렉토리(dev, prod, stage)에 있는 루트 모듈이지만 모듈은 하위 모듈을 참조하고 있다.
즉, 변수를 어떻게 세팅하느냐에 따라 환경이 달라진다.
728x90
'DevOps > Terraform' 카테고리의 다른 글
[Terraform] input, local, output, data 비교 (0) | 2022.10.20 |
---|---|
[Terraform] for_each 구문 (0) | 2022.10.19 |
[Terraform] 백엔드 (Backend) (0) | 2022.05.03 |
[Terraform] 데이터 소스 (Data Source) (1) | 2022.04.25 |
[Terraform] Count (0) | 2022.04.25 |
@TTOII :: 뭉게뭉게 클라우드
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!