Ssoon

Chapter (05) State - 목적/의미/동기화 본문

Terraform 101 Study 2기

Chapter (05) State - 목적/의미/동기화

구구달스 2023. 7. 19. 20:39

 

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가 삭제된 경우
Comments