
๐ฏ ๊ตฌ์ฑ ๊ด๋ฆฌ์ ํต์ฌ ์๋ฆฌ์ Terraform์ ํ์ฉํ IaC ์ค์ต์ ์ ๋ฆฌํฉ๋๋ค.
CI/CD ํ์ดํ๋ผ์ธ์ ๊ตฌ์ฑํ๋ฉด์ ๋น๋, ํ ์คํธ, ๋ฐฐํฌ ์๋ํ๋ฅผ ์ฐจ๊ทผ์ฐจ๊ทผ ์์ฑํด ์๋ค๋ฉด, ์ด์ ๋จ์ ๊ณผ์ ๋ ์์คํ ํ๊ฒฝ ์์ฒด๋ฅผ ์ด๋ป๊ฒ ์ผ๊ด์ฑ ์๊ฒ ์ ์งํ ๊ฒ์ธ๊ฐ์ ๋๋ค.
๊ตฌ์ฑ ๊ด๋ฆฌ(๋๋ ํ์ ๊ด๋ฆฌ)๋ ์ํํธ์จ์ด ์์คํ ์ ๊ตฌ์ฑํ๋ ์์๋ค(ํ๊ฒฝ ์ค์ , ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ , ์์กด์ฑ, ์์คํ ๋ฆฌ์์ค ๋ฑ)์ ์ผ๊ด์ฑ ์๊ฒ ์ ์ํ๊ณ ๊ด๋ฆฌํ๋ ์ ์ฐจ๋ฅผ ๋งํฉ๋๋ค.
์ํํธ์จ์ด๋ ์ฝ๋๋ง์ผ๋ก๋ ์์ ํ์ง ์์ต๋๋ค. ์ด๋ค ์ด์์ฒด์ ์์, ์ด๋ค ๋ฒ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๊ณ , ์ด๋ค ์ค์ ์ผ๋ก ์คํ๋๋๋์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
๊ทธ๋์ ๊ตฌ์ฑ(configuration)์ ํจ๊ป ๊ด๋ฆฌํ๊ณ ์ผ๊ด์ฑ ์๊ฒ ์ ์งํ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค.
๐ ๊ตฌ์ฑ ๊ด๋ฆฌ์ ๋ฒ์ ๊ด๋ฆฌ์ ์ฐจ์ด์
ํญ๋ชฉ ๊ตฌ์ฑ ๊ด๋ฆฌ (Configuration Management) ๋ฒ์ ๊ด๋ฆฌ (Version Control) ๊ด๋ฆฌ ๋์ ์์คํ ์ ์ค์ , ํ๊ฒฝ, ์์กด์ฑ, ์ธํ๋ผ ๊ตฌ์ฑ ๋ฑ ์์ค ์ฝ๋, ๋ฌธ์, ์ค์ ํ์ผ ๋ฑ ํ ์คํธ ์ค์ฌ์ ๋ณ๊ฒฝ ๋ด์ฉ ๊ด๋ฆฌ ๋ฒ์ ์ํํธ์จ์ด๊ฐ ์คํ๋๋ ์ ์ฒด ํ๊ฒฝ ํฌํจ ๊ฐ๋ฐ ์ค์ธ ์ฝ๋ ๋ฐ ์ด๋ ฅ ์ค์ฌ ๋ชฉ์ ์ผ๊ด๋ ์คํ ํ๊ฒฝ ์ ์ง, ๋ฐฐํฌ ์ ํ๊ฒฝ ์ฌํ ์ฝ๋ ๋ณ๊ฒฝ ์ด๋ ฅ ์ถ์ , ํ์ ์ ์ถฉ๋ ๋ฐฉ์ง ๋ํ ๋๊ตฌ Ansible, Puppet, Chef, Terraform, Helm ๋ฑ Git, SVN, Mercurial ๋ฑ ์๋ํ ์ญํ ๋ฐฐํฌ ์๋ํ, ์์คํ ๊ตฌ์ฑ ์๋ํ ์ฝ๋ ๋ฆฌ๋ทฐ, ๋ธ๋์น ์ ๋ต, ํ์ ๊ธฐ๋ฐ ๊ฐ๋ฐ ํ๋ฆ
์ธํ๋ผ(์ํํธ์จ์ด๊ฐ ์๋๋ ๋ชฉ์ ์ ํ์ฉํ๊ธฐ ์ํ์ฌ ์ด์ฉํ๋ ํ๊ฒฝ ๊ตฌ์ฑ)๋ฅผ ์ฝ๋์ฒ๋ผ ์ ์ํ๊ณ , ๋ฒ์ ๊ด๋ฆฌํ๊ณ , ์คํ ๊ฐ๋ฅํ ํํ๋ก ๋ง๋๋ ๊ฒ์
๋๋ค.
์ถ์ฒ: ํ
๋ผํผ
์ผ๊ด์ฑ : ๋งค๋ฒ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ธํ๋ผ๋ฅผ ๊ตฌ์ฑํ ์ ์์
์ฌํ์ฑ : ๋์ผํ ํ๊ฒฝ์ ์ธ์ ๋ ์ง ๋ฐ๋ณตํด์ ๋ง๋ค ์ ์์
๋ฒ์ ๊ด๋ฆฌ ๊ฐ๋ฅ : Git ๋ฑ์ผ๋ก ๋ณ๊ฒฝ ์ด๋ ฅ์ ์ถ์ ํ ์ ์์
ํ์ ์ ์ฉ์ด : ํ์ ๊ฐ์ ํ๊ฒฝ ์ ์ ๊ณต์ ๋ฐ ๋ฆฌ๋ทฐ ๊ฐ๋ฅ
CI/CD์ ์ ํฉ : ์ฝ๋๋ก ์ธํ๋ผ๋ฅผ ๋ฐฐํฌํ๋ ์๋ํ ํ์ดํ๋ผ์ธ๊ณผ ํตํฉ ์ฌ
HashiCorp์์ ๋ง๋ Terraform์ ๋ค์ํ ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ๋ฆฌ์์ค๋ฅผ ํตํฉ์ ์ผ๋ก ์ ์ํ๊ณ ๊ด๋ฆฌํ ์ ์๋ IaC ๋๊ตฌ์ ๋๋ค.
๐ ํ ๋ผํผ ๋ค์ด๋ก๋ ๋งํฌ
๐ฆ ์๋์ฐ ์ฌ์ฉ์ ํ ๋ผํผ ์ค์น 101
1๏ธโฃ ๋ค์ด๋ก๋ ๋ฐ์ ํ ๋ผํผ ํ์ผ์ ์์ถ์ ํผ ํ,
C://terraformํด๋๋ฅผ ๋ง๋ค๊ณterraform.exe๋ฅผ ์ฎ๊น๋๋ค.
2๏ธโฃ ์๋์ฐ ๊ฒ์์ฐฝ์
์์คํ ํ๊ฒฝ ๋ณ์ ํธ์ง์ ๊ฒ์ํ๊ณ ๋์จ ์ฐฝ์์ํ๊ฒฝ ๋ณ์๋ฅผ ํด๋ฆญํฉ๋๋ค.
3๏ธโฃ
์์คํ ๋ณ์์์Path๋ฅผ ๋๋ฅธ ํํธ์ง์ ๋๋ฌ์ค๋๋ค.
4๏ธโฃ ์๋ก ๋ง๋ค๊ธฐ๋ฅผ ๋๋ฅด๊ณ
C:\terraform์ ์ ๋ ฅํ ๋ค ํ์ธ์ ๋๋ฌ์ค๋๋ค.
5๏ธโฃ
terraform -version์ ์ถ๋ ฅํด์ ๋ฒ์ ์ด ์ ๋์ค๋ฉด ์ค์น๊ฐ ์ ๋ ๊ฒ์ ๋๋ค!
Terraform์ ์ด์ฉํด Docker ์ปจํ ์ด๋๋ฅผ ์ฝ๋๋ก ์ ์ธํ๊ณ ์๋ํํ๋ ์ค์ต์ ์งํํฉ๋๋ค.
main.tf : Terraform์ ์ด์ฉํด nginx ์ปจํ
์ด๋๋ฅผ ์คํํ๋ ๊ตฌ์ฑ์ ์์ฑํฉ๋๋ค. terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.0.1"
}
}
}
provider "docker" {}
resource "docker_image" "nginx" {
name = "nginx"
keep_locally = false
}
resource "docker_container" "nginx" {
image = docker_image.nginx.image_id
name = "sample"
ports {
internal = 80
external = 8000
}
}
terraform init : ํ
๋ผํผ ํ๋ก์ ํธ๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
terraform validate : ๋ฌธ๋ฒ ์ค๋ฅ๊ฐ ์๋์ง ํ์ธํฉ๋๋ค.
terraform fmt : ์ฝ๋ ํฌ๋งท์ ์๋ ์ ๋ฆฌํฉ๋๋ค.
terraform apply : ์ค์ ์ธํ๋ผ๋ฅผ ์ ์ฉํฉ๋๋ค.
yes๋ฅผ ์
๋ ฅํด์ผ ์คํ๋ฉ๋๋ค.์คํ์ด ์๋ฃ๋๋ฉด, docker ps ๋ฅผ ํตํด ์ปจํ
์ด๋๊ฐ ์์ฑ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.

๐ก ์ด ๊ณผ์ ์ดํ Terraform์ ์คํ ๊ฒฐ๊ณผ๋ฅผ
terraform.tfstate์ ๊ธฐ๋กํฉ๋๋ค.ํ์ผ์ ์์ ํ ๊ณณ์ ๋ณด๊ดํด์ผํ๋ฉฐ ์ญ์ ๋๋ฉด ๋ฆฌ์์ค๋ฅผ ์ถ์ ํ์ง ๋ชปํ๊ฒ ๋ฉ๋๋ค.
์ฝ๋๋ฅผ ๋ ์ ์ฐํ๊ฒ ๋ง๋ค๊ธฐ ์ํด, ์ปจํ ์ด๋ ์ด๋ฆ์ ๊ฐ ๋์ ๋ณ์๋ก ์ค์ ํฉ๋๋ค.
variable.tf
variable "container_name" {
description = "Value of the name for the Docker container"
type = string
default = "ExampleNginxContainer"
}
terraform.tf
"sample"์์ var.container_name๋ก ๋ณ๊ฒฝํฉ๋๋ค. terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.0.1"
}
}
}
provider "docker" {}
resource "docker_image" "nginx" {
name = "nginx"
keep_locally = false
}
resource "docker_container" "nginx" {
image = docker_image.nginx.image_id
name = var.container_name
ports {
internal = 80
external = 8000
}
}
terraform apply -auto-approve : ์ค๊ฐ ํ์ธ ์์ด ์๋์ผ๋ก ๋ฆฌ์์ค๋ฅผ ์์ฑํฉ๋๋ค.
Terraform์์๋ ๋ฆฌ์์ค๋ฅผ ์์ฑํ ๋ค ํ์ํ ๊ฐ์ ์๋์ผ๋ก ์ถ๋ ฅํ ์ ์๋๋ก ์ค์ ํ ์ ์์ต๋๋ค.
output.tfoutput "container_id" {
description = "ID of the Docker container"
value = docker_container.nginx.id
}
output "image_id" {
description = "ID of the Docker image"
value = docker_image.nginx.id
}terraform apply --auto-approve ๋ฅผ ํตํด ์ ์ฉ์ด ์๋ฃ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
Outputs:
container_id = "6c9a3e..."
image_id = "sha256:..."
terraform destroy --auto-approve : ์์ฑ๋ ์ปจํ
์ด๋์ ์ด๋ฏธ์ง๋ฅผ ๋ชจ๋ ์ ๊ฑฐํฉ๋๋ค. ์ธํ๋ผ๊น์ง ์ฝ๋๋ก ์๋ํํ๋ ํจ์ฌ ํธํ๊ณ ์ข์ ๊ฒ ๊ฐ๋ค.