Terraform과 GitLab을 사용한 인프라스트럭처 자동화
GitLab으로 인프라스트럭처를 관리하기 위해, Terraform과의 통합을 사용하여 버전을 지정하고, 재사용하고, 공유할 수 있는 리소스를 정의할 수 있습니다.
- 컴퓨팅, 저장 및 네트워킹 리소스와 같은 저수준 컴포넌트를 관리합니다.
- DNS 항목 및 SaaS 기능과 같은 고수준 컴포넌트를 관리합니다.
- GitOps 배포 및 IaC(Infrastructure-as-Code) 워크플로를 통합합니다.
- GitLab을 Terraform 상태 저장 공간으로 사용합니다.
- 공통 및 복잡한 인프라스트럭처 패턴을 단순화하기 위해 Terraform 모듈을 저장하고 사용합니다.
기능에 대한 GitLab 통합 개요 영상을 시청하세요.
Terraform 및 OpenTofu 지원
GitLab은 Terraform 및 OpenTofu와 모두 통합됩니다. 대부분의 기능이 완전히 호환되며 다음을 포함합니다.
단순함을 위해 GitLab 문서는 주로 Terraform을 참조합니다. 그러나 Terraform 및 OpenTofu 통합 사이의 차이점은 문서화되어 있습니다.
프로젝트를 Terraform과 통합
- IaC 스캐닝은 GitLab 14.6에서 소개되었습니다.
GitLab 및 Terraform과의 통합은 GitLab CI/CD를 통해 이루어집니다. 프로젝트에 Terraform 템플릿을 추가하고 해당 내용을 사용자 정의합니다.
시작하려면, 당신의 요구를 가장 잘 충족하는 템플릿을 선택하세요.
모든 템플릿:
- GitLab에서 관리되는 Terraform 상태를 Terraform 상태 저장 백엔드로 사용합니다.
-
test
,validate
,build
,deploy
네 가지 파이프라인 단계를 실행합니다. -
test
,validate
,plan
및plan-json
Terraform 명령을 실행합니다. 또한apply
는 기본 브랜치에서만 실행됩니다. - IaC 스캐닝을 사용하여 보안 문제를 확인합니다.
최신 Terraform 템플릿 (폐기됨)
최신 템플릿은 가장 최근의 GitLab 버전과 호환됩니다. 최신 GitLab 기능을 제공하지만 잠재적으로 호환성이 없을 수 있습니다.
최신 Terraform 템플릿은 안전하게 사용할 수 있습니다:
- GitLab.com을 사용하는 경우.
- 모든 새로운 GitLab 릴리스와 함께 Self-managed되는 인스턴스를 사용하는 경우.
안정적이고 고급 Terraform 템플릿 (폐기됨)
이전 버전의 GitLab을 사용하는 경우, GitLab 버전과 템플릿 버전 간의 호환성 오류가 발생할 수 있습니다. 이 경우 다음 템플릿 중 하나를 사용할 수 있습니다:
Terraform 템플릿 사용 (폐기됨)
Terraform 템플릿을 사용하려면:
- 왼쪽 사이드바에서 검색 또는 이동을 선택하고 Terraform과 통합하려는 프로젝트를 찾습니다.
- 코드 > 리포지터리를 선택합니다.
-
.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
-
다음과 같이 변수를 추가합니다:
variables: TF_STATE_NAME: default # 만약 terraform 파일이 하위 디렉터리에 있다면, TF_ROOT를 그에 맞게 설정하세요. 예를 들어: # TF_ROOT: terraform/production
- 선택 사항. 가져온 템플릿에서 사용자 정의할 수 있는 내용을 자신의
.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를 참조하세요.
관련 주제
-
gitlab-terraform
셸 스크립트를 포함하는 이미지 보기 - Terraform 모듈 레지스트리로 GitLab 사용하기
- 로컬 스토리지 또는 원격 스토어에 상태 파일을 저장하려면 GitLab 관리 Terraform 상태 사용
- 테라폼 코드 변경 및 인프라스트럭처-as-Code 워크플로우에 대한 협업은 Merge Request에서의 테라폼 통합 사용
- 사용자, 그룹 및 프로젝트와 같은 GitLab 리소스를 관리하려면 GitLab Terraform 공급자 사용. GitLab Terraform 공급자 문서는 Terraform 문서 사이트에서 이용 가능합니다.
- Amazon Elastic Kubernetes Service (EKS)에 새 클러스터 생성
- Google Kubernetes Engine (GKE)에 새 클러스터 생성
- GitLab 및 Terraform과 관련된 문제를 문제 해결하세요.