Terraform 환경별로 사용하기

어느정도 main.tf 작성을 끝내고, dev에서 테스트가 잘 되었다보니 이제 환경별로 이를 적용하고 관리해야했다. 우리는 migration을 해야했으므로 기존 인프라에 대한 정보도 variable로 좀 관리 되어야 할 필요가 있었다. 기타 네이밍들도 마찬가지고 뭐. 그래서 테라폼 공식 홈페이지에 Input Variables를 꼼꼼히 살피고, tf.vars를 이용해서 apply할 때 option으로 먹이는게 제일 나은 관리처럼 보였다. 해당 전략이 practice가 있는지 찾아보았고, 역시 공식 문서에 나와있었다.

나의 경우에는 root module안에서 다 관리하도록 했다. (참고로 directory 전략은 케바케로 엄청 많다. 상황에 따라서 적당히 골라서 쓰면 된다)

$ terraform
.
├── main.tf
├── variables.tf
├── dev.tfvars
├── st.tfvars
└── prod.tfvars

문서와 차이점이 있는데 tfstate의 경우 우리는 원격에서 관리하기로 해서 tfstate를 로컬에 저장해두지 않는다. 그렇기 때문에 terraform workspace를 사용한다거나 환경별로 디렉토리를 관리할 필요가 없게 되었다.

variables에서 관리되는 variabledefault값은 안전하게 dev껄로 해두었고 그거랑 상관 없이 환경별로 tfvars를 정의하고 terraform apply -var-file="dev.tfvars"처럼 option을 추가해서 환경별로 인프라를 관리하도록 했다. 이렇게 환경별로 특별히 다른 infra를 관리하는게 아닌 이상 잘 관리될 것이다.

variables.tf 예시

variable "env" {
  type    = string
  default = "dev"
}

variable "region" {
  type    = string
  default = "us-east-1"
}

variable "internal_route53_id" {
  type    = string
  default = "ZAADSFADSFADSF"
}

variable "internal_vpc_id" {
  type    = string
  default = "vpc-adslfkjasdkfl122a"
}

variable "internal_security_group_id" {
  type    = string
  default = "sg-aldksfjalksdfaskl"
}

dev.tfvars 예시

env                        = "dev"
region                     = "us-east-1"
internal_route53_id        = "ZAADSFADSFADSF"
internal_vpc_id            = "vpc-adslfkjasdkfl122a"
internal_security_group_id = "sg-aldksfjalksdfaskl"

Reference

Discuss this post here.

Published: 2021-02-03

Tagged: Fargate k8s Terraform EKS

Archive