Terraform Associate 004 #5 state 관리: 백엔드, 잠금, state 명령, 민감 정보

4 분 소요

state는 Associate 시험에서 비중이 가장 큰 축의 하나입니다. 기초 #5와 #9, 운영 #2에서 실습으로 다진 내용을 시험이 묻는 형태, 즉 “이 명령은 무엇을 바꾸는가”, “이 상황의 올바른 대응은"의 각도로 재정렬하겠습니다.

state의 목적과 위치 #

시험이 기대하는 정의부터. state는 설정의 리소스와 실제 인프라 객체의 매핑이며, plan이 차이를 계산할 수 있게 하는 근거이자 리소스 간 의존성·속성값의 기록입니다. 기본 동작에서는 작업 디렉터리의 terraform.tfstate 파일(로컬 백엔드)에 저장되고, 백엔드 설정으로 원격 저장소에 둘 수 있습니다. “state 없이 테라폼이 동작하는가"라는 취지의 선택지는 오답입니다. state가 없으면 테라폼은 무엇을 관리 중인지 알 수 없습니다.

로컬 vs 원격 백엔드 #

원격 백엔드(S3, HCP Terraform 등)가 푸는 문제 세 가지는 기초 #9 그대로 시험 포인트입니다.

  1. 팀 공유: 모두가 같은 state를 봅니다.
  2. 잠금(locking): 동시 실행이 state를 어긋내는 사고를 막습니다. 백엔드가 잠금을 지원하는 경우 plan·apply가 자동으로 잠금을 걸며, 별도 명령이 필요 없습니다.
  3. 보관 안정성: 로컬 디스크 분실·삭제 위험에서 벗어납니다.

잠금 관련 단골 문항은 둘입니다. “잠금 에러를 만나면?“의 1차 답은 기다린다(다른 실행이 진행 중이라는 정상 신호)이고, force-unlock은 실행 주체가 없음을 확인한 뒤의 최후 수단입니다. 그리고 force-unlock은 잠금만 풀 뿐 state 내용을 바꾸지 않는다는 성질도 구분 포인트입니다.

state 명령: 무엇을 바꾸고 무엇을 남기는가 #

명령하는 일실제 인프라에 영향
state list관리 중 리소스 주소 목록없음(읽기)
state show 주소한 리소스의 속성 출력없음(읽기)
state mv A Bstate 안에서 주소 변경없음(기록만 이동)
state rm 주소state에서 제거(관리 포기)없음(리소스는 남음)

시험이 노리는 지점은 오른쪽 열입니다. state rm은 리소스를 삭제하지 않고 테라폼의 관리에서만 뺍니다. 삭제는 destroy(또는 코드에서 블록 제거 후 apply)의 일입니다. state mv는 리팩터링에서 이름·모듈 이동 시 재생성을 막는 도구이고, 선언형 짝인 moved 블록(실전 #9), state rm의 짝인 removed 블록, 기존 리소스를 편입하는 import 블록(운영 #2)까지 명령형·선언형 대응을 묶어 기억하면 관련 문항 전부에 대응됩니다.

명령형·선언형 대응
명령형            선언형(코드, 리뷰 가능)
terraform import  →  import 블록
state mv          →  moved 블록
state rm          →  removed 블록

refresh: 지금은 plan의 일부 #

옛 시험 자료에 나오는 terraform refresh 단독 명령은 폐기 방향이며, 현행 답은 plan·apply가 실행 시 자동으로 refresh를 수행한다는 것과, 어긋남만 점검하고 싶으면 plan -refresh-only를 쓴다는 것입니다(#4에서 정리한 그 옵션입니다). 드리프트 개념과 함께 묶여 출제됩니다.

state 안의 민감 정보 #

state에는 관리 리소스의 모든 속성이 평문으로 저장됩니다. sensitive 표시는 화면 출력만 가리고 state 내용은 가리지 않는다는 것(기초 #5에서 직접 확인한 사실)이 그대로 출제됩니다. 따라서 정답 방향의 서술은 다음입니다.

  • state 파일을 버전 관리에 커밋하지 않는다
  • 원격 백엔드에 두고 저장 시 암호화와 접근 통제를 적용한다
  • state 접근 권한 자체를 시크릿 접근 권한으로 취급한다

그리고 004의 신규 축인 write-only 인수가 “값이 state에 아예 저장되지 않는” 더 근본적인 대응이라는 연결까지 이어지는데, 그 상세는 #8에서 다룹니다.

정리 #

이번 글에서 다룬 내용입니다.

  • state는 설정과 실제 인프라의 매핑이며 plan의 근거입니다. 기본 위치는 로컬 terraform.tfstate이고 백엔드로 원격화합니다
  • 원격 백엔드의 가치는 공유, 자동 잠금, 보관 안정성입니다. 잠금 에러의 1차 답은 대기이고 force-unlock은 최후 수단이며 state 내용은 건드리지 않습니다
  • state mv·rm은 실제 인프라를 바꾸지 않습니다. rm은 삭제가 아니라 관리 제외입니다
  • import·mv·rm의 선언형 짝이 import·moved·removed 블록입니다
  • refresh는 plan에 내장됐고 점검은 -refresh-only입니다. state는 평문이므로 커밋 금지·암호화·접근 통제가 정답 방향이고, 근본 대응인 write-only는 #8에서 잇습니다

다음 글(#6 모듈)에서는 모듈의 소스 지정과 버전, 입출력 문법이라는, 짧지만 문항 밀도가 높은 영역을 정리합니다.

X