융무의 기술블로그
article thumbnail

Infrastructure-as-Code (IaC)에 대해 공부하다가 테라폼에 알게 되었고 GCP kubernetes의 교육을 들으러 갔을 때 책을 쓰신 역자님을 만나 테라폼에 대해 궁금하게 되어 읽게 되었습니다.

  • 이 책은 코드를 관리하는 모든 사람을 위한 것으로 시스템 관리자, 운영 엔지니어, 릴리스 엔지니어, 사이트 안전성 엔지니어, 데브옵스 엔지니어, 인프라 개발자, 풀스택 개발자, 엔지니어링 관리자 및 CTO가 포함됩니다. 이 책의 목표는 왜 테라폼을 사용하려 하는지, 워크플로에 어떻게 적용할 것인지, 그리고 어떤 모범 사례가 가장 잘 작동하는지에 대해 논의함으로써 테라폼을 제대로 운영할 수 있도록 하는 것입니다.
  • 책을 읽으면서 코드형 인프라를 왜 사용하는지 알게 되었으며 테라폼에 대해 전반적인 내용에 대해 배웠습니다. 테라폼 코드 작성 방법부터 상태를 관리하는 방법, 모듈 만드는 방법, 프로덕션 수준의 테라폼 코드를 작성하고 테스트하는 방법, 배포 및 관리 예제를 실습 내용과 함께 배울 수 있어서 좋았습니다.

프로덕션 수준 인프라 체크 리스트

작업 설명 사용 가능한 도구
설치 소프트웨어 바이너리나 필요한 종속성을 설치 배시,셰프,앤서블,퍼핏
설정 포트 설정,TLS 인증서,서비스 디스커버리,리더,팔로워,복제 등의 소프트웨어 설정 배시,셰프,앤서블,퍼핏
프로비전 서버,로드 밸런서,네트워크,방화벽,IAM 권한 설정 등의 인프라 제공 테라폼, 클라우드포메이션
배포 인프라 상위의 서비스를 배포, 중단 시간 없이 업데이트 롤아웃 블루-그린,카나리 배포 등 테라폼,클라우드포메이션,쿠버네티스,ECS
고가용성 프로세서,서버,서비스,데이터 센터,리전 등의 장애에 대비 멀티데이터센터, 멀티리전, 복제, 오토스케일링, 로드 밸런싱
확장성 요청량에 따른 스케일 업/아웃,수평적 확장, 수직적 확장 오토스케일링,복제,샤딩,캐싱,분할 정복
성능 CPU,메모리,디스크,네트워크,GPU 용량 최적화,쿼리 튜닝,벤치마킹,테스트,프로파일링 다이나트레이스,밸그린드,비주얼VM,ab,제이미터
네트워킹 정적 혹은 동적 IP 설정, 포트, 서비스 디스커버리, 방화벽, DNS, SSH 접속, VPN 연결 VPC,방화벽,라우터,DNS regis-tars,OpenVPN
보안 TLS를 통한 통신 중 데이터 암호화, 디스크 암호화, 인증, 인가, 보안 관리, 서버 하드닝 ACM, Let's Encrypt,KMS,코그니토,볼트,CIS
성능 지표 가용성, 비즈니스,애플리케이션,서버,이벤트,추적,알림에 대한 메트릭 클라우드워치,DataDog,NewRelic,Honeycomb
로그 로그 순환, 중앙으로 로그 데이터 수집 클라우드 워치 Logs,ELk,Sumo 수모 로직, 페이퍼트레일
백업 및 복구 DB,캐시,기타 데이터를 일정에 따라 백업,리전별, 계정별 복제 RDS, ElastiCache, 복제
비용 최적화 적절한 인스턴스 유형 선택, 스팟 혹은 예약 인스턴스 사용, 오토스케일링, 사용하지 않는 리소스 정리 오토스케일링, 스팟 인스턴스, 예약 인스턴스
문서화 코드,아키텍처,모든 내용을 문서화, 장애 대응 내용 정리 README, wikis, 슬랙
테스트 인프라 코드를 테스트 자동화, 항상 테스트 후에 배포 테라테스트, 인스펙,서버스펙, 키친 테라폼 

배포 워크플로 비교

  애플리케이션 코드 인프라 코드
버전 관리 사용 git clone
애플리케이션마다 리포지터리 하나
브랜치 사용
git clone
라이브와 모듈 리포지터리
브랜치 미사용
코드를 로컬에서 실행 로컬호스트에서 실행
ruby web-server.rb
ruby web-server-test.rb
샌드박스 환경에서 실행
terraform apply
go test
코드 변경 코드 변경
ruby web-server.rb
ruby web-server-test.rb
코드 변경
terraform apply
go test
테스트 단계 사용
코드 리뷰를 위해 변경 사항을 적용 풀 요청 적용
코딩 가이드라인 수행
풀 요청 적용
코딩 가이드라인 실행
자동화된 테스트 실행 CI 서버에서 테스트 수행
단위 테스트
통합 테스트
종단 간 테스트
정적 분석
CI 서버에서 테스트 수행
단위 테스트
통합 테스트
종단 간 테스트
정적 분석
terrafrom plan
병합과 릴리스 git tag
버전이 지정된
변경 불가능한 아티팩트
git tag
태그와 함께 버전이 지정된
변경 불가능한 아티팩트를 저장하는 리포지터리 사용
배포 테라폼,쿠버네티스나 메소스 같은 오케스트레이션 도구, 스크립트를 이용한 배포
롤링 배포, 블루-그린,카나리 같은 다양한 배포 전략
CI 서버를 이용한 배포
CI 서버에서 제한된 권한 부여
환경 전반에 걸쳐 불가능하고 버전이 지정된 승격
테라폼,아틀라스,테라폼 엔터프라이즈,테라그런트,스크립트를 이용한 배포
재시도,errored.tfstate가튼 제한적인 배포 전략, 에러 처리를 확실히 해야함
CI 서버를 이용한 배포
CI 서버에 관리자 권한 부여
환경 전바에 걸쳐 변경 불가능하고 버전이 지정된 아티팩트 승격

 

profile

융무의 기술블로그

@융무

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!