DevOps/Terraform
[TF]HCL 기초문법
Michael Kim
2021. 12. 19. 00:27
HashiCorp Configuration Language(HCL)
Terraform 파일은 HashiCorp에서 만든 언어인 HCL을 사용하고 있다.
파일과 디렉토리로 구성되었고 UTF-8을 사용한다.
Terraform 형식 .tf
와 JSON 형식인 .json
을 모두 사용 가능하다
보통 작성할 때는 Terraform 형식으로 많이 사용하는데 사람이 읽기 좋은 구조로 되어 있고 주석도 사용이 가능하기 때문이다.
주석
라인 주석 #
, //
사용하고 여러 라인 주석은 /*
, */
를 사용한다.
Style Conventions
Terraform에서 권장하는 작성 규약이 있다.
ami = "ami-example"
instance_type = "t2.micro"
1. =
열을 맞춰서 작성
2. 들여쓰기를 Tap
이 아닌 Space
2개로 사용
3. 명령어 terraform fmt
를 사용하여 규약에 맞게 코드 정렬을 사용할 수 있다.
Block의 종류
- resource : 생성할 인프라 자원
- ex) aws_iam_group, aws_iam_user
- provider : Terraform으로 정의할 Infrastucture Provider를 의미
- ex) AWS, GCP, Azure, Kubernetes
- module : 공통적으로 활용할 수 있는 인프라 코드를 한 곳에서 정의하는 부분
- Root Module과 Child Module이 존재한다.
- 변수만 변경하여 동일한 리소스를 쉽게 생성 가능한 장점이 있다.
- 3개의 디렉토리 A, B, C 가 있으면 C를 apply를 하면 C의 워크 스페이스는 Root module이 되고 A, B는 Child module이 된다.
- locals : 지역 변수와 비슷하게 모듈 내에서 재사용 할 값을 정의, 모듈 내 리소스에 공통 태그를 지정할 때 유용하다.
- data : provider에서 값을 가져오기 사용된다. ARN 파싱, JSON 구성, 다른 module의 output 값 접근 등 수많은 용도로 사용이 가능하다.
- variable : 변수를 입력 받을 수 있다.
- output : 인프라를 프로비저닝 한 후에 생성된 자원을 output 부분으로 출력할 수 있다. 추출한 부분은
remote state
에서 활용할 수 있다. - remote state : VPC, IAM 등과 같은 공용 서비스를 다른 서비스에서 참조할 수 있다. tfstate파일이 저장되어 있는 backend 정보를 명시하면 terraform이 해당 backend에서 output 정보들을 가져온다.
- backend : terraform의 상태를 정할 공간을 지정하는 부분 backend를 사용하여 현재 배포된 최신 상태를 외부에 저장하여 다른 사람과의 협업이 가능하다 대표적으로는 AWS S3가 있다.
참조
[1] https://www.terraform.io/language/syntax/style