[Daily morning study] Terraform์„ ์‚ฌ์šฉํ•œ IaC (Infrastructure as Code)

#daily morning study

Image


Terraform์„ ์‚ฌ์šฉํ•œ IaC (Infrastructure as Code)

Terraform์€ ์ธํ”„๋ผ๋ฅผ ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Provider์™€ Resource๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ตํž™๋‹ˆ๋‹ค. ์ด ํ•™์Šต ๊ฐ€์ด๋“œ์—์„œ๋Š” Terraform์˜ ๊ธฐ๋ณธ ๊ฐœ๋…, ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด IaC์˜ ์›๋ฆฌ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

1. Terraform์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

Infrastructure as Code (IaC)

IaC๋Š” ์ธํ”„๋ผ๋ฅผ ์ฝ”๋“œ๋กœ ์ •์˜ํ•˜์—ฌ ํ•„์š”ํ•œ ํ™˜๊ฒฝ์„ ์ž๋™์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ˆ˜๋™ ์„ค์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ์ค„์ด๊ณ , ์„ค์ •์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ํฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

Terraform์˜ ์žฅ์ 

  • ํ”Œ๋žซํผ ๋…๋ฆฝ์„ฑ: AWS, GCP, Azure ๋“ฑ ๋‹ค์–‘ํ•œ ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์„ ์ง€์›
  • ๋ชจ๋“ˆํ™”: ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ˆ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  • ๋ฒ„์ „ ๊ด€๋ฆฌ: ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌ๋˜๋ฏ€๋กœ Git ๋“ฑ์œผ๋กœ ๋ฒ„์ „ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  • ๊ณ„ํš ๋ฐ ์‹คํ–‰: terraform plan๊ณผ terraform apply ๋ช…๋ น์–ด๋กœ ๋ณ€ํ™”๋ฅผ ๋ฏธ๋ฆฌ ์˜ˆ์ธกํ•˜๊ณ  ์ ์šฉ ๊ฐ€๋Šฅ

2. Terraform์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ

2.1 Provider

Provider๋Š” Terraform์ด ์†Œํ†ตํ•  ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค(๋˜๋Š” API)์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค. AWS, Azure, Google Cloud ๋“ฑ ์—ฌ๋Ÿฌ ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, AWS ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.0"
    }
  }
}

provider "aws" {
  region = "us-west-1"
}

2.2 Resource

Resource๋Š” ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•  ์‹ค์ œ ์ธํ”„๋ผ์˜ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1fe"
  instance_type = "t2.micro"

  tags = {
    Name = "example-instance"
  }
}

2.3 Variables

์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์„ ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด variables.tf ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

variable "instance_type" {
  description = "The type of instance to create"
  default     = "t2.micro"
}

๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1fe"
  instance_type = var.instance_type

  tags = {
    Name = "example-instance"
  }
}

3. Terraform ๊ธฐ๋ณธ Workflow

Terraform์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ”„๋ผ๋ฅผ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด ๋Œ€๊ฐœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

  1. ๊ตฌ์„ฑ ํŒŒ์ผ ์ž‘์„ฑ: ์›ํ•˜๋Š” ์ธํ”„๋ผ ๊ตฌ์„ฑ์„ .tf ํŒŒ์ผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ์ดˆ๊ธฐํ™”: terraform init ๋ช…๋ น์–ด๋กœ ํ•„์š”ํ•œ ํ”„๋กœ๋ฐ”์ด๋”์™€ ๋ชจ๋“ˆ์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
  3. ๊ณ„ํš ์ƒ์„ฑ: terraform plan ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ์‹ค์ œ๋กœ ์ ์šฉ๋  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  4. ์ ์šฉ: terraform apply ๋ช…๋ น์–ด๋กœ ์ธํ”„๋ผ๋ฅผ ์‹ค์ œ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  5. ์ƒํƒœ ํ™•์ธ: terraform state ๋ช…๋ น์–ด๋กœ ํ˜„์žฌ ์ธํ”„๋ผ์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

4. ์‹ค์Šต ์˜ˆ์ œ

์•„๋ž˜์˜ ์˜ˆ์ œ๋Š” AWS์—์„œ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฐ„๋‹จํ•œ Terraform ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

4.1 main.tf ํŒŒ์ผ ์ƒ์„ฑ

provider "aws" {
  region = "us-west-1"
}

resource "aws_instance" "example" {
  ami           = "ami-0c55b159cbfafe1fe"
  instance_type = "t2.micro"

  tags = {
    Name = "example-instance"
  }
}

4.2 Terraform ์ดˆ๊ธฐํ™” ๋ฐ ์‹คํ–‰

terraform init
terraform plan
terraform apply

5. ๊ธฐํƒ€ ์œ ์šฉํ•œ ๋ช…๋ น์–ด

  • terraform destroy: Terraform์œผ๋กœ ๋งŒ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
  • terraform output: ์ถœ๋ ฅ๊ฐ’์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  • terraform fmt: ์ฝ”๋“œ ํฌ๋งท์„ ์ผ๊ด€๋˜๊ฒŒ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

6. ๋งˆ๋ฌด๋ฆฌ

Terraform์„ ์‚ฌ์šฉํ•œ IaC๋Š” ์ธํ”„๋ผ๋ฅผ ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ํšจ์œจ์ ์ด๊ณ  ์œ ์šฉํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด Terraform์„ ํ™œ์šฉํ•ด ์›ํ•˜๋Š” ์ธํ”„๋ผ๋ฅผ ์†์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ด€๋ฆฌํ•ด๋ณด์„ธ์š”. ์ด ๊ฐ€์ด๋“œ๋Š” Terraform์„ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋” ์‹ฌํ™”๋œ ๋‚ด์šฉ์€ ๊ณต์‹ ๋ฌธ์„œ๋‚˜ ์ถ”๊ฐ€ ์ž๋ฃŒ๋ฅผ ํ†ตํ•ด ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.