Terraform Associate — Terraform Configuration 개념 정리
개념(한글) + 시험용 영어 표현 매칭 대응 objective: Objective 4 (Terraform Configuration)
4a. resource와 data 블록 구분 (Use and differentiate resource and data blocks)
resource 블록
- 실제 인프라 자원을 생성·수정·삭제하는 블록
- Terraform이 관리(생명주기 담당)하는 대상
data 블록
- 이미 존재하는 자원의 정보를 읽어오기만 함 (조회용)
- 생성/변경하지 않음 → 읽기 전용(read-only)
| 개념 | 영어 표현 |
|---|---|
| 자원 생성·관리 블록 | resource block |
| 기존 자원 조회 블록 | data block / data source |
| 읽기 전용 | read-only |
| 블록 참조 형식 | resource: <TYPE>.<NAME> / data: data.<TYPE>.<NAME> |
4b. attribute 참조 및 리소스 간 참조 (Refer to resource attributes / cross-resource references)
attribute 참조
- 리소스가 만든 값(예: ID, IP)을 다른 곳에서 참조 가능
- 형식:
<RESOURCE_TYPE>.<NAME>.<ATTRIBUTE>(예:aws_instance.web.id)
리소스 간 참조 (Cross-resource reference)
- 한 리소스의 속성을 다른 리소스가 참조하면 암묵적 의존성(implicit dependency) 이 생성됨
- Terraform이 참조 관계를 보고 생성 순서를 자동으로 정함
| 개념 | 영어 표현 |
|---|---|
| 속성 참조 | attribute reference |
| 참조 형식 | resource_type.name.attribute |
| 리소스 간 참조 | cross-resource reference |
| 자동 생성되는 의존성 | implicit dependency |
4c. 변수와 출력 (Use variables and outputs)
Input Variables (입력 변수)
- 구성에 값을 외부에서 주입 → 재사용성·유연성 향상
variable블록으로 선언 (type, default, description 지정 가능)- 참조:
var.<NAME>
Output Values (출력 값)
- apply 후 특정 값을 화면에 출력하거나 다른 모듈에 전달
output블록으로 선언, 참조:value = ...
Local Values (지역 값)
- 반복되는 표현식을 이름 붙여 재사용, 참조:
local.<NAME>
| 개념 | 영어 표현 |
|---|---|
| 입력 변수 | input variable (var.<NAME>) |
| 출력 값 | output value |
| 지역 값 | local values (local.<NAME>) |
| 변수 값 지정 방법 | CLI (-var), tfvars file, environment variable (TF_VAR_) |
4d. 복합 타입 (Understand and use complex types)
기본 타입 (Primitive)
string,number,bool
복합/컬렉션 타입 (Complex / Collection types)
| 타입 | 설명 |
|---|---|
| list | 순서 있는 같은 타입 값 모음 (인덱스 접근) |
| set | 중복 없는 값 모음 (순서 없음) |
| map | 키-값 쌍 모음 (같은 타입 값) |
| object | 서로 다른 타입의 속성을 가진 구조체 |
| tuple | 서로 다른 타입 값을 순서대로 가진 모음 |
| 개념 | 영어 표현 |
|---|---|
| 기본 타입 | primitive types (string, number, bool) |
| 컬렉션 타입 | collection types (list, set, map) |
| 구조 타입 | structural types (object, tuple) |
4e. 표현식과 함수로 동적 설정 (Dynamic configuration with expressions and functions)
표현식 (Expressions)
- 조건 표현식:
condition ? true_val : false_val - 반복:
for표현식, 리소스 반복은count/for_each - 문자열 삽입:
"${...}"(interpolation)
함수 (Built-in Functions)
- 내장 함수로 값 가공 (예:
length(),join(),lookup(),element(),merge(),file()) - 사용자 정의 함수는 없음 (내장 함수만 사용)
| 개념 | 영어 표현 |
|---|---|
| 조건 표현식 | conditional expression (? :) |
| 반복 표현식 | for expression |
| 리소스 반복 | count / for_each |
| 문자열 보간 | string interpolation |
| 내장 함수 | built-in functions |
4f. 리소스 의존성 정의 (Define resource dependencies)
암묵적 의존성 (Implicit dependency)
- 한 리소스가 다른 리소스의 속성을 참조하면 자동 생성
- 대부분의 의존성은 이 방식으로 처리됨 (권장)
명시적 의존성 (Explicit dependency)
- 참조 관계가 없지만 순서를 강제해야 할 때
depends_on사용
| 개념 | 영어 표현 |
|---|---|
| 암묵적 의존성 | implicit dependency |
| 명시적 의존성 | explicit dependency (depends_on) |
| 의존성 그래프 | dependency graph |
4g. custom condition으로 설정 검증 (Validate using custom conditions)
Variable Validation
variable블록 안validation으로 입력값 규칙 검사
Precondition / Postcondition
precondition: 리소스 생성 전 조건 검사postcondition: 생성 후 결과 검사lifecycle블록 또는 리소스 내부에서 정의
Check 블록
check블록으로 인프라 전반의 검증(assertion) 수행
| 개념 | 영어 표현 |
|---|---|
| 변수 검증 | variable validation |
| 사전 조건 | precondition |
| 사후 조건 | postcondition |
| 검증 블록 | check block |
| 실패 시 메시지 | error_message |
4h. 민감 데이터 관리 & Vault (Managing sensitive data / secrets with Vault)
민감 데이터 처리 (Sensitive data)
- 변수나 출력을
sensitive = true로 표시 → CLI 출력에서 값 숨김 - 단, state 파일에는 평문으로 저장되므로 state 보안이 중요
- 비밀번호·키를 코드에 하드코딩하지 않기
| 개념 | 영어 표현 |
|---|---|
| 민감 표시 | sensitive = true |
| 출력에서 값 숨김 | hidden in CLI output |
| state에 평문 저장 주의 | stored in plain text in state |
| 하드코딩 금지 | do not hardcode secrets |
Vault를 통한 시크릿 관리 (Secrets management with Vault)
- HashiCorp Vault로 비밀 값을 중앙에서 안전하게 관리
- Vault provider로 시크릿을 동적으로 가져와 사용
- 시크릿을 코드/state에 남기지 않고 외부에서 안전하게 주입
| 개념 | 영어 표현 |
|---|---|
| 시크릿 관리 도구 | HashiCorp Vault |
| 중앙 집중 관리 | centralized secrets management |
| 동적 시크릿 | dynamic secrets |
요약
| 주제 | 내용 |
|---|---|
| resource vs data | resource=생성·관리 / data=조회(read-only) |
| attribute 참조 | type.name.attribute, 참조 시 implicit dependency 생성 |
| 변수/출력 | input variable(var.), output, local |
| 복합 타입 | list, set, map (collection) / object, tuple (structural) |
| 표현식·함수 | conditional, for, count/for_each, built-in functions |
| 의존성 | implicit(참조) / explicit(depends_on) |
| custom 검증 | validation, precondition, postcondition, check |
| 민감 데이터 | sensitive=true(단 state엔 평문), Vault로 시크릿 관리 |