본문 바로가기
Terrform

[terraform] Terraform 모범사례

by aws-evan 2024. 11. 14.
반응형

 

1. State File 관리

  • Terraform은 인프라의 상태를 추적하기 위해 state file을 사용합니다. 이 파일은 인프라 리소스의 현재 상태를 저장하며, Terraform이 변경 사항을 비교하고 적용하는 데 중요한 역할을 합니다.
  • state file은 보안이 중요한 파일이므로 직접 버전 관리 시스템에 저장하지 않고, 접근 권한을 철저히 관리해야 합니다.

2. State File 공유

  • 여러 팀원이 협업할 때는 state file을 중앙에서 관리하고 공유해야 합니다.
  • S3(AWS)나 Google Cloud Storage를 사용하여 원격 저장소로 설정하고, 팀이 동일한 상태 파일을 사용할 수 있게 설정합니다.
  • 원격 백엔드를 설정하여 state file을 안전하게 저장하고 쉽게 공유할 수 있습니다.

3. State File Lock 설정 (S3 + DynamoDB)

  • 다수의 사용자가 동시에 상태 파일에 접근할 경우 충돌을 방지하기 위해 Locking 기능을 추가합니다.
  • DynamoDB 테이블을 S3와 함께 사용하면 state file에 대한 잠금을 구현하여 동시에 작업이 실행되지 않도록 합니다.
  • dynamodb_table 설정을 통해, 다른 사용자가 작업 중일 때 잠금이 걸리도록 설정하여 안전하게 관리할 수 있습니다.

4. State File 버전 관리 (S3 Bucket 버전 관리)

  • S3 버킷의 버전 관리 기능을 활성화하면 상태 파일이 변경될 때마다 이전 버전을 자동으로 기록할 수 있습니다.
  • 버전 관리를 통해 잘못된 변경이 발생했을 때 과거 버전으로 쉽게 롤백할 수 있으며, 상태 파일의 변경 이력을 추적하는 데도 유용합니다.

5. State File 분기 (dev, test, prod)

  • 개발, 테스트, 프로덕션 환경별로 state file을 분리하여 각 환경이 독립적으로 관리되도록 합니다.
  • 환경별로 S3 버킷의 경로 또는 키를 다르게 설정하거나, Terraform 워크스페이스를 활용하여 상태 파일을 분리할 수 있습니다.
  • 이를 통해 환경 간의 충돌을 방지하고, 환경별로 서로 다른 설정을 안전하게 관리할 수 있습니다.

6. Git 관리

  • Terraform 코드는 Git 리포지토리를 통해 관리합니다.
  • 모듈화된 코드와 환경별 디렉토리 구조를 갖추면 코드 재사용성을 높이고 관리가 용이해집니다.
  • .gitignore에 terraform.tfstate와 같은 상태 파일과 .terraform/ 폴더를 제외하여 불필요한 파일이 리포지토리에 포함되지 않도록 합니다.

7. Git CI (Continuous Integration)

  • Git CI 파이프라인을 구축하여 코드 변경이 발생할 때마다 Terraform의 코드 검증 및 플랜을 자동으로 실행하도록 설정합니다.
  • GitHub Actions, GitLab CI/CD, CircleCI 등의 CI 도구를 통해 코드 푸시 시 terraform fmt, terraform validate, terraform plan과 같은 명령을 자동으로 실행하여 코드의 일관성을 검증합니다.
  • 코드 리뷰 과정에서 예상되는 인프라 변경 사항을 확인할 수 있어 오류 발생 가능성을 줄입니다.

8. Git CD (Continuous Deployment)

  • Git CD 파이프라인을 통해 코드가 검토 및 승인된 후 프로덕션에 자동 배포할 수 있도록 구성합니다.
  • CD 파이프라인은 승인 후에만 terraform apply를 실행하도록 설정하여 신중한 배포가 이루어지도록 합니다.
  • 프로덕션 환경에서는 추가적인 검토 절차를 두거나, 수동 배포를 위한 승인을 통해 안전성을 강화할 수 있습니다.
반응형

댓글