이번 포스팅은 terraform 상태 파일 격리에 대한 내용이다. 포스팅을 통해서 terraform은 어떻게 상태 파일을 격리하는지 알아보자.
실습은 How to manage Terraform state에서 세팅한 backend.tf, main.tf를 사용한다.
terraform 상태 파일 격리는 크게 두 가지방식이 있다.
workspace 전략은 git branch 전략과 비슷한 모습이다. 기본적으로 terraform에서 그냥 작업을 하면, default workspace에서 작업하게된다.
$ terraform workspace list
* default
# main.tf
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_instance" "example" {
ami = "ami-0c76973fbe0ee100c"
instance_type = "t2.micro"
tags = {
Name = terraform.workspace == "default" ? "test-t101-week3" : "t101-week3"
}
}
terraform {
backend "s3" {
bucket = "nowjean-t101study-tfstate-week3"
key = "workspaces-default/terraform.tfstate"
region = "ap-northeast-2"
dynamodb_table = "terraform-locks-week3"
}
}
자, 그럼 workspace를 하나 생성해보자.
# workspace 생성
$ terraform workspace new dev
# workspace 확인
$ terraform workspace list
default
* dev
그럼 dev workspace에서 main.tf를 생성해주면 어떻게 될까?
$ terraform plan
Plan: 1 to add, 0 to change, 0 to destroy.
default workspace에서 main.tf로 이미 ec2가 생성되어 있었는데, dev workspace를 새로 생성하고 terraform plan을 해보니, ec2를 다시 생성한다고 나온다.
$ terraform apply -auto-approve
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
terraform.ftstate 가 저장되는 S3를 확인해보자.
env/dev 경로에 terrform.tfstate 파일이 생겼다. 이렇게 workspace를 통해 상태파일을 격리가 된다.
file layout을 통한 격리는 말 그대로 file layout을 통해 dev, stage, prod 방식으로 나눌 수 도 있고, database, serivce, instance와 같이 리소스 별로 나누는 방법도 있다.
참조:https://www.reddit.com/r/Terraform/comments/k0fnv7/best_folder_structure_for_single_tenant/
두 가지 방식 모두 장단점이 있다. 각자의 프로젝트의 상황이나 규모에 따라 알맞는 방식을 선택하는게 좋을 것 같다.
file layou 방식은 다음 포스팅에서 module과 같이 실습까지 진행해보겠다.