Ssoon

Chapter (08) - 워크플로 본문

Terraform 101 Study 2기

Chapter (08) - 워크플로

구구달스 2023. 8. 9. 23:44
CloudNet@ 가시다님이 진행하는 Terraform 101 Study 2기
"테라폼으로 시작하는 IaC" (한빛미디어) 도서로 진행!

✅ 테라폼 워크플로

  • Write
    • 코드를 작성
  • Plan
    • 적용하기 위한 실행 계획을 통해 리뷰
  • Apply
    • 코드로 인프라를 프로비저닝

 

규모에 따른 워크플로

  • 각 워크스페이스 별로 접근 권한을 관리
  • 중앙에서 관리되는 실행 환경을 설계하여 조직의 복잡성을 해결
  • 프로비저닝에 집중하는 규모에 맞는 워크플로 설계

 

🧿 개인 워크플로

Write

  • 프로비전닝하려는 목적에 따라 코드 작성
  • 반복적인 사용성 고려
  • 인수에 할당되는 값을 입력 변수화
  • 반복적인 구조가 발생하는 경우 리소스 단위별로 반복문 사용? 다수의 리소스를 모듈화? 결정

Plan

  • terraform fmt 명령을 통해 코드 형태 포맷팅, 변경 리소스 리뷰
  • tfsec 이나 terrascan  같은 보안 취약성 점검 툴 활용

Apply

  • 실제 인프라를 프로비저닝
  • VCS 에서 코드 병합

 

🧿 다중 작업자 워크플로

Write

  • 작업자는 작업 전에 미리 원격 저장소의 코드를 받고 Git 에서 branch 를 활용 개별적으로 작업
  • 개인의 워크플로의 변수화와 패스워드 같은 민감 데이터가 포함되지 않도록 설계
  • 개인 작업 환경에서 사용되는 변수는 공유하지 않음
  • 작업자 개인 변수 -> terraform.tfvars 에 선언 -> .gitignore 에 추가 -> 개별 테스트 환경 구성
  • 개별 작업자는 작은 단위의 개별 워크플로(Write > Plan > Apply) 를 반복
  • 프로비저닝 대상 환경을 검증과 운영 환경으로 구성으로 구조화 -> 디렉터리 기반 격리 / 깃 기반 브랜치 격리

Plan

  • 둘 이상의 작업자는 프로비저닝 이전에 리뷰를 통해 변경 내역을 확인 -> 공동 저장소에 병합
  • 테라폼의 Plan 결과를 풀 리퀘스트 단계에 같이 제공 -> 영향을 받는 서비스와 중단 서비스 예측이 쉬어짐

Apply

  • 코드가 최종 병합 -> 인프라 변경이 수행됨을 알리고 변경 대상 환경의 중요도에 따라 승인 필요
  • 관리 단위 -> R&R, 서비스, 인프라 종류 등으로 구분

 

🧿 다수 팀의 워크플로

  • 프로비저닝 대상은 하나이지만 관리하는 리소스가 분리
  • 단일 팀의 워크플로가 유지 -> 공유해야 하는 핵심 워크플로 필요

Write

  • 대상 리소스가 하나의 모듈에서 관리되지 않고 R&R 에 의해 워크스페이스가 분리
  • 서로 다른 워크스페이스에서 구성된 리소스 데이터를 권한이 다른 팀에서 공유하기 위해 -> 저장된 State 접근 권한 제공 -> output 를 통해 공유 대상 데이터 노출
  • 서로 다른 워크스페이스에서의 변경 사항을 데이터 소스로 받아 오는 terraform_remote_state 또는 별도 KV_store 를 활용하는 코드 구성 요구
  • 관리 주체가 다른 곳에서 생긴 변경 사항의 영향력 최소화 -> 리모트 데이터 소스의 기본값을 정의하거나 코드적인 보상 로직을 구현

Plan

  • 병합을 승인하는 단계에 영향을 받는 다른 팀의 작업자고 참여

Apply

  • 프로비저닝 실행과 결과에 대한 안내가 관련 팀에 통보 -> 파이프라인 구조에서 자동화 
  • 실행 후 영향도가 여러 팀이 관리하는 리소스에 전파 가능성 -> 코드 롤백 훈련 필요
  • 생성된 결과와 다른 워크스페이스에서 참조되는 output 값의 업데이트된 내용을 다른 팀이 확인하는 권한 관리 필요
Comments