
Blocks: 다른 content를 위한 컨테이너
block 타입의 종류로는 provider block, resource block, data block, variable block output block 등이 있음.
예시
블럭타입 {
attribute: value1
arrribure: value2
}
key = value
예시
resource "awas_instance" "example" {
ami = "ami-0c1111111"
instance_type = "t2.micro"
count = 3
enabled = true
}
여기서 ami, instance_type, count, enabled가 바로 attribute 타입!
string : "hello"
number : 1
bloolean : true
List : ["item1", "item2"]
Maps : {key1 = "value", key2 = "value2", key3 = "value3" }
conditions는 결정을 만들거나 특정한 코드의 블럭을 실행시키는데에 매우 중요함. conditions 를 이용하는데 다양한 시나리오 가 있다.
다양한 환경에 따라서
특정한 기준에 따라서
예시로 이해해보자.
resource "aws_instance" "server" {
instance_type = var.environment == "development" ? "t2.micro" : "t2.small"
}
위에서 말한 condition 중 전자경우의 condition의 예이다. 위 코드는 development 에서는 t2.micro를 사용하고, 그외의 local,integration,qa,staging, production 등의 환경에서는 t2.small를 사용하게 하게 한다.
HCL의 Function은 코드의 명령, 계산, 변환을 수행한는데 매우 도움이 된다.
HCL은 데이터를 조작하거나 input값을 평가하는 등의 엄청게 많은 function들을 제공하고 있다.
함수들은 hashicorp 사이트에서 확인하고 공부할수 있다.
간단한 코드를 보면서 함수가 어떻게 쓰인다는건지 감만 잡아본다.
locals {
name = "luckyPirce"
fruits = ["chicken", "pizza", "ramen"]
message = "Hello ${upper(local.name)}! I know you like ${join(",", local.fruits)}"
}
위 코드를 실행하면 밑에 값이 나온다.
Hello lUCKYPRICE! I know you like chicken, pizza, ramen
HCL에서 resource dependency 는 거의 매번 쓰일 정도로 중요하다. resource dependency는 주로 두개의 다른 자원에 대한 관계를 형성할때, 그리고 어떻게 형성되는지에 대해 정의할때 쓰인다. dependecy는 2개로 type으로 분류된다.
implicit dependency(암시적)
implicit dependency는 terraform에 의해서 자동으로 실행된다.
explicit dependency(명시적)
따로 실행 시켜야 한다.
이번에도 예시를 통해 이해해보자.
aws instance와 보안그룹을 붙이는 코드
resource "aws_instance" "name" {
vpc_security_group_ids = aws_securiey_group.new_sg.id
}
resource "aws_securiey_group" "new_sg" {
#inbound rules
}
새 파일을 만들어서 코드를 다음과 같은 코드를 적는다.
challenge.tf
resource "resource" "file" {
provisioner "local-exec" {
command = "echo 'Message: ${upper("hello world")}' > challenge.txt"
}
}
이제 해당 terminal로 해당 경로에 들어가서 terraform init-> terraform plan-> terraform apply 를 차례로 실행해보자.



정상적으로 txt 파일이 생겼다.
