Terraform Associate — Terraform Fundamentals 개념 정리
개념(한글) + 시험용 영어 표현 매칭 대응 objective: Objective 2 (Terraform Fundamentals)
2a. Provider 설치 및 버전 관리 (Install and version Terraform providers)
Provider 설치
- provider는
terraform init실행 시 자동으로 다운로드·설치됨 - 설치된 provider는 작업 디렉토리의
.terraform폴더에 저장됨 - 어떤 provider가 필요한지는
terraform블록 안required_providers에 선언
| 개념 | 영어 표현 |
|---|---|
| provider 다운로드·초기화 | terraform init |
| 필요한 provider 선언 블록 | required_providers |
| provider 출처 경로 | source (예: hashicorp/aws) |
| provider 설치 위치 | .terraform directory |
버전 제약 (Version Constraints)
version인자로 provider 버전을 고정하거나 범위를 지정- 협업 시 팀원 모두 동일한 provider 버전을 쓰게 함
| 연산자 | 의미 |
|---|---|
| = 1.0.0 | 정확히 해당 버전만 |
| != 1.0.0 | 해당 버전 제외 |
| >=, <=, >, < | 이상/이하/초과/미만 |
| ~> 1.2 (pessimistic) | 1.2 이상 ~ 2.0 미만 (마지막 자리만 올림 허용) |
의존성 잠금 파일 (Dependency Lock File)
.terraform.lock.hcl파일이 provider 버전을 고정(lock)terraform init시 자동 생성, 버전 관리(Git)에 커밋 권장- 버전을 올리려면
terraform init -upgrade
| 개념 | 영어 표현 |
|---|---|
| 의존성 잠금 파일 | dependency lock file (.terraform.lock.hcl) |
| provider 버전 업그레이드 | terraform init -upgrade |
2b. Provider 사용 방식 (How Terraform uses providers)
Provider의 역할
- provider는 **플러그인(plugin)**으로, Terraform과 대상 플랫폼 API를 연결
- 각 provider가 관리 가능한 리소스 타입(resource)과 데이터 소스(data source)를 정의
- AWS, Azure, GCP, Kubernetes 등 플랫폼마다 전용 provider 존재
| 개념 | 영어 표현 |
|---|---|
| 플러그인 | plugin |
| API 연결 담당 | communicates with the platform API |
| provider가 제공하는 자원 | resources & data sources |
Provider 설정 (Configuration)
provider블록으로 region, 인증 정보 등 설정- 리소스는 어떤 provider를 쓸지 자동으로 연결됨 (리소스 이름 접두사로 판단, 예:
aws_instance)
| 개념 | 영어 표현 |
|---|---|
| provider 설정 블록 | provider block |
| 지역/인증 등 설정 | configuration arguments (region, credentials) |
2c. 다중 Provider 설정 작성 (Multiple providers)
여러 Provider 사용
- 하나의 구성에서 여러 provider를 동시에 선언·사용 가능
required_providers에 필요한 provider들을 모두 나열
Alias (별칭)
- 같은 provider를 서로 다른 설정으로 여러 번 쓰려면
alias사용 - 예: 같은 AWS provider를 여러 region에 대해 각각 설정
- 리소스에서
provider = aws.west형태로 어떤 provider 설정을 쓸지 지정
| 개념 | 영어 표현 |
|---|---|
| provider 별칭 | alias |
| 기본 provider | default provider (no alias) |
| 리소스에서 provider 지정 | provider = . |
| 여러 region/계정 관리 | multiple provider configurations |
2d. State 사용 및 관리 방식 (How Terraform uses and manages state)
State란
- Terraform이 관리하는 실제 인프라와 구성 파일(config)을 매핑한 기록
- 기본 파일명:
terraform.tfstate(JSON 형식) - state를 통해 현재 상태(current state)와 원하는 상태(desired state)를 비교
| 개념 | 영어 표현 |
|---|---|
| 상태 파일 | state file (terraform.tfstate) |
| 실제 인프라와 구성 매핑 | maps real-world resources to configuration |
| 현재 상태 vs 원하는 상태 | current state vs desired state |
State의 필요성
- 리소스 메타데이터 추적 (매핑, 의존성)
plan/apply시 실제 인프라와 비교해 변경 사항 계산- 성능 향상 (매번 전체 API 조회 대신 state 참조)
| 개념 | 영어 표현 |
|---|---|
| 리소스 메타데이터 추적 | track metadata / resource mapping |
| 변경 사항 계산 | determine changes to apply |
로컬 vs 원격 State (Local vs Remote State)
- 기본은 로컬에
terraform.tfstate저장 - 협업 시에는 remote backend(S3, Terraform Cloud 등)에 state 저장
- 원격 state는 팀 공유 + 보안 + 잠금 기능 제공
| 개념 | 영어 표현 |
|---|---|
| 원격 저장소 설정 | backend |
| 원격 상태 | remote state |
| 동시 수정 방지 | state locking |
| 민감 정보 포함 주의 | state may contain sensitive data |
요약
| 주제 | 내용 |
|---|---|
| Provider 설치 | terraform init으로 다운로드, .terraform에 설치 |
| Provider 선언 | required_providers (source + version) |
| 버전 고정 | .terraform.lock.hcl (lock file), ~>(pessimistic) 자주 씀 |
| Provider 역할 | 플랫폼 API와 통신하는 plugin |
| 다중 Provider | alias로 같은 provider 여러 설정, provider = aws.west로 지정 |
| State 파일 | terraform.tfstate (JSON), 실제 인프라 ↔ 구성 매핑 |
| State 역할 | current vs desired 비교, 메타데이터 추적, 성능 |
| 협업 State | remote backend + state locking + 민감정보 주의 |