Ssoon
Chapter (05) State - 목적/의미/동기화 본문
CloudNet@ 가시다님이 진행하는 Terraform 101 Study 2기
"테라폼으로 시작하는 IaC" (한빛미디어) 도서로 진행!
작업자가 정의한 코드와 실제 반영된 프로비저닝 결과를 저장
▶ 리소스 생성, 수정, 삭제에 대한 동작 판단 작업을 수행
- 로컬실행환경 : terraform.tfstate 파일에 JSON 형태로 저장
- 공동관리환경 : 원격 저장소에 저장
✅ State 의 목적과 의미
- State 를 사용
- 대상 환경의 관리 Resource 판별 및 결과 기록
- State 역활
- 테라폼 구성과 실제를 동기화 / 각 Resource 에 고유한 ID(Resource 주소)로 맵핑
- Resource 종속성과 같은 메타데이터를 저장/추적
- 프로비저닝 결과를 캐싱
✔ main.tf
resource "random_password" "password" {
length = 16
special = true
override_special = "!#$%"
}
✔ terraform.tfstate
- JSON 형태로 작성된 state 를 통해 속성과 인수를 확인
✔ main.tf - 해당 내용 추가
data "aws_ami" "amzn2" {
most_recent = true
owners = ["amazon"]
filter {
name = "owner-alias"
values = ["amazon"]
}
filter {
name = "name"
values = ["amzn2-ami-hvm*"]
}
}
resource "aws_instance" "app_server" {
ami = data.aws_ami.amzn2.id
instance_type = "t2.micro"
}
- Plan 실행 ▶ refresh 동작 ▶ Resource 생성의 대상과 State를 기준으로 비교
- 저장되어 있는 State 와 실제 형상을 비교
- -refresh=false ▶ State 를 기준으로 실행 계획 생성 ▶ 대상 환경과의 동기화 과정 생략
- 실제 형상과 비교하지 않고 실행 계획을 생성
✅ Stete 동기화
🧿 유형 1
구성 리소스 정의 | State 의 구성 데이터 | 실제 리소스 | 기본 예상 동작 |
있음 | X | X | Resource 생성 |
- 테라폼 구성 파일에 신규 Resource 정의 -> Apply -> State 없는 Resource 생성 작업 수행
✔ main.tf
resource "local_file" "foo" {
content = "foo"
filename = "${path.module}/foo.txt"
}
✔ terraform.tfstate
🧿 유형 2
구성 리소스 정의 | State 의 구성 데이터 | 실제 리소스 | 기본 예상 동작 |
있음 | 있음 | X | Resource 생성 |
- 테라폼 구성 파일에 Resource 가 있고 State 구성 내용이 있지만 실제 Reosurce 가 없는 경우 -> 생성작업 수행
- 테라폼 프로비저닝을 완료했지만 사용자가 수동으로 인프라를 삭제한 경우
1. 유형 1 생성된 Resource인 foo.txt 파일 강제 삭제
2. terraform paln 수행
- 실제 Resource 를 삭제 -> terraform plan / terraform apply -> 다시 생성 - 실행 계획 발생
3. Refresh 수행 -> State와 비교
- refresh=false 인수 추가해 plan 실행 -> State만 확인 -> 이미 생성했다고 판단 -> Resource 생성 하지 않음
🧿 유형 3
구성 리소스 정의 | State 의 구성 데이터 | 실제 리소스 | 기본 예상 동작 |
있음 | 있음 | 있음 | 동작 없음 |
- 테라폼 구성에 정의된 Resource 로 생성된 프로비저닝 결과가 State 에 있고 실제 Resource 도 있는 경우
- 테라폼 관련 리소스에 대한 변경 계획이 발생하지 않음
- 유형 2 에 다시 terraform apply 수행 👉🏻 프로비저닝 결과가 있는 경우 👉🏻 terraform plan 으로 실행 계획 생성 👉🏻변경 사항 없음 👉🏻 코드 / State / 형상이 모두 일치
🧿 유형 4
구성 리소스 정의 | State 의 구성 데이터 | 실제 리소스 | 기본 예상 동작 |
X | 있음 | 있음 | Resource 삭제 |
- 구성 / State / 실게 Resource 있는 상태
- 테라폼에서 정의한 Resource 구문 삭제 - 사용자는 의도적으로 해당 Resource 삭제
- 테라폼은 구성 파일을 기준으로 State와 비교
- 삭제된 구성을 실제 Resource 에서 제거
✔ main.tf
- Resource 를 수석 처리 👉🏻 terraform plan 실행 없어진 코드 선언을 삭제
# resource "local_file" "foo" {
# content = "foo"
# filename = "${path.module}/foo.txt"
# }
- 테라폼 구성 기준으로 실행 계획 작성
🧿 유형 5
구성 리소스 정의 | State 의 구성 데이터 | 실제 리소스 | 기본 예상 동작 |
X | X | 있음 | 동작 없음 |
- 이미 만들어진 Resource 만 있다면 👉🏻 테라폼의 State 에 없는 내용이므로 👉🏻 테라폼에서 관리 되지 않음 👉🏻 아무 작업도 수행할 수 없다.
- 처음부터 테라폼으로 관리되지 않는 리소스인 경우
- 테라폼으로 생성하고 구성과 State가 삭제된 경우
'Terraform 101 Study 2기' 카테고리의 다른 글
Chapter (06) Module - 작성 기본 원칙 / 모듈화 (0) | 2023.07.24 |
---|---|
Chapter (05) State - 워크스페이스 (0) | 2023.07.19 |
Chapter (04) 프로바이더 (0) | 2023.07.17 |
Chapter (03) 기본 사용법 - HCL - 조건식 / 함수 / 프로비저너 (0) | 2023.07.10 |
Chapter (03) 기본 사용법 - HCL - 반복문 (0) | 2023.07.10 |
Comments