#State

9 편의 글

tfstate에 시크릿이 평문으로 저장됐을 때: 키 회전과 재발 방지
5 분 소요

tfstate에 시크릿이 평문으로 저장됐을 때: 키 회전과 재발 방지

tfstate가 sensitive 표시와 무관하게 값을 평문으로 담는 구조부터 정리합니다. 노출 범위를 판단하는 순서, state 정리보다 키 회전이 먼저인 이유, git에 state가 커밋된 경우의 히스토리 정리, 그리고 재발 방지로서의 ephemeral 리소스와 write-only 인수, S3 백엔드 암호화와 접근 통제, 시크릿을 애초에 state에 남기지 않는 설계까지 다루겠습니다.

terraform plan이 느릴 때: refresh 부하, 병렬도, 스택 분할 신호
4 분 소요

terraform plan이 느릴 때: refresh 부하, 병렬도, 스택 분할 신호

plan 소요 시간의 본체가 diff 계산이 아니라 리소스마다 API를 읽는 refresh라는 사실부터 정리합니다. 리소스 수와 API 왕복이 시간을 결정하는 구조, -refresh=false를 써도 되는 국면과 안 되는 국면, parallelism 조정이 rate limit과 부딪히는 지점, -target이 성능 도구가 아닌 이유, 그리고 근본 대책인 스택 분할로 넘어가야 하는 신호까지 다루겠습니다.

terraform plan은 성공했는데 apply가 실패할 때: 원인과 부분 적용 복구
5 분 소요

terraform plan은 성공했는데 apply가 실패할 때: 원인과 부분 적용 복구

plan이 통과했는데 apply가 실패하는 이유를 구조부터 정리합니다. plan은 스키마와 참조만 검증하고 실제 API 검증은 apply에서 처음 일어난다는 비대칭, 권한 부족과 IAM 전파 지연, 서비스 쿼터, 전역 이름 충돌 같은 전형 원인 5가지, apply가 트랜잭션이 아니라서 생기는 부분 적용 상태를 안전하게 복구하는 절차, 이미 존재한다는 에러가 났을 때의 import 판단까지 다루겠습니다.

terraform.tfstate 삭제했을 때 복구하는 법: 백업 파일, S3 버저닝, 재임포트 순서
4 분 소요

terraform.tfstate 삭제했을 때 복구하는 법: 백업 파일, S3 버저닝, 재임포트 순서

state 파일이 사라졌을 때 나타나는 증상과 그대로 apply 하면 안 되는 이유부터 정리합니다. 로컬 terraform.tfstate.backup 확인, S3 버저닝에서 이전 버전을 복원하는 명령, 백업이 전혀 없을 때 import로 state를 재구축하는 마지막 경로까지 우선순위대로 다루고, 같은 사고를 구조적으로 막는 백엔드 설정을 정리하겠습니다.

terraform import 사용법: import 블록으로 기존 리소스를 코드로 가져오기
4 분 소요

terraform import 사용법: import 블록으로 기존 리소스를 코드로 가져오기

콘솔에서 만든 리소스를 테라폼 관리로 가져오는 절차를 import 블록 기준으로 정리합니다. 리소스별 import ID를 찾는 위치, -generate-config-out으로 코드 초안을 생성하는 방법, plan이 변경 없음이 될 때까지 코드를 실제에 맞추는 요령, 옛 CLI 명령 방식과의 차이와 여러 리소스를 한 번에 편입할 때의 순서까지 다루겠습니다.

terraform state lock 에러 해결: 원인 확인과 force-unlock 판단 기준
4 분 소요

terraform state lock 에러 해결: 원인 확인과 force-unlock 판단 기준

Error acquiring the state lock 에러의 Lock Info를 읽는 법부터 정리합니다. 동료나 CI가 실행 중인 정상 상황과 비정상 종료로 잠금만 남은 상황을 구분하는 확인 절차, force-unlock을 써도 되는 조건과 잘못 쓰면 state가 손상되는 이유, DynamoDB 잠금 방식일 때의 확인 위치와 재발 방지 설정까지 다루겠습니다.

테라폼 운영 강좌 #2 drift와 state 수술: 정기 감지, import 블록, removed 블록
4 분 소요

테라폼 운영 강좌 #2 drift와 state 수술: 정기 감지, import 블록, removed 블록

코드 밖에서 일어난 변경을 정기 plan 워크플로와 -detailed-exitcode로 감지하는 체계를 만들고, drift에 대한 세 가지 대응(코드로 흡수, apply로 되돌림, ignore_changes)의 선택 기준을 정리합니다. 콘솔에서 태어난 리소스를 import 블록으로 편입하고 -generate-config-out으로 코드 초안을 뽑는 절차, state에서만 제거하는 removed 블록까지 다루겠습니다.

테라폼 기초 강좌 #9 원격 state와 협업: S3 백엔드, 네이티브 잠금, 민감 정보 보호
5 분 소요

테라폼 기초 강좌 #9 원격 state와 협업: S3 백엔드, 네이티브 잠금, 민감 정보 보호

로컬 state가 팀 협업에서 부딪히는 세 가지 문제를 짚고, S3 백엔드로 state를 옮기는 설정과 init의 마이그레이션 절차를 정리합니다. use_lockfile 네이티브 잠금으로 동시 실행을 막는 원리와 DynamoDB 방식이 레거시가 된 배경, state 버킷의 버저닝과 암호화, 접근 제어까지 다루고 기초 시리즈를 마무리하겠습니다.

테라폼 기초 강좌 #5 state의 정체: tfstate 파일 구조와 plan이 변경을 계산하는 원리
5 분 소요

테라폼 기초 강좌 #5 state의 정체: tfstate 파일 구조와 plan이 변경을 계산하는 원리

terraform.tfstate 파일을 직접 열어 구조를 확인하고, plan이 코드, state, 실제 인프라 세 가지를 비교해 변경을 계산하는 원리를 정리합니다. state에 민감 정보가 평문으로 남는 문제와 커밋 금지 규칙, state list와 show, mv, rm 같은 조작 명령, state를 잃었을 때 일어나는 일까지 다루겠습니다.