본문 바로가기

카테고리 없음

terraform HCL 기초

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 으로 우리가 만들 인프라를 정의할 수 있는 것을 알 수 있다