"프로덕션에서 AWS 콘솔을 절대 만지지 마라"는 극단적인 규칙처럼 들린다. 그렇지 않다. 이는 클라우드 네이티브 팀에서 가장 중요한 운영 원칙이며, 이를 위반하는 대가는 주요 인시던트를 유발할 때까지 조용히 누적된다.

이 글은 그 이유와 실제 팀에서 IaC-First 개발을 강제하는 방법을 설명한다.

State Drift 문제

Terraform(및 OpenTofu)은 어떤 인프라가 존재하는지 나타내는 State 파일을 유지한다. Apply 시 Terraform은 State 파일을 구성과 비교하여 현실을 구성에 맞추기 위한 최소한의 변경 집합을 만든다.

AWS 콘솔에서 클릭하며 리소스를 생성하거나 수정하면, State 파일을 변경하지 않고 현실을 변경하는 것이다. 콘솔은 진실의 원천(Single Source of Truth)이 아니다. IaC가 그 역할이다. 콘솔은 거짓말이다.

Import 워크플로우

AWS에는 존재하지만 Terraform 구성에는 없는 리소스가 있을 때 올바른 조치는 Import다. 절대 콘솔에서 리소스를 삭제하고 Terraform으로 다시 생성하지 마라. Import -> 조정 -> Apply.

핵심 요약

  • AWS 콘솔은 읽기 전용이다. 모든 인프라 변경은 IaC에 속한다.
  • AWS에 존재하지만 Terraform에 없는 리소스는: Import하고, 구성을 조정한 다음 Apply하라.
  • 실패하는 리소스를 우회하기 위해 절대 -exclude를 사용하지 마라. 근본 원인을 수정하라.
  • 모든 Terraform 작업을 배포 스크립트로 감싸라. 기본값은 Plan, Apply에는 명시적 의도가 필요하다.
  • 모든 인프라 PR에 Plan 출력을 포함하라. 예상치 못한 Destroy는 PR을 차단해야 한다.
  • 실행 중인 Apply가 없음을 확인하지 않고 절대 Force-Unlock하지 마라.
  • Drift를 조기에 감지하기 위해 정기적인 Plan 확인을 스케줄링하라.