Terraform 통합 소개
Offering: GitLab.com, Self-managed, GitLab Dedicated
코드 변경 및 예상되는 인프라 변경 사항을 검토하고 승인해야 하는 인프라스트럭처와 코드(IaC) 변경을 협업하는 것은 중요합니다.
GitLab은 merge request 페이지를 사용하여 Terraform 코드 변경 및 예상되는 효과에 대한 협업을 지원하는 솔루션을 제공합니다.
이러한 방식으로 사용자는 IaC 워크플로를 간소화하기 위해 사용자 지정 도구를 구축하거나 제3자 솔루션에 의존할 필요가 없습니다.
Merge request에서 Terraform Plan 정보 출력하기
GitLab Terraform Report artifact를 사용하여,
terraform plan
실행의 세부 정보를 merge request 위젯에 직접 노출할 수 있으며,
Terraform이 생성, 수정 또는 삭제한 리소스에 대한 통계 정보를 확인할 수 있습니다.
다른 작업 아티팩트와 마찬가지로, Terraform 계획 데이터는 레포지토리에서 Guest 역할을 가진 누구나 볼 수 있습니다.
Terraform도 GitLab도 기본적으로 계획 파일을 암호화하지 않습니다.
Terraform plan.json
또는 plan.cache
파일에 비밀번호, 액세스 토큰 또는 인증서와 같은 민감한 데이터가 포함된 경우,
계획 출력을 암호화하거나 프로젝트 가시성 설정을 수정해야 합니다.
또한 비활성화해야 합니다.
공개 파이프라인 및 artifact의 공개 플래그를 false로 설정 (public: false
)해야 합니다.
이 설정은 아티팩트가 GitLab 관리자가 아닌 프로젝트 구성원들에게만 접근 가능하다는 것을 보장합니다.
Terraform 보고서 아티팩트 구성하기
GitLab은 Terraform 및 OpenTofu와 통합되어 있습니다.
다음을 통해 CI/CD 템플릿과 구성 요소를 사용하여 GitLab 관리 Terraform 상태를 활용하고 merge requests에서 Terraform 변경 내용을 표시합니다.
Terraform 보고서 아티팩트를 자동으로 구성하기
Terraform CI/CD 템플릿 또는 OpenTofu CI/CD 구성 요소를 사용하여
plan
작업에서 Terraform 보고서 아티팩트를 자동으로 구성해야 합니다.
Terraform 보고서 아티팩트를 수동으로 구성하기
빠른 설정을 위해, 미리 빌드된 이미지를 사용자화하고 gitlab-terraform
및 gitlab-tofu
헬퍼에 의존해야 합니다.
GitLab Terraform Report 아티팩트를 수동으로 구성하려면:
-
간단함을 위해, 파일을 여러 번 참조할 수 있도록 몇 가지 재사용 가능한 변수를 정의합니다:
variables: PLAN: plan.cache PLAN_JSON: plan.json
-
jq
를 설치합니다. -
terraform plan
출력에서 추출할 정보를 파싱하는 특정jq
명령에 대한 별칭을 만듭니다:before_script: - apk --no-cache add jq - alias convert_report="jq -r '([.resource_changes[]?.change.actions?]|flatten)|{\"create\":(map(select(.==\"create\"))|length),\"update\":(map(select(.==\"update\"))|length),\"delete\":(map(select(.==\"delete\"))|length)}'"
Bash를 사용하는 배포판(예: Ubuntu)에서는alias
문이 비인터랙티브 모드에서 확장되지 않습니다. 파이프라인이convert_report: command not found
오류로 실패하는 경우, 명시적으로 별칭 확장을 활성화하려면shopt
명령을 스크립트에 추가해야 합니다.before_script: - shopt -s expand_aliases - alias convert_report="jq -r '([.resource_changes[]?.change.actions?]|flatten)|{\"create\":(map(select(.==\"create\"))|length),\"update\":(map(select(.==\"update\"))|length),\"delete\":(map(select(.==\"delete\"))|length)}'"
-
terraform plan
및terraform show
를 실행하는script
를 정의합니다.이러한 명령은 출력을 전달하고 관련 정보를
PLAN_JSON
변수에 저장합니다.이 JSON은 GitLab Terraform Report artifact를 생성하는 데 사용됩니다.
Terraform 보고서는 Terraform
tfplan.json
파일을 가져옵니다.수집된 Terraform 계획 보고서는 GitLab에 아티팩트로 업로드되며, merge request에서 표시됩니다.
plan: stage: build script: - terraform plan -out=$PLAN - terraform show --json $PLAN | convert_report > $PLAN_JSON artifacts: reports: terraform: $PLAN_JSON
-
파이프라인을 실행하면 merge request에 위젯이 표시됩니다, 다음과 같이:
-
위젯에서 View Full Log 버튼을 선택하면 파이프라인 로그에 있는 계획 출력으로 바로 이동합니다: