Terraform Cloud #3. Tips

hyukjun·2022년 12월 10일
0

Terraform Cloud

목록 보기
3/3
post-thumbnail

테라폼 클라우드 사용시 활용할 수 있는 기능과 팁에 대해 소개합니다.

1. 실행모드 (Excution Mode)

테라폼 클라우드는 원격 및 로컬 2가지의 실행 모드를 제공합니다.

  • 원격(Remote): 테라폼 클라우드의 가상환경에서 테라폼 바이너리가 실행됩니다. 콘솔 로그는 원격과 로컬에서 모두 확인 가능합니다.

  • 로컬(Local): OSS 테라폼과 같이 로컬의 테라폼 바이너리가 실행 되며, 상태파일만 클라우드에 적재됩니다.

  • Excution Mode

  • Rmote Excution Mode

실행모드에 따른 주의사항 및 팁은 다음과 같습니다.

  • 환경 변수 설정: 테라폼 클라우드를 원격 실행 모드로 사용할 경우 테라폼 클라우드가 타겟 인프라에 인증 하기 위한 계정정보(Credential)가 필요합니다.
    Azure에서는 AAD에 등록된 Application 정보를 활용 하는 데요, 아래의 4가지 정보를 테라폼 클라우드에 환경변수로 등록해 두어야 합니다.

    ARM_TENANT_ID
    ARM_SUBSCRIPTION_ID 
    ARM_CLIENT_ID 
    ARM_CLIENT_SECRET
  • env variables - credentials

  • 변수 세트 사용 (Variables sets): 조직단위에서 변수 묶음을 선언하고 각 워크스페이스에서 사용할 수 있는 기능입니다. 위의 크레덴셜 같은 변수를 한번만 선언하고 각 워크스페이스에서 사용할 수 있습니다.

  • Organization → settings → variables set → 사용할 workspace 및 변수 선언

  • Workspace → settings → variables → variables set 에 적용된 모습 확인

  • 테라폼 버전: 실행모드가 원격일 경우 클라우드에서 설정한 테라폼 버전이 사용되며, 로컬일 경우 로컬의 테라폼 바이너리 버전을 따르게 됩니다.

  • 상태파일 (tfstate): 실행모드가 원격일 경우 테라폼 실행과 상태파일 모두 원격에서 실행되고 적재되지만, 로컬일 경우 마치 상태파일 백앤드만 설정된 것처럼 상태파일만 클라우드환경에 적재됩니다.

2. 리모트스테이트 (Remote State)

테라폼 클라우드의 작업 단위인 Workspace는 테라폼의 실행 후 상태파일을 보관하며, 다른 Workspace의 상태파일을 참조할 수 있는 기능을 제공합니다. a-workspace 의 상태파일을 b-workspace에서 참조하고 싶다면 아래와 같이 진행합니다.

  • a-workspace 에서 상태파일 공유 설정 및 outputs 선언
    workspace → settings → remote state sharing -> select workspace

  • configuration output 설정

  • b-workspace의 configuration에서 remote-state 사용
    data block으로 참조하고자 하는 workspace를 선언하고, output 값을 사용합니다.

3. 런 트리거 (Run Triggers)

서로 다른 Workspace 간 실행 성공 이벤트를 감지하여 연속적인 테라폼 실행을 가능하게 합니다. 다만, 런 트리거로 실행된 테라폼 실행에선 auto-approve는 사용하지 못합니다.

workspace-01 의 실행 성공 이벤트를 감지하여 workspace-02 를 실행 하려면 아래와 같이 설정합니다.

  • workspace-02에서 Run Triggers를 설정합니다.
    workspace -> settings -> run trigger -> workspace-01 선택
  • workspace-01의 apply가 성공적으로 마무리되면 workspace-02가 자동으로 실행되며, apply 승인을 기다립니다.

    workspace-01의 apply가 끝나고 자동으로 실행된 workspace-02의 모습입니다.

4. VCS 커넥션 (VCS Connection)

테라폼 클라우드는 github과 같은 소스형상관리 툴과 연동하여 gitOps를 구현할 수 있습니다.
간단하게 말하자면, 테라폼 구성파일은 VCS에서 관리하며, VCS에 테라폼 구성을 업데이트 할 경우 테라폼 클라우드는 이를 자동으로 감지하여, 테라폼 실행까지 이어지게 해줍니다. 이를 통해 코드 수정 한번으로 인프라 변경을 테스트 해볼 수 있는 자동화 환경을 마련할 수 있습니다.

VCS Connection 설정 및 사용은 아래와 같습니다.

  1. Workspace 설정 시 VCS 커넥션 타입 선택 (CLI 기반 Workspace에서도 VCS 타입으로 변경 가능합니다.)

  2. 사용하는 VCS 선택

  1. 사용하고자 하는 Repo 선택
  1. 해당 Repo에 다양한 작업공간이 존재한다면, 특정한 Working Directory를 설정할 수 있습니다. 해당 디렉토리에서 테라폼이 실행되지만, VCS의 이벤트를 감지하는 경로가 설정된 것은 아니기 때문에, 아래 Run Trigger의 특정 VCS Path를 설정 해주어야 합니다.
  1. 이벤트를 감지하고자 하는 VCS 경로와 패턴을 설정합니다. (Run Trigger의 조건으로는 VCS의 모든 경로 및 이벤트에 대한 실행, 특정 경로 기반, 혹은 릴리즈에 사용하는 git tag publish 이벤트 기반으로 설정할 수 있습니다, workpsace 생성 이후 workspace -> Settings -> Version Control -> Run trigger에서 편집할 수 있습니다.)
  1. 이외에도 VCS branch설정, PR 이벤트시 실행 등 다양한 조건을 설정할 수 있습니다.
  1. Workspace가 생성되면 자동으로 해당 Repo의 변수를 감지해 테라폼 클라우드에 입력 하게끔 도와줍니다. (스킵하여 넘어가고 다음에 설정할 수 있습니다.)
  1. 생성된 Workspace 모습
  1. 코드 수정 후 github에 commit & push
  1. github의 commit 이벤트를 자동으로 감지하여 실행된 모습

5. 프라이빗 모듈 레지스트리 (Private Module Registry)

테라폼 클라우드는 프라이빗한 모듈 레지스트리를 제공합니다. 각 개인이나 조직이 프라이빗 하게 사용할 수 있는 레지스트리 환경을 제공 합니다.

모듈은 일반적으로 github의 repo(private or public)를 통해 모듈 코드를 관리하고, git tag로 릴리즈 하여 모듈을 버저닝 합니다.

이 방식에서 테라폼 클라우드에 모듈 저장소를 등록하면 모듈관리 및 사용에 좀 더 편하고 프라이빗한 환경을 가질 수 있습니다.

대표적인 장점으로는 테라폼 클라우드의 레지스트리는 깃헙에 저장된 모듈 리포를 분석하여 해당 모듈을 자동으로 문서화 해주는 기능과, 깃 태그로 등록된 모듈 버전을 레지스트리에 등록해 주는 좋은 기능이 있습니다.

  1. 등록할 Github Module Repo
    테라폼 클라우드에 모듈로 등록하기 위해선 terraform-<PROVIDER>-<NAME> 의 명명규칙을 따라야 합니다.

  2. VCS에 연결 후 Organization -> Registry에서 module을 추가 합니다.
    연동된 repo 중에서 모듈로 등록할 repo를 선택합니다.

  1. module을 publish 합니다.

    • module이 private registry에 등록된 모습

      위와같이 모듈의 버전을 감지하여 퍼블리싱 해주며, 모듈 사용 예시 및 모듈의 input, output 변수와 종속성, 생성되는 리소스 등을 자동으로 감지하여 문서화 해줍니다.

      module "linux" {
        source  = "app.terraform.io/hyukjun/linux/azurerm"
        version = "1.0.0"
        # insert required variables here
      }
  • 문서화 예시 - input 변수

마치며

위에서 말씀드린 내용 이외에도 테라폼 클라우드 사용시 얻는 장점이 있습니다, 테라폼 클라우드를 사용함으로써 오픈소스 사용시 불편했던 점들을 보완할 수 도 있고, 개인이나 조직의 상황에 맞게 효율적으로 사용할 수 있을것 같습니다.

이글을 통해 테라폼 클라우드 사용에 조금이나마 도움이 되었으면 좋겠습니다.

감사합니다.
(이 글은 미디엄에서 22.11.13일에 작성하였습니다.)

profile
slow and steady

0개의 댓글