resource "aws_vpc" "main" {
cidr_block = var.base_cidr_block
}
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
# Block body
<IDENTIFIER> = <EXPRESSIONS> # Argument
}
첫번째 지시어 = Block Type
두번째 지시어 = Block Type이 지원하는 Label (1개 or 0개 이상)
ex) resource "리소스 종류" "리소스 이름"
Key Value 형태의 변수 값을 지정한다.
ex) cidr_block = var.base_cidr_block
terraform, provider, resource, data, module, local, variable, output
디렉토리 내에 .tf 파일을 작성하게 되는데 tf파일은 HCL 문법을 따르지만 .JSON 확장자를 이용하여 json으로도 이용가능하다.
Terraform 으로 init, plan, apply 명령을 하게 되면 현재 사용자의 디렉토리 상에서 .tf파일과 .tf.json 파일을 찾게 되는데 하위 디렉토리에 대해서는 탐색을 하지 않는다.
tf 파일을 작성할 때는 인코딩을 항상 UTF-8로 설정해야 한다.
tf 파일을 가지고 있는 디렉토리를 Module이라고 부른다.
Module은 또한 Root Module과 Child Module로 나뉜다.

위의 그림처럼 디렉토리에 a,b,c 디렉토리(모듈)가 있고 c모듈이 a,b 모듈을 가져다 쓴다고 했을 때 c에서 terraform apply를 수행하게 된다고 하면 c라는 워크스페이스는 root 모듈이 되고 c가 사용하는 a,b 모듈은 child 모듈이 된다.

하지만 c에서 terraform apply하는 것이 아니라 a에서 terraform apply를 한다면 a가 root 모듈이 된다.
Block의 Label을 작성할 때 그 Label의 값을 Identifiers라고 하는데 제약사항이 존재한다.
Identifiers에 들어올 수 있는 값은 문자열, 숫자, _, - 이렇게 4가지다.
하지만 Identifiers에는 처음에 숫자가 들어올 수 없다.
terraform fmt -diff 명령어를 사용하면 tf 파일에 작성된 코드들을 컨벤션에 맞게 알맞게 수정해준다.