데브옵스와 SRE의 요구사항이 많아지면서 인프라를 코드로, 자동화하여 관리하게 되었다. 인프라가 코드로 관리가 가능해지면서, 데브옵스 라이프사이클 전체를 완성시키게 된다. GitLab은 다양한 기능을 통해 인프라 관리를 단순화하고 속도를 높여줄 수 있다.
GitLab은 다양한 절차를 지원하고 IaC를 실행시킬 수 있는 테라폼과의 연동을 지원한다. 테라폼은 클라우드 인프라를 기준으로 구성된다. 다양한 GitLab 통합기능은 다음과 같은 도움을 준다.
GitLab으로 인프라를 관리하기 위해, 테라폼과 통합하여 버저닝하고, 재사용하고, 공유하며 리소스를 정의할 수 있다.
GitLab CI/CD를 통해 GitLab과 Terraform을 통합한다. include
를 사용해서 템플릿을 사용할 수 있다.
시작하기위해, 가장 적합한 템플릿을 선택해보자.
모든 템플릿:
test
, validate
, build
, deploy
를 파이프라인 스테이지에서 트리거할 수 있다.test
, validate
, plan
, plan-json
같은 명령어를 실행시킬 수 있고 default 브랜치에 대해서만 apply
도 실행시킬 수 있다.최신 Terraform 템플릿은 가장 최신의 GitLab 버전과 호환됩니다. 이 템플릿은 가장 최근의 GitLab 기능을 제공합니다. 하지만 잠재적으로 해당 기능은 바뀔 수 있습니다.
다음과 같은 상황에서 사용할 수 있습니다.
만약 당신이 GitLab을 이전버전으로 사용하고 있다면, GitLab version과 template version간에 호환선 문제가 발생할 수 있습니다. 이럴 때는 아래 템플릿들을 사용할 수 있습니다.
.gitlab-ci.yml
파일을 수정합니다.include:
# To fetch the latest template, use:
- template: Terraform.latest.gitlab-ci.yml
# To fetch the advanced latest template, use:
- template: Terraform/Base.latest.gitlab-ci.yml
# To fetch the stable template, use:
- template: Terraform.gitlab-ci.yml
# To fetch the advanced stable template, use:
- template: Terraform/Base.gitlab-ci.yml
variables:
TF_STATE_NAME: default
TF_CACHE_KEY: default
# If your terraform files are in a subdirectory, set TF_ROOT accordingly. For example:
# TF_ROOT: terraform/production
테라폼은 인프라 구성의 디테일한 내용들을 저장하기 위해 state file을 사용합니다. Terraform의 remote backends를 사용하면, 원격에 그리고 공유된 저장소에 state file을 저장할 수 있습니다.
GitLab은 안전하게 최소한의 구성으로 state file을 저장하기 위해 Terraform HTTP backend 기능을 제공합니다.
GitLab에서 다음과 같은 기능을 사용할 수 있습니다.
Disaster reconvery planning
GitLab을 활용해 Terraform state file을 구성했을 경우 GitLab이 단일 실패지점이 되면 안됩니다. GitLab에서 암, 복호화가 이루어 지기 때문에 GitLab의 가용성을 꼭 고려하시기 바랍니다.
self-managed GitLab에서, Terraform state file을 구성하기 전에 다음과 같은 사항을 확인하세요.
Settings > General > expand Visibility, project features, permissions, Infrastructure
토글을 켜주세요.terraform init
명령어를 실행하고, GitLab CI/CD를 사용해서 terraform 명령어를 사용할 수 있습니다.
사전 요구사항:
terraform apply
에 의해 lock하고, unlock하고 state를 수정하기 위해서, 최소 Maintainer role이 필요합니다.terraform plan -lock=false
를 사용하여 state를 읽기 위해서, 최소 Developer role 이상이 필요합니다.GitLab에서는 Terraform plan data 결과가 job artifact로 떨어지게 됩니다. 이때 다른 사용자들이 해당 아티팩트에 있는 민감한 정보를 열람할 수 있기 때문에,
setting the artifact’s public flag to false (public: false)
를 통해서 볼 수 없게 막아놓는 것이 중요합니다.
GitLab CI/CD로 backend를 구성하기
1. Terraform project에서 아래와같이 backend.tf
파일을 구성합니다.
terraform {
backend "http" {
}
}
.gitlab-ci.yml
파일을 생성하여 Terraform.gitlab-ci.yml 템플릿의 내용을 입력합니다.끝으로.. 이밖에도 GitLab을 활용해 Kubernetes와 연동하여 인프라를 관리할 수도 있습니다.