대규모로 Terraform을 운영하는 방법

3 days ago 4

  • 165,000개 이상의 클라우드 리소스를 625개의 Terraform 워크스페이스38개의 AWS 계정에서 관리
    • 170명의 엔지니어중 40명은 인프라 스페셜리스트
    • 매일 225회의 인프라 릴리스(terraform apply)와 723회의 플랜(terraform plan)을 수행
  • 이를 위해 Terraform Cloud를 도입하여 인프라 릴리스 프로세스를 자동화하고, 개발자들의 수작업과 오류를 줄였음

Terraform Cloud 도입 전의 문제점

  • 높은 AWS 접근 권한 필요 : 인프라 팀이 높은 수준의 AWS 접근 권한을 가져야 했음
  • 시간 소모적 작업 : 각 디렉토리에서 terraform apply를 실행하고 검토 및 승인을 반복해야 했으며, 한 번의 변경 사항이 120개 이상의 워크스페이스에 영향을 줄 수도 있었음
  • 인프라 드리프트 발생 : 예상치 못한 변경 사항이 누적되어, 적용 시 추가적인 검토와 조치가 필요

Terraform Cloud 도입 및 효과

  • 드리프트 제거 → 인프라 드리프트를 제거하여 위험과 개발자 부담을 줄였음
  • 개발자 시간 절약 → 연간 약 8,000시간의 개발자 시간 절약 (개발자 4명의 업무량에 해당)
  • 변경 사항 추적 가능 → 감사 로그를 통해 변경 사항을 추적하고 디버깅 용이
  • 스펙큘레이티브 플랜 지원 → 변경 사항을 자동으로 테스트하고 결과를 GitHub CI에서 직접 확인 가능

현재 Terraform Cloud 운영 방식

  • 자체 호스팅 : Terraform Cloud for Business를 자체적으로 설치하고, AWS 계정 내 ECS 클러스터에서 TFC 에이전트를 운영
  • 에이전트 풀 구성 : 120개의 에이전트를 개발 환경(40개)과 프로덕션 환경(80개) 으로 나누어 운영하여 높은 동시성 유지

중점적으로 모니터링하는 요소

  1. 에이전트 고갈 및 동시성 제한 → 에이전트 부족 시 온콜 담당자에게 알림
  2. 플랜 시간 → 개발 환경에서 플랜 시간이 4분을 초과하면 팀에 알림
  3. 인프라 드리프트 → 현재는 측정하지 않음 (드리프트가 거의 발생하지 않음)

품질 향상을 위한 최적화

  • TFC CLI 개발 : 여러 워크스페이스에서 변경 사항을 CLI로 자동 검토 및 승인할 수 있도록 함
  • 알림 시스템 구축 : 슬랙 알림을 통해 Terraform 적용이 누락되지 않도록 자동화
  • 워크스페이스 자동 관리 : Terraform을 사용해 625개의 워크스페이스를 관리하고, 태그를 적용하여 소유 팀을 구분
  • Terraform Cloud 사용량 분석 : TFC API를 활용하여 상태 버전 데이터를 수집하고, 리소스 사용량과 성장 추이를 파악
  • Terraform State 백업 : 상태 파일을 S3 버킷에 자동 백업하여 장애 발생 시 복구 가능하도록 함
  • 워크스페이스 종속성 관리 : 모듈 종속성 트리를 작성하여, 워크스페이스가 감시해야 할 디렉토리를 자동 설정
  • 프로바이더 업그레이드 자동화 : Dependabot을 활용하여 프로바이더를 월간 주기로 업그레이드하고, 자동화를 통해 관리 부담을 줄임

향후 개선 사항

  • 단계적 롤아웃 : main 브랜치 기반 릴리스에서 다단계 배포(개발 → 스테이징 → 프로덕션) 방식으로 전환
  • 대형 워크스페이스 분할 : 현재 625개의 워크스페이스를 1500개 이상으로 세분화하여, 플랜 및 적용 시간을 단축하고 변경 영향 범위를 축소하려 함
  • 알림 기능 향상 : 슬랙 알림의 재할당 기능 추가 및 tfc review 명령어 자동 생성 기능 도입
  • 에이전트 자동 스케일링 : EKS 기반의 자동 스케일링 시스템을 도입하여 가변적인 워크로드를 효율적으로 처리할 계획
  • 자체 개발 도구 오픈소스화 : 내부적으로 개발한 다양한 도구를 오픈소스로 공개하여, 다른 팀들도 활용할 수 있도록 할 계획

Read Entire Article