DevSecOps/ํด๋ผ์ฐ๋(Cloud)
Terraform ๊ตฌ์ฑ ์์
์ํ๋ฆฌํฐ์งํธ
2025. 5. 31. 04:37

Terraform ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํ ๋ ์ฃผ๋ก ์ฌ์ฉํ๋ ๋ค ๊ฐ์ง ํ์ผ(main.tf, variables,tf, terraform.tfvars, terraform.tfstate)์ ์ญํ ๊ณผ ์์๋ฅผ ์ ๋ฆฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. main.tf
- ์ญํ : ์ค์ ๋ฆฌ์์ค (Resource)์ ํ๋ก๋ฐ์ด๋(Provider)๋ฅผ ์ ์ํ๋ "๋ฉ์ธ" ๊ตฌ์ฑ ํ์ผ์ ๋๋ค.
- ์์ : AWS EC2 ์ธ์คํด์ค๋ฅผ ํ๋ ์์ฑํ๋ ๊ฐ๋จํ ์์
// main.tf
// 1) ์ฌ์ฉํ ํ๋ก๋ฐ์ด๋ ์ค์
provider "aws" {
region = var.aws_region
}
// 2) EC2 ์ธ์คํด์ค ๋ฆฌ์์ค ์ ์ธ
resource "aws_instance" "example" {
ami = var.ami_id
instance_type = var.instance_type
tags = {
Name = "example-instance"
}
}
2. variables.tf
- ์ญํ : ์ ๋ ฅ ๋ณ์(variable)๋ฅผ ์ ์ธํฉ๋๋ค. ๋ณ์์ ํ์ , ๊ธฐ๋ณธ๊ฐ, ์ค๋ช ๋ฑ์ ์ ์ํ์ฌ ์ฌ์ฌ์ฉ์ฑ๊ณผ ๊ฐ๋ ์ฑ์ ๋์ ๋๋ค.
- ์์ :
// variables.tf
// AWS ๋ฆฌ์
variable "aws_region" {
description = "AWS region to deploy resources in"
type = string
default = "ap-northeast-2"
}
// EC2์ฉ AMI ID
variable "ami_id" {
description = "The AMI ID for the EC2 instance"
type = string
default = "ami-0a12345b6789cdef0"
}
// EC2 ์ธ์คํด์ค ํ์
variable "instance_type" {
description = "EC2 instance type"
type = string
default = "t3.micro"
}
3. terraform.tfvars
- ์ญํ : variables.tf์ ์ ์ธ๋ ๋ณ์๋ค์ ์ค์ ๊ฐ์ ํ ๋นํ๋ ํ์ผ์ ๋๋ค. (.tfvars ํ์ฅ์)
- ํน์ง : ๊ธฐ๋ณธ์ ์ผ๋ก terraform apply ์ ์๋์ผ๋ก ๋ก๋๋๋ฏ๋ก, ๋ฏผ๊ฐ ์ ๋ณด(API ํค ๋ฑ)๋ ์ด๊ณณ์ ๋ฃ์ด ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ์์ :
# terraform.tfvars
aws_region = "ap-northeast-2"
ami_id = "ami-0f12345b6789cdea1"
instance_type = "t3.small"
4. terraform.tfstate
- ์ญํ : ์ค์ ์ธํ๋ผ ์ํ๋ฅผ ๊ธฐ๋ก(state)ํ๋ ํ์ผ์
๋๋ค.(terraform ๊ฐ ์ธํ๋ผ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์์ํ๋ฉด ์๋์ผ๋ก ์์ฑโข๊ฐฑ์ ๋ฉ๋๋ค.)
- ๋ก์ปฌ ํ์ผ ๋๋ ์๊ฒฉ ๋ฐฑ์๋(S3, Terraform Cloud ๋ฑ)์ ์ ์ฅํ ์ ์์ต๋๋ค.
- ํ์ฌ ํด๋ฌ์คํฐ/ํ๊ฒฝ์ ์ด๋ค ๋ฆฌ์์ค๊ฐ ์กด์ฌํ๋์ง, ์์ฑ๊ฐ์ด ๋ฌด์์ธ์ง ๋ฑ์ JSON ํ์์ผ๋ก ๋ณด๊ดํฉ๋๋ค.
- ์ฃผ์์ :
- ๋ฏผ๊ฐ ์ ๋ณด๊ฐ ํฌํจ๋ ์ ์์ผ๋ฏ๋ก, ๋ฒ์ ๊ด๋ฆฌ(Git)ํ ๋๋ ์ ๋ ์ปค๋ฐํ์ง ์๊ณ .gitignore์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
- ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๋์์ ์ ๋ฐ์ดํธํ์ง ์๋๋ก ์๊ฒฉ ์ํ(Remote state) ๊ด๋ฆฌ ๊ถ์ฅ
// terraform.tfstate (์ผ๋ถ ๋ฐ์ท)
{
"version": 4,
"terraform_version": "1.5.0",
"resources": [
{
"type": "aws_instance",
"name": "example",
"instances": [
{
"attributes": {
"ami": "ami-0f12345b6789cdea1",
"instance_type": "t3.small",
"tags": {
"Name": "example-instance"
},
// ... ๊ธฐํ ์์ฑ ...
}
}
]
}
]
}
ํด๋น ํ์ผ๋ค์ ์ญํ ์ ๋ง๊ฒ ๋๋ ๊ด๋ฆฌํ๋ฉด, ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ๊ณผ ํ์ ์ ๊ฐ๋ ์ฑ์ ํฌ๊ฒ ๋์ผ ์ ์์ต๋๋ค. ํ์์ ๋ฐ๋ผ ๋ ์์ ๋ชจ๋ ๋จ์๋ก ์ชผ๊ฐ ์ฐ๊ธฐ๋ ํฉ๋๋ค.