✅ 이 블로깅은 테라폼으로 시작하는 IaC 책을 기반으로 작성한다.


테라폼의 워크플로는 개인, 다중 작업자, 다수 팀으로 분리된다.

개인 워크플로라면 여태까지 했던 작업이 그냥 Write → Plan → Apply가 반복된거라고 생각하면 된다.

  • Write : 테라폼 코드 작성
  • Plan : 실행 계획을 통한 리뷰
  • Apply : 코드로 실제 인프라를 프로비저닝

Untitled

하지만 다중 작업자와 다수 팀으로 확장된다면 워크플로가 살짝 달라지게 된다.

State 파일 관리에 유의하여야 하며, 테라폼 코드가 충돌되지 않도록 VCS와 같은 형상관리 도구에 익숙해져야 한다.

Untitled 1

개인이 하던 작은 단위의 작업을 반복하고 디렉터리 기반 격리깃 기반의 브랜치 격리 방식을 통해 환경 분리에도 신경을 써야 한다.

Plan에서 Git의 PR 기능 등을 사용하여 팀원 간의 리뷰를 거친 후에 최종 Apply를 진행할 수 있다. PR에서는 보통 LGTM (Looks Good To Me)를 많이 쓰는데 여기에 따봉을 많이 남기면 최종 팀장이 승인하는 식으로 프로세스를 거치기도 한다고 한다!

Untitled 2

더 커져서 팀 간의 워크플로를 진행하게 되면 대상은 하나지만 관리하는 리소스가 분리되게 된다.

예를 들어 Network 팀에서 만든 State를 Server 팀에서 받아 와서 그 상태 기반으로 작업을 진행하게 될 수가 있다.

테라폼 코드 작성 시 다른 워크스페이스에서의 변경 사항을 데이터 소스로 받아 오는 terraform_remote_state 또는 별도 KV-store를 활용하는 코드 구성이 요구된다.

그리고 프로비저닝 실행과 결과에 대한 안내가 관련 팀에 알려져야 하므로 파이프라인 구조에서 자동화하는 것을 추천한다고 한다.

테라폼은 State를 분리하는 것을 격리 목표로 하고 있다.

그래서 파일이나 하위 모듈로 구분하더라도 루트 모듈에서 코드를 통합하고 하나의 State로 관리하게 된다.

State 파일 관리에는 모놀리식과 MSA 방식으로 구성할 수 있다.

State 파일을 격리하는 데에는 파일 및 디렉토리 기반으로 분리하거나 깃 브랜치 전략을 통한 환경 분리를 하거나 아니면 아래와 같이 둘을 같이 활용해 사용하는 것도 가능하다.

Untitled 3

디렉토리 격리에 깃 브랜치를 연결하는 것이 바람직한 것 같다

이 방식은 동일한 디렉토리에서 브랜치를 변경해 가며 작업해 발생하는 실수를 줄일 수 있고 각 브랜치가 연결되어 있으므로 단일 작업자가 다수의 환경을 관리하는 이점과 각 환경별로 리소스 구성이 동일하게 유지되는 장점이 있다.

Categories:

Updated:

Leave a comment