이제 테라폼 워크스페이스(Workspace)는 하나의 프로젝트라고 했습니다. 이를 통해서 workspace1, workspace2... 를 파생시킬 수 있습니다. 각각의 워크스페이스에 대한 tfvars파일을 만들어서 손쉽게 workspace를 관리할 수 있습니다. 간단히 실습해 보도록 하겠습니다.
/main.tf
provider "aws" {
region = "ap-northeast-2"
}
variable "vpc_name" {
description = "생성되는 VPC의 이름"
type = string
}
locals {
common_tags = {
Project = "Network"
Owner = "Hyunseo"
}
}
output "vpc_name" {
value = module.vpc.name
}
output "vpc_id" {
value = module.vpc.id
}
output "vpc_cidr" {
description = "생성된 VPC의 CIDR영역"
value = module.vpc.cidr_block
}
output "subnet_groups" {
value = {
public = module.subnet_group__public
private = module.subnet_group__private
}
}
module "vpc" {
source = "tedilabs/network/aws//modules/vpc"
version = "0.24.0"
name = var.vpc_name
cidr_block = "10.0.0.0/16"
internet_gateway_enabled = true
dns_hostnames_enabled = true
dns_support_enabled = true
tags = local.common_tags
}
module "subnet_group__public" {
source = "tedilabs/network/aws//modules/subnet-group"
version = "0.24.0"
name = "${module.vpc.name}-public"
vpc_id = module.vpc.id
map_public_ip_on_launch = true
subnets = {
"${module.vpc.name}-public-001/az1" = {
cidr_block = "10.0.0.0/24"
availability_zone_id = "apne2-az1"
}
"${module.vpc.name}-public-002/az2" = {
cidr_block = "10.0.1.0/24"
availability_zone_id = "apne2-az2"
}
}
tags = {}
}
module "subnet_group__private" {
source = "tedilabs/network/aws//modules/subnet-group"
version = "0.24.0"
name = "${module.vpc.name}-private"
vpc_id = module.vpc.id
map_public_ip_on_launch = false
subnets = {
"${module.vpc.name}-private-001/az1" = {
cidr_block = "10.0.10.0/24"
availability_zone_id = "apne2-az1"
}
"${module.vpc.name}-private-002/az2" = {
cidr_block = "10.0.11.0/24"
availability_zone_id = "apne2-az2"
}
}
tags = local.common_tags
}
module "route_table__public" {
source = "tedilabs/network/aws//modules/route-table"
version = "0.24.0"
name = "${module.vpc.name}-public"
vpc_id = module.vpc.id
subnets = module.subnet_group__public.ids
ipv4_routes = [
{
cidr_block = "0.0.0.0/0"
gateway_id = module.vpc.internet_gateway_id
},
]
tags = local.common_tags
}
module "route_table__private" {
source = "tedilabs/network/aws//modules/route-table"
version = "0.24.0"
name = "${module.vpc.name}-private"
vpc_id = module.vpc.id
subnets = module.subnet_group__private.ids
ipv4_routes = []
tags = local.common_tags
}
기존과 동일하게, 변수로 이름을 주입받습니다. 이제 workspace를 default를 제외한 dev, staging, prod총 3개를 더 만들어 보도록 하겠습니다.
$ terraform workspace new dev
$ terraform workspace new staging
$ terraform workspace new prod
그리고 각각 다음과 같이 workspace들이 생성된 것을 보실 수 있습니다.
그리고 파일구조를 보면 terraform.tfstate.d파일 안에 각각의 workspace들이 있고 그 안에 apply하게 되면 tfstate파일이 각각 존재하는 것을 보실 수 있습니다. apply를 위해 dev.tfvars, staging.tfvars, prod.tfvars를 각각 만들어 주고 terraform workspace select를 통해서 apply를 해보도록 하겠습니다.
기본적인 환경변수는 위와 같이 작성해 주었습니다.
손쉽게 workspace를 관리할 수 있는 것을 보실 수 있습니다.
'DevOps > AWS Architecture' 카테고리의 다른 글
[ DevOps ] - (테라폼을 이용한 인프라 관리) 테라폼 terraform_remote_state 데이터소스 활용 (0) | 2022.08.02 |
---|---|
[ DevOps ] - (테라폼을 이용한 인프라 관리) 테라폼 모듈 작성 (0) | 2022.08.02 |
[ DevOps ] - (테라폼을 이용한 인프라 관리) 테라폼 리소스 강제 교체하기 (taint & untaint) (0) | 2022.08.01 |
[ DevOps ] - (테라폼을 이용한 인프라 관리) 테라폼 상태 관리 (0) | 2022.08.01 |
[ DevOps ] - (테라폼을 이용한 인프라 관리) 테라폼 상태 저장소(Backend) (0) | 2022.08.01 |