1. Terraform Block 소개
- Terraform Block은 Terraform의 핵심 설정을 정의하는 configuration 블록입니다.
- 이 블록을 통해 Terraform 버전, 필요한 프로바이더, 백엔드 설정, HCP Terraform 연동 등 Terraform의 기본 동작을 구성할 수 있습니다.
정보
Terraform Block 내에서는 상수 값만 사용할 수 있습니다. 리소스나 변수 참조, 내장 함수 사용이 불가능합니다.
2. 주요 설정 옵션
2.1 required_version
- Terraform CLI 버전을 제한하는 설정입니다.
- 협업 환경에서 일관된 Terraform 버전 사용을 강제할 때 유용합니다.
경고
required_version은 Terraform CLI 버전만 제한하며, 프로바이더 플러그인 버전은 제한하지 않습니다.
예시
terraform {
required_version = ">= 1.0.0"
}
2.2 required_providers
- 프로바이더 플러그인 요구사항을 정의합니다.
- 소스 주소와 버전 제약조건을 지정할 수 있습니다.
AWS 프로바이더 설정 예시
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 2.7.0"
}
}
}
2.3 backend
- Terraform은 인프라의 현재 상태를 .tfstate 파일에 저장합니다.
- 이 상태 파일을 저장하고 관리하는 방식으로 backend와 cloud 두 가지 옵션을 제공합니다.
- backend는 상태 파일을 저장할 위치와 방식을 지정합니다.
- 일반적으로 팀 협업 시 원격 저장소를 사용합니다.
- 주요 백엔드 유형
- local: 로컬 파일시스템 (기본값)
- s3: AWS S3 버킷
- azurerm: Azure Storage Account
- gcs: Google Cloud Storage
- http: HTTP 엔드포인트
팁
backend 블록과 cloud 블록은 동시에 사용할 수 없습니다. 둘 중 하나만 선택해야 합니다.
3. HCP Terraform 연동
3.1 cloud 블록 설정
- HCP Terraform 또는 Terraform Enterprise와의 연동을 위한 설정 블록입니다.
- cloud는 HCP(HashiCorp Cloud Platform) Terraform 또는 Terraform Enterprise와의 통합을 제공합니다.
- 단순한 상태 파일 저장을 넘어 다음과 같은 추가 기능을 제공합니다
- 상태 파일 버전 관리
- 동시성 제어
- 실행 히스토리 관리
- 정책 관리 (Policy as Code)
- 팀 협업 기능
- 웹 UI를 통한 관리
팁
backend와 cloud는 상호 배타적입니다. 둘 중 하나만 선택해야 하며, 일반적으로:
단순한 상태 파일 저장만 필요하다면 → backend 사용 팀 협업과 고급 관리 기능이 필요하다면 → cloud 사용
기본 구성 예시
terraform {
cloud {
organization = "example_corp"
workspaces {
tags = {
layer = "app"
}
}
}
}
3.2 환경 변수 활용
- cloud 블록 설정은 환경 변수를 통해 유연하게 구성할 수 있습니다.
정보
주요 환경 변수:
- TF_CLOUD_ORGANIZATION: 조직 이름
- TF_CLOUD_HOSTNAME: Terraform Enterprise 호스트명
- TF_CLOUD_PROJECT: 프로젝트 이름
- TF_WORKSPACE: 워크스페이스 이름
4. 실전 활용 예제
4.1 멀티 프로바이더 설정
- 여러 클라우드 프로바이더를 동시에 사용하는 경우의 설정 예시입니다.
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 4.0.0"
}
azurerm = {
source = "hashicorp/azurerm"
version = ">= 3.0.0"
}
}
required_version = ">= 1.0.0"
}
4.2 Terraform Enterprise 연동
- 사내 Terraform Enterprise 환경과 연동하는 설정 예시입니다.
terraform {
cloud {
organization = "example_corp"
hostname = "terraform.example.com"
workspaces {
tags = ["production", "webapp"]
}
}
}
5. 모범 사례와 주의사항
5.1 버전 관리
- 항상 required_version을 명시하여 버전 호환성 문제를 예방
- 프로바이더 버전은 가능한 한 구체적으로 지정
- 메이저 버전 업데이트는 신중하게 진행