Terraform과 GitLab을 이용한 인프라스트럭처 자동화

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

GitLab을 사용하여 인프라스트럭처를 관리하려면, Terraform 통합을 사용하여 버전화, 재사용 및 공유할 수 있는 리소스를 정의할 수 있습니다.

  • Compute, storage 및 네트워킹 리소스와 같은 저수준 컴포넌트 관리
  • DNS 항목 및 SaaS 기능과 같은 고수준 컴포넌트 관리
  • GitOps 배포 및 Infrastructure-as-Code(IaC) 워크플로 통합
  • GitLab을 Terraform 상태 저장소로 사용
  • 공통 및 복잡한 인프라스트럭처 패턴을 단순화하기 위해 Terraform 모듈을 저장 및 사용

기능 개요를 보려면 비디오 시연을 확인하세요.

Terraform과 OpenTofu 지원

GitLab은 Terraform 및 OpenTofu 둘 다와 통합됩니다. 대부분의 기능은 완전히 호환됩니다.

단순화를 위해 GitLab 문서는 주로 Terraform을 참조합니다. 그러나 Terraform과 OpenTofu 통합 사이의 차이점은 문서화되어 있습니다.

프로젝트에 Terraform 통합

경고: Terraform CI/CD 템플릿은 폐기되고 GitLab 18.0에서 제거될 예정입니다. 자세한 내용은 폐기 공지를 확인하세요.

GitLab과 Terraform의 통합은 GitLab CI/CD를 통해 이루어집니다. 프로젝트에 Terraform 템플릿을 추가하고 거기서 사용자 정의를 할 수 있도록 include 속성을 사용합니다.

시작하려면 필요에 맞는 템플릿을 선택하세요.

모든 템플릿은 다음을 포함합니다.

  • GitLab이 관리하는 Terraform 상태를 Terraform 상태 저장소 백엔드로 사용
  • test, validate, build, deploy 네 개의 파이프라인 단계를 트리거
  • test, validate, plan, plan-json Terraform 명령을 실행합니다. 또한 기본 브랜치에서만 apply를 실행합니다.
  • IaC 스캔을 사용하여 보안 문제를 확인합니다.

최신 Terraform 템플릿 (폐기 예정)

최신 템플릿은 가장 최근의 GitLab 버전과 호환됩니다. 가장 최근의 GitLab 기능을 제공하지만 중요한 변경 사항이 포함될 수도 있습니다.

최신 Terraform 템플릿은 안전하게 사용할 수 있습니다.

  • GitLab.com을 사용하는 경우
  • 매 새로운 GitLab 릴리스마다 업데이트되는 자체 관리형 인스턴스를 사용하는 경우

안정적 및 고급 Terraform 템플릿 (폐기 예정)

이전 버전의 GitLab을 사용하는 경우 GitLab 버전과 템플릿 버전 사이에 호환성 오류가 발생할 수 있습니다. 이 경우 다음 중 하나의 템플릿을 사용할 수 있습니다.

  • 안정적 템플릿은 상위에서 빌드할 수 있는 스켈레톤을 제공합니다.
  • 고급 템플릿을 사용하여 설정을 완전히 사용자 정의할 수 있습니다.

참고: 각 GitLab 주요 릴리스(예: 15.0)마다 최신 템플릿은 이전 템플릿을 대체합니다. 이 과정에서 중요한 변경 사항이 발생할 수 있습니다. 필요한 경우 템플릿의 이전 버전을 사용할 수 있습니다.

Terraform 템플릿 사용 (폐기 예정)

Terraform 템플릿을 사용하려면 다음을 수행합니다.

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 Terraform을 통합하려는 프로젝트를 찾습니다.
  2. 코드 > 저장소를 선택합니다.
  3. .gitlab-ci.yml 파일을 편집하고, include 속성을 사용하여 Terraform 템플릿을 가져옵니다.

    include:
     # 최신 템플릿을 가져오려면:
      - template: Terraform.latest.gitlab-ci.yml
     # 고급 최신 템플릿을 가져오려면:
      - template: Terraform/Base.latest.gitlab-ci.yml
     # 안정적 템플릿을 가져오려면:
      - template: Terraform.gitlab-ci.yml
     # 고급 안정적 템플릿을 가져오려면:
      - template: Terraform/Base.gitlab-ci.yml
    
  4. 아래의 변수를 추가합니다.

    variables:
      TF_STATE_NAME: default
      # 만약 terraform 파일이 하위 디렉토리에 있을 경우, TF_ROOT를 그에 맞게 설정하세요. 예시:
      # TF_ROOT: terraform/production
    
  5. 선택 사항. 가져온 템플릿에 존재하는 속성을 사용자 정의하기 위해 .gitlab-ci.yml 파일에서 오버라이드합니다.

자체 Terraform CI/CD 템플릿 빌드 및 호스팅

비록 GitLab은 더는 Terraform CI/CD 템플릿과 terraform-images(기반 작업 이미지 포함 terraform)를 배포하지 않지만, 여전히 GitLab 파이프라인에서 Terraform을 사용할 수 있습니다.

자체 템플릿 및 이미지를 빌드하고 호스팅하는 방법에 대해 알아보려면 Terraform Images 프로젝트를 참조하세요.

Terraform 템플릿 레시피

GitLab이 책임지는 템플릿 레시피에 대해서는 Terraform 템플릿 레시피를 참조하세요.

프로젝트를 OpenTofu와 통합

OpenTofu는 GitLab OpenTofu CI/CD 구성 요소를 사용하여 모든 Terraform과 관련된 GitLab 기능과 통합할 수 있습니다.

다음을 포함하여 파이프라인에 validate, plan, apply 워크플로우를 추가할 수 있습니다.

include:
  - component: gitlab.com/components/opentofu/validate-plan-apply@<VERSION>
    inputs:
      version: <VERSION>
      opentofu_version: <OPENTOFU_VERSION>
      root_dir: terraform/
      state_name: production

stages: [validate, build, deploy]

OpenTofu CI/CD 구성 요소 README에서 구성 요소의 사용 방법 및 사용 가능한 모든 템플릿 및 입력에 대한 자세한 정보를 확인하세요.

관련 주제