Terraform Associate 004 #3 테라폼 기본기: 버전 제약, 잠금 파일, provider 설정
이번 범위는 테라폼과 provider를 “준비"하는 영역입니다. 실무에서는 한 번 설정하고 잊는 부분이라 오히려 시험 직전에 흔들리기 쉽고, 특히 버전 제약 연산자의 해석과 잠금 파일의 역할은 문항 제조기라고 불러도 될 만큼 자주 나옵니다. 기초 #1의 설치와 기초 #2의 블록 문법을 시험의 각도로 다시 봅니다.
설치와 버전 확인 #
테라폼은 단일 바이너리라 설치가 단순합니다. 시험 관점의 요점만 추리면, 공식 배포 채널(패키지 관리자 또는 바이너리 다운로드)로 설치하고 terraform version으로 확인한다는 것, 그리고 여러 프로젝트가 다른 테라폼 버전을 요구할 때를 위한 버전 관리 도구(tfenv 계열)가 존재한다는 정도입니다. 문항의 무게는 설치 자체보다 다음 절의 버전 지정에 실립니다.
버전 제약 연산자: ~>를 읽을 수 있어야 합니다 #
terraform 블록과 required_providers에 쓰는 제약 문법입니다.
terraform {
required_version = ">= 1.12.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 6.0"
}
}
}| 연산자 | 의미 | 예 |
|---|---|---|
= 6.2.0 (또는 6.2.0) | 정확히 이 버전만 | 6.2.0만 허용 |
>= 6.2 | 이상 | 6.2 이후 전부 |
>= 6.2, < 7.0 | 범위 조합 | 쉼표는 AND |
~> 6.2 | 마지막 자리만 증가 허용 | 6.2, 6.3, … 6.x 허용, 7.0 불가 |
~> 6.2.0 | 마지막 자리만 증가 허용 | 6.2.0〜6.2.x 허용, 6.3 불가 |
시험의 단골은 물결(pessimistic) 연산자 ~>입니다. 핵심 규칙은 명시한 마지막 자리만 올라갈 수 있다는 것으로, ~> 6.2와 ~> 6.2.0이 허용하는 범위가 다르다는 점까지 구분해야 합니다. “메이저 업그레이드의 파괴적 변경은 막고 마이너·패치는 받겠다"라는 실무 의도가 이 연산자의 존재 이유이며, 기초와 실전 내내 ~> 6.0을 썼던 이유이기도 합니다.
잠금 파일: 제약과 고정의 구분 #
버전 관련 두 파일의 역할 구분이 이 영역의 두 번째 단골입니다.
- required_providers의 version: 허용 범위의 선언입니다. 사람이 작성합니다.
.terraform.lock.hcl: init이 그 범위 안에서 실제로 고른 정확한 버전과 체크섬의 기록입니다. 테라폼이 생성합니다.
범위가 ~> 6.0이어도 잠금 파일이 6.4.1을 기록하고 있으면 팀 전원과 CI가 6.4.1을 씁니다. 그래서 잠금 파일은 버전 관리에 커밋해야 하는 파일입니다(기초 #5에서 state는 커밋 금지, 잠금 파일은 커밋이라고 구분한 그 내용이 그대로 출제 포인트입니다). 잠금 범위 안에서 최신으로 올리고 싶을 때 쓰는 명령이 terraform init -upgrade라는 것까지가 한 세트입니다.
provider 설정과 alias #
provider 블록은 자격 증명과 리전 같은 연결 설정을 담습니다. 시험 포인트는 두 가지입니다.
- 같은 provider를 여러 설정으로:
alias를 붙여 등록하고, 리소스에서provider = aws.us_east_1로 지정합니다. 실전 #10에서 CloudFront 인증서 때문에 us-east-1을 함께 쓴 구성이 정확히 이 문항의 실물입니다.
provider "aws" {
region = "ap-northeast-2"
}
provider "aws" {
alias = "us_east_1"
region = "us-east-1"
}- 자격 증명을 코드에 적지 않기: provider 블록에 액세스 키를 하드코딩하는 선택지는 항상 오답입니다. 환경 변수, 공유 자격 증명 파일, IAM 역할 같은 외부 주입이 정답 방향입니다.
.terraform 디렉터리: init이 만드는 것들 #
“init 후 생기는 것"을 묻는 문항 대비로 구분해 둡니다.
| 산출물 | 내용 | 커밋 여부 |
|---|---|---|
.terraform/ | 내려받은 provider 플러그인, 모듈 캐시, 백엔드 설정 | 커밋 안 함(.gitignore) |
.terraform.lock.hcl | provider 버전·체크섬 고정 | 커밋함 |
.terraform/은 언제든 init으로 재생성되는 로컬 캐시라는 성격, 잠금 파일은 팀의 재현성을 지키는 공유 기록이라는 성격의 대비가 답의 근거입니다.
정리 #
이번 글에서 다룬 내용입니다.
- 버전 제약의 핵심은
~>입니다. 명시한 마지막 자리만 증가를 허용하며,~> 6.2와~> 6.2.0의 범위 차이를 구분합니다 - required_providers는 허용 범위, .terraform.lock.hcl은 실제 고른 버전의 고정입니다. 잠금 파일은 커밋하고, 갱신은 init -upgrade입니다
- 같은 provider의 다중 설정은 alias로 하고, 리소스에서 provider 인수로 지정합니다
- 자격 증명 하드코딩 선택지는 항상 오답입니다. 외부 주입이 정답 방향입니다
- .terraform 디렉터리는 재생성 가능한 로컬 캐시라 커밋하지 않습니다
다음 글(#4 핵심 워크플로)에서는 시험의 중심 영역인 init, plan, apply, destroy 사이클과 각 명령의 옵션, 그리고 디버깅 로그 설정을 다룹니다.