티스토리 뷰

 

이번 포스팅에서는 테라폼 상태(state)관리에 대해 알아보겠습니다.

 

 

| 테라폼 상태(Terraform state)란?

 

 

테라폼 state 관리는 대표적으로 Local statebackend state로 나누어집니다.

 

terraform init & terraform apply 명령어를 실행하면 다음과 같은 파일들이 생성됩니다.

다음과 같은 파일들은 local에서 관리됩니다.

 

.terraform

.terraform.lock.hcl

terraform.tfstate

 

.terraform.* 형태의 파일 : terraform init 명령어를 실행할 때 생성

terraform.tfstate:  terraform apply 명령어 실행 후 생성

 

.terraform.lock.hcl은 잠금 파일이며 경쟁 상태에서 생길 수 있는 문제들을 피할 수 있게 해줍니다.

 

테라폼의 좋은점은 team 단위로 움직일 때 인프라를 일관적으로 유지할 수 있습니다.

 

하지만 개인 프로젝트에서는 굳이 테라폼을 적용하며 인프라를 관리할 필요가 없다고 생각합니다.

 

이제부터는 backend를 활용한 state 관리를 알아보겠습니다.

 

 

 

1. AWS S3를 이용한 테라폼 state 관리를 알아보겠습니다.

 

# 같은 region에 같은 bucket 으로 설정해야함 
terraform {
  backend "s3" {
    bucket = "fb-devops-terraform"
    key    = "s3-backend/terraform.tfstate"
    region = "ap-northeast-2"
  }
}


provider "aws" {
  region = "ap-northeast-2"
}

 

다음과 같이 s3 bucket으로 state를 관리할 때 먼저 s3 bucket을 만들어주고 bucket에 해당 버킷명을 적어줍니다.

 

주의할 점

local -> backend로 세팅 하고 있습니다.

bucket은 global bucket이기 때문에 다른 사용자들이 미리 만들어 놓은 bucket과 겹치는 것을 유의하시길 바랍니다.

또한 terraform apply 전에 terraform init을 먼저 실행하여 줍니다. (state 저장소가 변경되는 것이기 때문입니다. 기존에는 local state로 관리하고 있었기 때문에)

 

 

key 값으로는 해당 state 파일이 어떤 경로에서 관리할 것인지 명시해줍니다.

region은 aws region과 같아야하며 다를 경우에는 추가적인 세팅이 필요합니다.

 

 

위에 사진과 같이 s3 bucket안에 key 값으로 설정한 value 경로로 폴더가 만들어집니다.

 

 

 

2. Terraform cloud(remote backend)

 

remote backend를 사용하기 위해서는 다음 사이트에 가입을 먼저 해야 합니다.

https://app.terraform.io/

 

Terraform Cloud by HashiCorp

 

app.terraform.io

그 후 새로운 organization을 만들어 줍니다.

 

 

위의 코드와 차이점은 "s3" -> remote 로 바뀌었습니다.

 

terraform {
  backend "remote" {
    hostname     = "app.terraform.io"
    organization = "terraform-test-xion"
    workspaces {
    	name = "tf-cloud-backend"
    }
  }
}

 

organization :  방금 만들었던 조직 name을 적어주시면 됩니다.

workspaces : 만들고 싶은 workspaces의 이름을 적어 줍니다.

 

테라폼 클라우드를 이용하기 위해서는 토큰 설정이 필요합니다

 

테라폼 클라우드 토큰 설정

여기서 토큰을 발급 받으세요!

 

토큰을 발급 받은 후

 

홈 디렉터리-terraformec file에 token을 등록해줘야 합니다.

편한 에디터로 등록해주세요 저는 nvim을 사용하겠습니다.

nvim ~/.terraformrc

 

token에 값을 넣어주세요.

 

 

그 후 이전에 s3 backend로 셋팅한 값 제거 후 init 을 실행합니다.

 

terraform destroy

terraform init

 

 

처음 실행하면 마이그레이션 하라고 나오는데 그대로 실행해 줍니다.

 

 

 

workspaces 확인 및 remote 에서 local 설정 해주기.

 

 

그 후 apply 명령어를 실행해주면 됩니다.

terraform apply