HCL 에 대해서 알아보자
HCL의 구조
resource "aws_vpc" "main" {
cidr_block = var.base_cidr_block
}
<BLOCK TYPE> "<BLOCK LABEL1>" "<BLOCK LABEL2>" {
<IDENTIFIER> = <EXPRESSION>
}
BLOCK TYPE: 말그대로 block type 이고 resource,input,variables 등등 여러 파입들을 사용할 수 있다 (BLOCK TYPE 에 따라서 뒤에 LABEL 이 얼마나 올지 결정되기도 한다)
Block Label1: block label 에 위치한 "aws_vpc" "main"은 resource type 으로 provider (쉽게 말해 plugin 을) import 하여 사용할 수 있게 해준다는 것이다.
Block Label2: block label + block name이 한 세트가 되어야한다(block type에 따라서 달라지긴함) 즉 이 block label2는 식별자의 역할이라고 보면된다.
IDENTIFIER = EXPRESSION: key-value 형식으로 설정 값을 넣어준다
파일 구조
main.tf: 테라폼 cli 를 사용하여 apply 명령어를 사용하면 가장 먼저 main 소스코드를 동작시킨다.
module: 테라폼 파일들을 가지고 있는 디렉터리를 모듈이라고 한다
(module은 root 모듈과 child 모듈로 나뉘는데 만약 a라는 모듈을 apply함고 동시에 c,b 모듈을 참조 한다면
여기서 a모듈이 root모듈이고 c,b모듈이 child 모듈이 된다)
주석
#
Style Conventions
여러명이 협업을 해나갈 때 지키면 좋은 규약
tab 사용 안함 two space 사용함
ami = "abc123"
instance_type = "t2.micro"
이러한 형태로 만들어 줘야한다
하지만 이러한 style conventions을 간단하게 포맷해줄 수 있다
terraform fmt -diff
이 명령어로 Style Conventions 을 지켜줄 수 있다
HCL 기반 terraform 의 간단한 block type 과 block label 들을 보면서 간단한 실습을 진행해도 좋다
provider "aws" {
region = "us-east-1"
}
data "aws_ami" "ubuntu" {
most_recent = true #가장 최신 AMI 를 가지고 오라는 명령어
filter {
name = "name"
values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"] #20.04 서버에서 모든 ami를 가지고 온다
}
filter {
name = "virtualization-type"
values = ["hvm"] #type 은 hvm 으로 가지고 온다
}
owners = ["099720109477"] # Canonical에서 ami를 가지고 오겠다.
}
resource "aws_instance" "web" {
ami = data.aws_ami.ubuntu.id #
instance_type = "t3.micro"
tags = {
Name = "HelloWorld"
}
}
보면 data라는 block type 으로 우리가 만들 인프라를 정의할 수 있는 것을 알 수 있다