아무리 HCL 이 쉬운 DSL 이라곤 하지만 정확히 쓰고 읽기 위해서는 최소한의 공부가 필요하다. 우선 Terraform 을 설치하는게 우선이다.
1. Terraform 설치 (업그레이드)
가장 좋은 방법은 공식 사이트의 설치 가이드를 보고 설치하는 것이다.
나는 mac 을 이용하고 brew 를 통해 설치, 삭제, 업그레이드를 관리하는 것이 용이하므로 brew 로 설치했었다.
그 결과 버전 1.8.2 가 설치되어 있는 것을 확인할 수 있었다.
$> brew list terraform
# /opt/homebrew/Cellar/terraform/1.8.2/bin/terraform
$> terraform version
# Terraform v1.8.2
# on darwin_arm64
24년 11월 17일 기준 terraform 최신 버전은 1.9.8 이므로 업그레이드가 필요했다. 이럴때 brew 가 빛을 발한다.
$> brew update
# ==> Updating Homebrew...
$> brew upgrade terraform
# ==> Upgrading 1 outdated package:
# hashicorp/tap/terraform 1.8.2 -> 1.9.8
2. HCL 문법
공식문서에 따르면 Terraform 을 이용하기 위해 모든 HCL 문법을 디테일하게 알 필요는 없다고 한다. (그럼에도 궁금하다면 HCL Spec 을 확인하자) 그리고 HCL 이 아닌 JSON 형태로도 동일한 기능을 수행하게 할 수 있는데, 개발자가 직접 다루기보다는 프로그래밍적으로 다룰때 유용한 형태이다.
2.1 블록 (block)
HCL 언어는 주로 블록(block)과 인수(argument)로 구성된다.
블록은 특정 리소스나 설정을 정의하는 기본 단위이다. 각 블록은 블록 유형, 라벨, 그리고 본문으로 구성된다. 예를 들어, AWS의 EC2 인스턴스를 정의하는 블록은 다음과 같다:
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}
여기서 resource
는 블록 유형을, aws_instance
와 example
은 각각 리소스 유형과 로컬 이름을 나타낸다. 블록 본문에는 해당 리소스의 속성을 정의하는 인수들이 포함된다.
2.2 인수(argument)
인수는 위의 예제에서 속성에 값을 할당하는 데 사용된다. ami
와 instnace_type
이 인수이며, 각각의 등호(=
) 를 통해 할당된다. 인수의 값은 리터럴 값, 변수, 또는 표현식으로 지정할 수 있다.
2.3 표현식 (expression)
인수의 값에 표현식을 지정한다는 것의 예시는 다음과 같다.
resource "aws_subnet" "example" {
vpc_id = aws_vpc.example.id
cidr_block = "10.0.1.0/24"
}
여기서 vpc_id
에 aws_vpc.example.id
를 이용하여 다른 리소스의 id 를 참조하도록 하고 있는 형태가 표현식을 인수의 값으로 지정한 것이다.
2.4 주석 (Comment)
Terraform 구성 파일에서 주석은 #
또는 //
로 시작하는 한 줄 주석과, /* */
로 감싸는 여러 줄 주석이 있다.
3. 파일 구조
Terraform 구성은 .tf 확장자를 가진 파일로 작성되며, 하나의 디렉토리에 여러 파일이 있을 경우 Terraform은 이를 모두 읽어들여 하나의 구성으로 처리한다. 따라서 관련된 리소스나 모듈을 논리적으로 분리하여 파일을 구성하는 것이 좋다.
'탐구 생활 > Terraform' 카테고리의 다른 글
Terraform 기초: commands (0) | 2024.11.21 |
---|---|
Terraform 기초: State (0) | 2024.11.21 |
Terraform 기초: depends_on, output (0) | 2024.11.19 |
Terraform 소개 (0) | 2024.11.17 |
IAC 개요 및 주요 도구 (1) | 2024.11.17 |