AI Briefing

DevOps팀의 Terraform 모험

·2021.08.26 00:00

핵심 내용

Kurly DevOps팀이 서비스 증가에 따른 인프라 관리 복잡도를 해결하기 위해 Terraform을 도입하고 모듈화 및 리팩토링 과정을 공유했다.

자세히 보기

Kurly DevOps Engineering Team은 서비스 런칭 증가와 다양한 환경(Stage, QA)의 인프라 급증으로 인한 관리 복잡도 문제를 해결하기 위해 Terraform을 도입했다. 작년 8월부터 IaC(Infrastructure as code) 전략을 수립하여 Stage 및 QA 환경에 먼저 적용한 후, 노하우를 축적해 운영 환경으로 확장하는 방식을 채택했다.

모듈 구조와 코드 관리

팀의 Terraform 경험 부족을 고려해 기본부터 재학습하며, AWS 계정 다수 관리와 향후 운영망 반영을 고려한 'large' 구조를 선택했다. 코드는 env(dev, stg 등)와 modules(acm, asg, efs, lb_listener 등)로 분리했으며, 소스 코드는 GitHub private repository에서 관리했다. tfstate 파일은 Infra 계정의 S3 bucket에 저장하되, AWS console 수정을 차단하고 Terraform 실행 Accesskey를 통한 업데이트만 허용하는 보안 정책을 적용했다.

리팩토링과 동적 블록 활용

초기에는 반복적인 변수 선언으로 인한 고통이 있었으나, locals 키워드와 merge 함수를 활용해 태그 옵션을 통합하고 Environment Code를 단순화했다. 또한, Launch Template에서 EBS volume을 추가하거나 지정할 때 발생하는 문제를 해결하기 위해 dynamic block을 도입했다. var.block_device_mappings를 list(object) 타입으로 정의하고 lookup 함수를 사용하여 값이 없을 경우 null로 처리하는 방식을 통해, 마스터 이미지 AMI와 추가 EBS volume을 동시에 맵핑할 수 있도록 리팩토링했다.

이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.

AI 처리 방식을 확인하거나, 요약 오류와 출처 표기 문제, 삭제 요청을 문의 · 건의로 알려주세요.