[테라폼] 리소스 구성 및 속성 참조

2024. 2. 16. 17:52·Linux
728x90

리소스의 수명주기

리소스의 수명주기는 기본적으로 알고 지나가야할 것 같다.
리소스의 속성은 lifecycle를 이용하여 작업자가 의도적으로 변경하는 메타인수이다.

  • Create_before_destory(bool): 리소스 수정시 신규 리소스를 우선 생성하고 기존 리소스를 삭제
  • Prevent_destory(bool): 해당 리소스를 삭제(Destroy)하려 할 때 명시적으로 거부
  • Ignore_changes(list): 리소스 요소에 선언된 인수의 변경 사항이 테라폼 실행 시 무시
  • Precondition: 리소스 요소에 선언된 인수의 조건을 검증
  • Postcondition: Plan과 Apply 이후의 결과를 속성 값으로 검증

리소스 속성

create_before_destory

리소스 안에 lifecycle에서 create_before_destroy = true 를 줄경우에 리소스를 삭제하고 다시 만들것인지 여부를 묻는것이다.
만약 false를 주면 삭제하지않고 수정한다.

resource "local_file" "abc" {  
content = "lifecycle - step 1"  
filename = "${path.module}/abc.txt"  

lifecycle {  
# ture를 주게되면 삭제하고 다시 생성한다.
create_before_destroy = false
    }  
}

Prevent_destroy

Prevent_destroy = true 는 삭제를 방지하는 옵션이다.
작업자가 의도적으로 특정 리소스의 삭제를 방지하고 싶은 경우에 사용한다고 한다.

resource "local_file" "abc" {  
content = "lifecycle - step 3" # 수정  
filename = "${path.module}/abc.txt"  

lifecycle {  
prevent_destroy = true # 삭제 방지  
    }  
}

만약 ture를 준 상태에서 apply를 하면 테라폼 수명주기(삭제 → 생성) 파일을 삭제하고 다시 생성하기 때문에 실패된다.
이는 파일을 수정하는건 되지만 삭제하고 리소스를 재 생성은 가능할 것이다.
테라폼의 수명주기때문에 리소스 속성(prevent_destory)이 적용되서 에러가 발생한다.

ignore_changes

Ignore_changes = [] 는 리소스 변경을 무시하는 옵션이다.
만약에 리소스가 변경되었고 다른 설정파일이 변경될때만 적용된다

resource "local_file" "abc" {  
content = "lifecycle - step 5" # 수정  
filename = "${path.module}/abc.txt"  

lifecycle {  
ignore_changes = [  
content  
]  
    }  
}

Precondition

Precondition는 리소스 생성 이전에 입력된 인수 값을 검증하는데 사용해 프로비저닝 이전에 미리 약속된 값 이외의 값 또는 필수로 명시해야하는 인수 값을 검증할 수 있다고 한다.
또한 어디서 문제가 있는지도 확인해준다.

variable "file_names"{  
  default = "step0.txt"  
}  

resource "local_file" "step6" {  
  content  = "lifecycle - step 6"  
  filename = "${path.module}/${var.file_names}"  # 수정

  lifecycle {  
    precondition {  
      condition = var.file_names == "step6.txt" # 파일이름을 위에 step0.txt로 변경하면 정상적으로 실행된다.  
      error_message = "file name is not \"step6.txt\""  
    }  
  }

postcondition

프로비저닝 변경 이후 결과를 검증함과 동시에 의존성을 갖는 다른 구성의 변경을 막는 기능이다.
종속성을 갖는 여러 리소스를 구성하는 경우에 리소스의 데이터가 다른 리소스 생성시 활용될 때 원하는 속성이 정의되어야 하는 경우를 확인할 수 있다.
프로비저닝 이후에 생성되는 속성 값이 있으므로 영향을 받는 다른 리소스가 생성되기 전에 예상되지않은 프로비저닝 작업을 방지할 수 있다고 한다.

resource "local_file" "step7" {  
content = "lifecycle - step 7"  
filename = "${path.module}/step7.txt"  

lifecycle {  
postcondition {  
condition = self.content != ""  
error_message = "content cannot empty"  
}  
}  
}  

output "step_content" {  
value = local_file.step7.id  
}
728x90

'Linux' 카테고리의 다른 글

PKIX ERROR 발생 이유  (0) 2024.02.23
SSL 인증서 에러(No subject alternative DNS name matching)  (0) 2024.02.22
프로메테우스(Prometheus), 그라파나(Grafana)를 Docker Compose로 설치하기  (0) 2024.02.08
NGINX SSL 인증서 등록  (2) 2024.02.08
DNS Qusery 지연 및 도메인 등록기관 이전  (3) 2023.11.23
'Linux' 카테고리의 다른 글
  • PKIX ERROR 발생 이유
  • SSL 인증서 에러(No subject alternative DNS name matching)
  • 프로메테우스(Prometheus), 그라파나(Grafana)를 Docker Compose로 설치하기
  • NGINX SSL 인증서 등록
정주원
정주원
개인블로그
  • 정주원
    Joon.eng
    정주원
  • 전체
    오늘
    어제
    • 분류 전체보기 (83)
      • Linux (43)
      • Windows (0)
      • Network (5)
      • Database (0)
      • Cloud (23)
      • Docker (3)
      • Ansible (2)
      • Language (1)
      • Etc (5)
  • 블로그 메뉴

    • 링크

      • GITLAB(woni)
    • 공지사항

    • 인기 글

    • hELLO· Designed By정상우.v4.10.0
    정주원
    [테라폼] 리소스 구성 및 속성 참조
    상단으로

    티스토리툴바