terraform plan
을 실행하면 암묵적으로 refresh 동작을 수행하면서 리소스 생성의 대상과 state를 기준으로 비교하는 과정을 거친다.-refresh = false
플래그를 사용해 리소스 생성 대상과의 동기화 과정을 생략하고 state를 기준으로 실행 계획을 생성할 수 있다.현재 상태(state file) 로컬 또는 remote backend에서 읽어옴
리프레시(refresh): 현재 클라우드의 실제 리소스 상태를 API로 조회해서 .tfstate
와 비교
⇒ 만약 여기서 실제 리소스 상태와 state가 다르다면, 실제 리소스 상태에 맞춰서 state 파일을 동기화
계획 생성(plan): .tf
코드와 현재 상태를 비교해서 어떤 변경이 필요한지 계산
refresh=false
란?terraform plan -refresh=false
이 명령은 👉 2번의 상태 리프레시를 건너뛰겠다는 뜻입니다.
즉, Terraform은 현재 .tfstate 파일만 믿고 변경 사항을 계산합니다.
실제 클라우드 자원이 어떤 상태인지 조회하지 않습니다.
기호 | 의미 | 행동 | 비고 |
---|---|---|---|
+ | Create(add) | 리소스 생성 | |
- | Destroy | 리소스 삭제 | |
-/+ | Replace(destroy & add) | 리소스 삭제 후 생성 | lifecycle의 create_before_destroy 옵션을 통해 생성 후 삭제를 수행하도록 설정할 수 있다. |
~ | Update in-place(change) | 리소스 수정 |
/+
) vs Update in-place (~
)구분 | Replace (-/+ ) | Update in-place (~ ) |
---|---|---|
의미 | 기존 리소스를 삭제하고 새로 생성 | 기존 리소스를 그대로 두고 속성만 변경 |
리소스 ID | ❌ 새 ID로 변경됨 | ✅ 기존 ID 유지됨 |
다운타임 | 있음 (삭제 → 생성) | 없음 (대부분) |
예시 속성 | 인스턴스 타입, 서브넷, VPC 변경 등 | 태그, 디스크 크기, 설명 등 |
트리거 조건 | 리소스 특성상 변경 불가능한 속성 변경 시 | 변경 가능한 속성 수정 시 |
로그 기호 | -/+ | ~ |
Replace (-/+ ) | 변경이 안 되는 속성은 리소스를 삭제하고 새로 만듦 (ID 변경) |
---|---|
Update (~ ) | 리소스는 유지하면서 속성만 바꿈 (ID 유지) |
terraform.tfstate.d
디렉토리가 생성되고 하위에 생성한 워크스페이스 이름을 확인할 수 있습니다.resource "aws_instance" "web" {
count = "${terraform.workspace == "default" ? 5 : 1}"
ami = "~"
instance_type = "t3.micro"
}
# 새로운 워크스페이스 생성 => 자동으로 해당 워크스페이스로 전환됨
$terraform workspace new <workspsace name>
# 사용 중인 워크스페이크 확인
$terraform workspace show
# 활성화된 워크스페이스 변경
$terraform workspace select <workspsace name>
# 워크스페이스 삭제
$terraform workspace delete <workspsace name>