[테라폼] 테라폼 기초

mkdir terraform && cd $_
vim main.tf

 mkdir terraform && cd $_ 명령으로 terraform 디렉토리를 생성하고 이동해준다.

그리고 테라폼은 tf 확장자 파일을 읽을 수 있기 때문에 main.tf 파일을 생성해준다.

변수를 생성한 뒤 변수 키워드를 이용하면 된다. 그리고 변수안에서 속성을 정의해줘야한다.

 

안에 내용을 이렇게 채우고 vim 편집기를 저장하고 나가준다. 

그리고 우리는 terraform plan 혹은 terraform apply하지 않고, terraform console만으로 테스트 할 수 있게 된다.

 

terraform version
brew upgrade terraform

잠깐! 하기전에 테라폼 버전을 확인해준다. 

나는 최신버전이 아니라고 해서 m1 pro 맥 기준 brew upgrade를 사용해서 최신 버전을 만들어줬다.

 

다시 terraform version 을 하면 1.2.8 최신버전으로 잘 설치된 것을 볼 수 있다.


terraform console

terraform console 명령을 하면 이제 변수를 사용할 수 있다. 하지만 나는 내가 만든 변수 형식에 문제가 있다고 뜬다. 

요약하면 테라폼 0.11 을포함하는 이전 버전에서는 따옴표가 필요했는데, 지금은 필요 없다고 한다. 그래서 "string"에서 따옴표를 제거해야한다.

 

그래서 이렇게 이쁘게 수정을 해줬다.

 

그리고 다시 terraform console 명령을 하면 이제 콘솔로 변수를 사용할 수 있다.

 

예를들어 var.myvar를 입력하면 default인 hello terraform이 나온다.

 

"${var.myvar}" 이런 형식으로도 가능하다. 편한거 쓰면 될 것 같다.

 

exit를 입력하면 나올 수 있다.

 

더 많은 변수를 입력하려고 한다. vim 편집기를 써도 되지만, 비주얼 스튜디오가 더 간편해서 code . 입력후, 지금부터는  동일 디렉토리를 vs code에서 열어서 작업한다.

 

variable "myvar" {
 type = string
 default = "hello terraform"
}

variable "mymap" {
 type = map(string)
 default = {
    mykey = "my value"
 }
}

이런 내용의 파일을 가지게 되었다.

mykey = "my value"에서는 my value가 키워드가 아니라 문자열이기 때문에 따옴표로 감싸줘야한다.

그리고 다시 terraform console을 입력한다.

 

var.mymap["mykey"]

mykey가 mymap 안에 있는 문자열이라서 따옴표를 잊으면 안된다.

 

"${var.mymap["mykey"]}"

 

이런 형태로 사용하는 것도 가능하다.

 

variable "myvar" {
 type = string
 default = "hello terraform"
}

variable "mymap" {
 type = map(string)
 default = {
    mykey = "my value"
 }
}

variable "mylist" {
 type = list
 default = [1,2,3]
}

 default = [1,2,3] 처럼 목록은 대괄호로 표시해줘야 한다.

 

파일을 저장하고, 바로 var.mylist로 확인을 하려고하니 변수이름 mylist가 선언되지 않았다고 나온다.

 

당황하지 않고 터미널에 있는 콘솔창에서 exit를 입력해 콘솔을 나온 뒤 terrform console로 다시 들어가서 var.mylist를 입력하면 잘 되는것을 볼 수 있다. 

파일을 저장한다고 바로 테라폼 콘솔에 반영되는게 아니라 따로 다시 들어가줘야 함을 알 수 있다.

 

이렇게 배열에서 값을 빼는것도 가능하다.


resource.tf

리소스를 만들때는 공급자도 지정해줘야 한다. 

예를 들어 aws 를 사용할때는

provider "aws"{
    
}

그리고 공급자에 대한 속성도 넣어줘야한다.

resource "aws_instance" "mock" {
 ami    = var.AMIS [var.AWS_REGION]
 instance_type = "t2.micro"
}

provide "aws_instance" "mock" : aws_instance에 대한 이름이 mock인 것이다.

 

 ami    = var.AMIS [var.AWS_REGION] : 이건 추가한 인수인 속성이고, 이 인수들은 리소스인 ami에 전달된거다. 이 인수는 이미 정의된 것이라서, 따옴표가 필요가 없다.

 

 instance_type = "t2.micro" :  문자열이라서 따옴표를 하는것을 잊으면 안된다.이 인수는 'instance_type'으로 전달된다.

 

 ami    = var.AMIS [var.AWS_REGION] : ami가 사용자가 속한 지역에 따라 이미지 아이디들이 다르다.

provider "aws"{

}

variable "AWS_REGION" {
 type = string
 default = "eu-west1"
}


resource "aws_instance" "mock" {
 ami    = var.AMIS [var.AWS_REGION]
 instance_type = "t2.micro"
}

그래서 variable로  {AWS_REGION}과 기본값을 입력해서 정의해줄 수 있다. 

그리고 지금 바로 terraform console을 하면 오류가 생긴다. 플러그인을 초기화 해줘야하기 때문이다. provider 를 이용하고 있기 때문에 공급자를 다운로드 해 줘야 한다.

terraform init

terraform init을 하면 메세지가 주르륵 표시 되고 중간에 Terraform has been successfully initialized! 가 표시된다.

그리고 terraform console을 하면 다시 입력 가능한 상태가 된다.

 

그리고 다시 terraform console 명령을 한뒤 var.AWS_REGION을 입력하면, 디폴드값인 eu-west1이 나오게된다.

 

프로바이더를 바꿀 때 마다, 아니면 모듈이나 플러그인을 사용할 때 마다 terraform init을 해줘야한다.

 

JUNE .

20'S LIFE IN SYDNEY and BUSAN

    이미지 맵

    DevOps Study/Terraform 다른 글

    이전 글

    다음 글