Ssoon
Chapter (03) 기본 사용법 - HCL - 블록 본문
CloudNet@ 가시다님이 진행하는 Terraform 101 Study 2기
"테라폼으로 시작하는 IaC" (한빛미디어) 도서로 진행!
✅ HCL (HashiCorp Configuration Language)
- 하시코프에서 IaC 와 구성 정보를 명시하기 위해 개발된 오픈 소스 도구
- 동일한 내용을 JSON으로 표현하는 것보다 더 간결하고 읽기 쉽게 작성할 수 있습니다.
https://github.com/hashicorp/hcl
✅ 테라폼 블록
- 테라폼 구성을 명시하는데 사용
- 버전을 명시적으로 선언하고 필요한 조건을 입력하여 오류를 최소화할 것을 권장
terraform {
required_version = "~> 1.3.0" #테라폼버전
required_providers { #프로바이더 버전
random = {
version = ">= 3.0.0, < 3.1.0"
}
aws = {
version = "4.2.0"
}
}
cloud { #Cloud/Ennterprise 원격 실행 정보
organization = "<MY_ORG_NAME>"
workspaces {
name = "my-first-workspace"
}
}
backend "local" {
path = "relative/path/to/terraform.tfstate"
}
}
- = 또는 연산자 없음 : 지정된 버전만을 허용
- != : 지정된 버전 제외
- >, >=. <. <= : 지정된 버전과 비교 맞는 경우 허용
- ~> : 지정된 버전에서 가장 자리수가 낮은 구성요소만 증가 허용
- ~> 1.0.0 : v1.0.0을 포함한 v1.0.x 버전을 허용하고, v1.x는 허용하지 않는다.
🧿 테라폼 버전
- required_version 으로 정의합니다.
- 지정된 조건과 일치하지 않는 경우 오류를 출려하고 동작하지 않습니다.
- 현재 테라폼 버전을 확인합니다.
- 버전을 제한하는 테스트을 위해 현재 테라폼 버전보다 낮게 main.tf 에 terraform 블록을 추가합니다.
terraform {
reqired_version = "< 1.0.0"
}
resource "local_file" "abc" {
content = "abc!"
filename = "${path.module}/abc.txt"
}
- 지원하지 않는 테라폼 버전이라는 오류를 발생합니다.
- 다시 버전을 수정하고 실행합니다.
terraform {
required_version = ">= 1.0.0"
}
🧿 프로바이더 버전
- 각 프로바이더의 이름에 소스 경로와 버전을 명시합니다.
https://registry.terraform.io/browse/providers
- 프로바이더 버전을 제한하는 테스트를 위해 main.tf 를 수정합니다.
terraform {
required_version = ">= 1.0.0"
required_providers {
local = {
source = "hashicorp/local"
version = ">= 10000.0.0"
}
}
}
- 실제 가용한 버전의 프로바이더가 없으므로 실패합니다.
- 올바른 버전 제한을 위해 버전을 >= 2.0.0으로 수정하고 다시 실행합니다.
terraform {
required_version = ">= 1.0.0"
required_providers {
local = {
source = "hashicorp/local"
version = ">= 2.0.0"
}
}
}
🧿 백엔드 블록
- 테라폼 실행 시 저장되는 State(상태 파일)의 저장 위히를 선언합니다.
- 하나의 백엔드만 허용합니다.
- 테라폼은 State의 데이터를 사용하여 코드로 관리된 리소스를 탐색하고 추적합니다.
- 협업을 휘해서는 테라폼으로 생성한 리소스의 상태 저장 파일을 공유 하는 외부 백엔드 저장소가 필요합니다.
✔ State 잠금 동작
- 기본적으로 활성화되는 백엔드는 작업자의 로컬 환경에 저장하고 관리하는 local 입니다.
- 공유되는 백엔드에 State가 관리되면 테라폼이 실행하는 동안 .terraform.tfstate.lock.info 파일이 생성되며 해당 State를 동시에 사용하지 못하도록 잠금 처리합니다.
backend "local" {
path = "relative/path/to/terraform.tfstate" #State 파일 위치
}
}
- .terraform.tfstate.locak.into : State 동시 업데이트를 차단하는 lock 파일 내용
{
"ID":"dc96f16f-e928-185e-e027-2e6b79ccfc4e",
"Operation":"OperationTypeApply",
"Info":"",
"Who":"DESKTOP-M9AKM59\\ssoon@DESKTOP-M9AKM59",
"Version":"1.5.2",
"Created":"2023-07-05T14:37:05.0053394Z",
"Path":"relative/path/to/terraform.tfstate"
}
- 잠금 파일이 어떤 영향을 주는지 main.tf 의 내용을 수정합니다.
resource "local_file" "abc" {
content = "123456!"
filename = "${path.module}/abc.txt"
}
- 첫번째 터미널에서 terraform apply을 실행한 후 두번째 터미널에서 terraform apply을 실행하면 State가 잠겼음을 나타내는 오류를 보여줍니다.
✔ 백엔드 설정 변경
- init 명령을 수행해 State 의 위치를 재설정합니다.
backend "local" {
path = "state/terraform.tfstate"
}
- 이전 구성 유지 : -migrate-state :
- terraform.tfstate 의 이전 구성에서 최신의 state 스냅샷을 읽고 기록된 정보를 새 구성으로 전환합니다.
- 새로 초기화 : -reconfigure :
- init 실행하기 전에 terraform.tfstate 파일을 삭제해 테라폼을 처음 사용할 떄처럼 작업 공간(디렉터리)을 초기화 합니다.
'Terraform 101 Study 2기' 카테고리의 다른 글
Chapter (03) 기본 사용법 - HCL - 데이터 소스 / Variable (0) | 2023.07.10 |
---|---|
Chapter (03) 기본 사용법 - HCL - Resource (0) | 2023.07.10 |
Chapter (03) 기본 사용법 - 주요 커맨드 (0) | 2023.07.04 |
Chapter (02) 실행 환경 구성 (0) | 2023.07.04 |
Chapter (01) IaC와 테라폼 (0) | 2023.06.29 |
Comments