본문 바로가기

Terraform

[Terraform] Terraform 상태관리 및 격리방안

이번에는 상태 관리 및 격리 방안에 대해서 알아보겠습니다.

 

테라폼 상태 관리


상태 파일은 배포할 때마다 변경되는 파일입니다. 프라이빗 API이기 때문에 Terraform 내부에서만 사용됩니다.

상태 파일은 Terraform 관련 명령어를 제외한 다른 것들로 편집하면 안됩니다.

state 관련 파일은 terraform.tfstate에 기록이 됩니다.

 

State는 대상 환경의 관리 Resource 판별 및 결과를 기록합니다. 또한, 테라폼 구성과 실제를 동기화 Resource마다 고유한 ID로 맵핑하고 Resource 종속성과 같은 메타데이터를 저장 및 추적을 하면서 프로비저닝 결과를 캐싱하는 역할을 해줍니다.

 

Terrform을 팀 단위로 운영시 문제점 

  1. 상태파일을 저장하는 공유 스토로지 사용 ex) s3
    • 테라폼을 사용하는 팀원들이 동일한 상태 파일을 액세스 할 수 있어야합니다.
  2. 상태 파일 잠금
    • 팀원들이 상태 파일을 접근 할 수 있게 되면 동시에 업데이트가 될 경우도 있을 수 있습니다
    • 동시에 업데이트 될 경우 충돌이 일어나면서 데이터가 손실이 될 수 있습니다.
  3. 상태 파일 격리
    • dev, stg, prd 등 각각 다른 환경들은 격리하면서 사용하는 것이 좋습니다.

 

Terrform을 팀 단위로 운영시 주의 사항

  1. 수동 오류 
    • 형상관리( github, gitlab, bitbucket etc )를 이용하게 되면 누군가 저장소에 상태파일을 올려놓지 않을 경우 다음 사람이 이전 버전의 상태 파일로 테라폼을 실행하고 그 결과 이전 버전으로 롤백되거나 배포된 인프라를 복제하는 문제가 생길 수 있습니다.
  2. 잠금
    • 대부분 버전 관리 시스템은 동시에 하나의 상태 파일에 terraform apply 명령을 실행하지 못하게 하는 잠금 기능을 제공하지 않습니다.
  3. 시크릿
    • 테라폼 상태 파일의 데이터는 평문으로 저장되기 때문에 민감한 정보가 노출될 위험이 있습니다.

이러한 상황들을 해결 하기 위해 S3 + DyamoDB 사용을 권장합니다.

 

 

S3 + DyamoDB 사용 권장하는 이유

  1. 수동 오류 해결
    • terraform plan / terraform apply 실행 할 때 마다 해당 백엔드에서 파일을 자동으로 로드, apply 후 상태 파일을 백엔드에서 자동으로 저장 해주기에 수동 오류가 발생하지 않습니다.
  2. 잠금
    • apply 실행 할 때 자동으로 잠금을 활성화 시킵니다.
  3. 시크릿
    • 대부분 원격 백엔드는 기본적으로 데이터를 보내거나 상태 파일을 저장할 때 암호화 기능을 지원합니다.