후니의 IT인프라 사전

State 본문

카테고리 없음

State

james_janghun 2024. 9. 13. 18:51

테라폼은 Stateful(상태가 있는) 애플리케이션이다. 프로비저닝 결과에 따라 State를 저장하고 프로비저닝한 모든 내용을 저장된 상태로 추적한다.

 

로컬에서는 terraform.tfstate 파일에 Json으로 저장한다.

state에는 작업자가 정의한 코드와 실제 반영된 프로비저닝 결과를 저장하고, 이 정보를 토대로 이후의 리소스 생성, 수정, 삭제에 대한 동작 판단 작업을 수행한다.

 

State의 목적과 의미

- state에는 테라폼 구성과 실제를 동기화하고 각 리소스에 고유한 아이디(리소스 주소)로 맵핑

- 리소스 종속성과 같은 메타데이터를 저장하고 추적

- 테라폼 구성으로 프로비저닝된 결과를 캐싱하는 역할을 수행

 

resource "random_password" "password" {
  length = 16
  special = true
  override_special = "!@#$"
}

 

테라폼에서는 type과 name으로 고유한 리소스를 분류한다. 해당 리소스의 속성과 인수를 구성과 비교해 대상 리소스를 생성, 수정, 삭제한다.

 

plan을 실행하면 암묵적으로 refresh 동작을 수행하면서 리소스 생성의 대상과 state를 기준으로 비교하는 과정을 거친다. 다만 state양에 따라서 실행시간의 차이가 발생하기 때문에 refresh=false 플래그를 통해서 state를 기준으로 실행 계획을 작성하고 실제 대상환경과 동기화 작업을 하지 않을 수 있다.

time terraform plan

time terraform plan -refresh=false

time 명령어를 통해서 시간을 측정할 수 있는데, refresh 옵션 값에 따른 차이를 확인해보자.

 

 

따라서 plan을 실행하게 되면 state파일과 실제 리소스도 비교하기 때문에 만약 실제 리소스가 없다면 추가로 생성하려고 할 것이다. 다만 refresh=false를 하게되면 기존 리소스와 sync 작업을 refresh하지 않기 때문에 리소스가 없더라도 추가로 생성하지 않을 수 있다는 것을 주의해야한다.

 

https://nali.tistory.com/385

 

replace 동작은 기본값을 삭제 후 생성하지만 lifecycle의 create_before_destory 옵션을 통해 생성 후 삭제를 수행하도록 설정할 수 있다.

 

워크스페이스

state를 관리하는 논리적인 가상 공간을 워크스페이스라고 한다. 테라폼 구성 파일은 동일하지만 작업자는 서로 다른 state를 갖는 실제 대상을 프로비저닝 할 수 있다. 기본 워크스페이스는 default이다.

https://themapisto.tistory.com/205

 

 

사용법

terraform [global options] workspace

 

사용 중인 워크스페이스 리스트

*가 현재 사용 중인 워크스페이스의 위치이다.

terraform workspace list
* default
  dev
  prod

 

새로운 워크스페이스 생성

terraform workspace new myworkspace1

 

새로운 워크스페이스가 생성되면 실행한 루트 모듈 디렉터리 terraform.tfstate.d 디렉터리가 생성되고 하위에 생성한 워크스페이스 이름이 있게 된다.

 

현재 워크스페이스 확인

terraform workspace show