본문 바로가기
AWS/Part 4. Ch02 테라폼을 이용한 인프라 관리

CH02_03. 테라폼 HCL 기초 문법

by Engineer-Lee 2022. 5. 31.
반응형

테라폼 공식문서에서 HCL에 대한 정보를 볼 수 있다.

https://www.terraform.io/language

 

Overview - Configuration Language | Terraform by HashiCorp

You can use the Terraform language to write configuration files that tell Terraform how to manage a collection of infrastructure.

www.terraform.io

 

HCL 코드 예시는 아래와 같다.

 

첫 번째로 오는 지시어는 블록의 타입이다. 블록의 역할에 따라 provider, resource, data, variable, output 등 여러 가지가 있다.

그다음으로는 블록 타입별로 지원하는 블록 레이블이 온다. 블록 레이블은 0개 이상의 레이블이 온다.

resource 같은 경우는 2개의 레이블을 갖는다.

첫 번째 레이블은 리소스의 종류이고 두 번째 레이블은 리소스의 이름을 받는다.

괄호 안에는 인자 값을 받는다. 인자 값은 키 밸류 형식으로 이루어진다.

위 예시에선 base_cidr_block이라는 변수 값을 cidr_block에 할당된 것이다.

 

블록 레이블을 작성할 때 그 레이블을 identifier라고 한다.

identifier에는 제약사항이 있는데 그것은 항상 문자, 숫자, 언더스코어, 하이픈으로 구성되어야 하고 첫 문자로 숫자는 금지된다.

 

주석으로는 #, //, /* */이 가능하다.

 

다음으로 테라폼의 파일 구조를 보면. tf 확장자를 가진 파일은 HCL 문법을 따르는 파일이고

사용자가 json을 기반으로 테라폼을 이용한다면. tf.json 확장자를 가진 파일을 사용해야 한다.

 

테라폼의 디렉터리는 모듈이라고 부르기도 한다,

이 모듈에는 두 가지 종류가 있는데 root module과 child module이 있다.

이것은 사용하는 시기의 디렉토리 위치에 따라 root module이 될 수도 있고 child module이 될 수도 있다.

만약 dictory에 a, b, c의 모듈이 존재할 때 a모듈을 사용한다고 하면 a는 root module이 되고 a가 참조하여 사용하는 b, c는 child module이 된다.

 

테라폼은 현재 디렉토리에 있는 테라폼 파일(.tf 또는 .tf.json 등)만을 탐색하고 하위 디렉토리에 있는 테라폼 파일에 대해서는 탐색을 하지 않는다.

 

 

테라폼 언어에서 지향하는 스타일은 아래 링크에서 확인할 수 있다.

https://www.terraform.io/language/syntax/style

 

Style Conventions - Configuration Language | Terraform by HashiCorp

Learn recommended formatting conventions for the Terraform language and a command to automatically enforce them.

www.terraform.io

 

 

아래의 코드는 테라폼 convention을 지키지 않은 경우이다.

 

 

 

 

이는 terraform fmt -diff 명령어로 수정된 부분이 출력하고 코드 스타일을 자동으로 변경할 수 있다.

 

 

반응형