테라폼 상태파일 이란?
테라폼을 사용해 인프라를 배포하면 별다른 설정 없이 테라폼 실행 위치에 *.tfstate 파일이 생성되는 것을 발견 할 수 있다.
이 파일에는 테라폼이 관리하는 모든 리소스의 상태, 구성 및 관계 등이 포함되어 현재 인프라의 현재 상태를 알 수 있도록 해준다. 테라폼은 이 상태파일을 사용하여 인프라를 관리하고 추적하며, 테라폼 명령을 실행 할 때마다 상태파일을 업데이트 하면서 변경사항을 식별하고 적용한다.
Remote state 구성
왜 remote state를 구성하여 상태파일을 관리해야 할까?
Local state를 사용하면 안되는 이유는 다음과 같다.
- 개발자들이 각자 로컬에서 테라폼 명령어를 실행하고 관리한다면, 각자 다른 상태파일을 갖게 되어 현재상태로 동기화 되지 않은 상태파일을 사용하게 된다.
- 동일한 상태파일 공유를 위해 git과 같은 형상관리툴을 사용하면 아래와 같은 문제가 발생한다.
- 동일한 리소스에 대해서 여러 개발자가 동시에 테라폼 명령하는 것을 막을 수 없음
- pull을 받지 않고 apply를 실행한다던가, apply후 commit/push를 잊는 실수를 저지를 수 있음
- 상태파일은 초기 DB 비밀번호 같은 민감한 정보를 포함 할 수 있는데, local state를 사용하면 상태파일은 JSON plain-text로 저장된다.
remote state를 사용하면 위의 문제들을 해결하고 안전하게 상태파일을 관리 할 수 있다.
설정 방법
설정은 간단하다. 아래와 같이 상태파일을 관리할 위치를 명시해 주면 된다.
아래 예제는 S3 버킷을 이용해 관리하는 방법이다.
terraform {
backend "s3" {
bucket = "<버킷이름>"
key = "<상태파일 저장 경로>/terraform.tfstate"
region = "<리전>"
}
}