테라폼을 이용한 infra 구축 #1_테라폼 설치 및 기본 사용법
Paul Granduer Lee /클라우드 서비스

테라폼을 이용한 infra 구축 #1_테라폼 설치 및 기본 사용법

테라폼(terraform)이란? 쉽게 설명하자면 Infra 구성값을 미리 코드화 시켜놓고 해당 코드를 수행하게 함으로 

infra 구성이 되게끔 하는 infra as a code, 즉 코드로 인프라를 구성하는 시스템이다.

infra 관리할 리소스가 적다면 클라우드 시스템의 UI를 통해 하나씩 만들어가면 되겠지만, 차후 관리할 infra의 규모가 

커지고 기존에 관리하던 리소스들도 많아지면 해당 infra 관리 및 구축을 일일이 하기란 어려울 것이다.

 

하여, aws자체 적으로 제공하는 cloudformaion , chef, puppet, ansible, terraform 과 같은 infra를 코드화 시켜서 관리하자라는 목적을 둔 도구들이 생겨나기 시작했다. 각 도구들은 각각 장단점 및 특성이 있다고 한다.

일단 우리는 infra 구성 자동화를 terraform을 통해 구성하는 것을 연구하기로 했다.

테라폼은 여러 클라우드 플랫폼에 적용이 되고, AWS 기준으로 작성하도록 하겠다.

 

설치는 해당 사이트에서 최신 버전으로 각 OS에 맞게 설치를 하면 된다.

https://www.terraform.io/downloads.html

 

Download Terraform - Terraform by HashiCorp

Download Terraform

www.terraform.io

필자의 경우는 윈도우 버전으로 설치를 했다.(terraform_0.12.16)

 

테라폼은 다른 블로그에도 잘 정리되어 있지만 쉽게 말하자면

1. json과 비슷한 테라폼 코드로 테라폼을 구동할 수 있는 코드를 생성 (.tf 파일)

- aws-provider.tf 파일 생성(aws access key 정보 작성)

provider "aws" {
  access_key = ""
  secret_key = ""
  region     = "ap-northeast-2"
}

 

- 리소스 관련 .tf 파일 작성 (rds를 예제로 함)

resource "aws_db_instance" "test" {
    identifier                = "test"
    allocated_storage         = 20
    storage_type              = "gp2"
    engine                    = "mariadb"
    engine_version            = "10.3.13"
    instance_class            = "db.t3.micro"
    name                      = ""
    username                  = "test"
    password                  = "xxxxxxxx"
    port                      = 3306
    publicly_accessible       = true
    availability_zone         = "ap-northeast-2c"
    security_group_names      = []
    vpc_security_group_ids    = ["sg-03153aacd2c106c15"]
    db_subnet_group_name      = "default"
    parameter_group_name      = "default:mariadb-10-3"
    multi_az                  = false
    backup_retention_period   = 7
    backup_window             = ""
    maintenance_window        = ""
    final_snapshot_identifier = "test"
	auto_minor_version_upgrade= "false"
}

 

2. terraform 명령어로 구동

- terraform init(최초 초기화 명령어 1회 수행)

더보기

init 수행시 .terraform 폴더가 자동으로 생성됨

 

- terraform plan ( apply 전 적용 값 확인 )

더보기

aws infra가 구성되지 않은 상태라면 add 에 count가 올라가고

만약 infra가 구성되어 있는데 특정 값이 바뀌었다면 change에 count가 올라갈 것이다.

 

- terraform apply (infra 생성)

더보기

yes라고 입력해주면 creating이 수행된다. 약 5분 이상 소요되는듯

 

 

- terraform import (운영중인 리소스의 상태를 code로 가져옴. .tfstate 파일 자동으로 생성)

더보기

초기에 code를 생짜로 구성하기란 어려울 수 있다. 하여 운영중인 리소스를 참조해서 code화 시킬 수 있다.

단, terraform(0.12.16)에서는 import 명령어를 사용하기 전에 깡통 tf 파일이 존재해야 한다.

aws-ec2.tf 생성 

resource "aws_instance" "test" {
}

 

terraform import aws_instance.<resource name> <instance ID>

 

위와 같이 제대로 import가 되었다면 .tfstate 파일이 업데이트 된다.(만약 실행 폴더에 .tfstate 파일이 미존재시 새로 생성된다)

.tfstate 에 아래 와 같이 정보가 들어있음을 확인

 

단, import는 사용에 매우 유의해야 한다. 

테라폼은 apply시에 .tf 파일에는 없고 .tfstate 에만 있는 인프라 정보를 삭제한다.

만약 운영환경에서 모든 ec2를 import한 후  .tf파일을 생성하지 않은채  apply 할 경우 모든 운영환경이 destroy 될 수 있다는 말이다. (이런 문제를 해결하고자 뒤에서 terraforming(테라포밍)에 대해 설명하도록 하겠다.

 

- terraform destroy (infra 삭제)

더보기

.tfstate에 작성되어 있는 infra를 모두 삭제한다.

사용에 매우 유의를 해야할듯하다.

 

테라폼은 기본적으로 폴더내의 .tf 파일을 참조한다. 즉, 폴더가 같은 곳에 있는 .tf 파일은 명령어 하나에 다 같이 동작한다는 것이다.

provider 정보가 동일하다는 조건

 

테라폼에 대한 기본 명령어는 공식페이지에 매우 자세히 설명되어 있다.

https://www.terraform.io/docs/cli-index.html

 

다음은 테라폼 구성을 좀더 편하게 할 수 있도록 만들어진 테라포밍에 대해 설명하도록 하겠다.