Isolating terraform state files

kimchigood·2022년 11월 11일
0

Terraform Study

목록 보기
3/6
post-thumbnail

이번 포스팅은 terraform 상태 파일 격리에 대한 내용이다. 포스팅을 통해서 terraform은 어떻게 상태 파일을 격리하는지 알아보자.
실습은 How to manage Terraform state에서 세팅한 backend.tf, main.tf를 사용한다.


참조: https://confluence.atlassian.com/adminjiraserver/promoting-jira-configuration-from-development-to-production-1167739614.html

terraform 상태 파일 격리는 크게 두 가지방식이 있다.

  • Isolation via workspaces
  • Isolation via file layout

Isolation via workspaces

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를 통해 상태파일을 격리가 된다.

Isolation via file layout

file layout을 통한 격리는 말 그대로 file layout을 통해 dev, stage, prod 방식으로 나눌 수 도 있고, database, serivce, instance와 같이 리소스 별로 나누는 방법도 있다.


참조:https://www.reddit.com/r/Terraform/comments/k0fnv7/best_folder_structure_for_single_tenant/

Wrap up

두 가지 방식 모두 장단점이 있다. 각자의 프로젝트의 상황이나 규모에 따라 알맞는 방식을 선택하는게 좋을 것 같다.
file layou 방식은 다음 포스팅에서 module과 같이 실습까지 진행해보겠다.

profile
Shout out to Kubernetes⎈

0개의 댓글