/엔지니어/클라우드/Terraform 기초 — 인프라를 코드로 관리하기
클라우드중급UbuntuDebianCentOSmacOSTerraformIaCAWS

Terraform 기초 — 인프라를 코드로 관리하기

Terraform 설치부터 AWS EC2 인스턴스 프로비저닝, 상태 관리, 실무 워크플로우까지 초보자 관점으로 정리합니다.

Terraform이란?

인프라(서버, 네트워크, DB 등)를 코드(.tf 파일)로 선언하고, terraform apply 한 번으로 실제 클라우드 리소스를 생성·수정·삭제합니다. AWS, GCP, Azure, Kubernetes 등 모두 지원합니다.


설치

Bash
# Ubuntu/Debian
wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor \
  | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
  https://apt.releases.hashicorp.com $(lsb_release -cs) main" \
  | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform

terraform version

기본 구조

CODE
my-infra/
├── main.tf          # 리소스 정의
├── variables.tf     # 입력 변수
├── outputs.tf       # 출력 값
├── providers.tf     # 프로바이더 설정
└── terraform.tfvars # 변수 값 (git 제외)

AWS EC2 예시

providers.tf

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

provider "aws" {
  region = var.region
}

main.tf

HCL
data "aws_ami" "ubuntu" {
  most_recent = true
  owners      = ["099720109477"]

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-*-22.04-amd64-server-*"]
  }
}

resource "aws_instance" "web" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = var.instance_type

  tags = {
    Name        = "web-server"
    Environment = "production"
  }
}

outputs.tf

HCL
output "instance_public_ip" {
  value = aws_instance.web.public_ip
}

워크플로우

Bash
# 초기화 (프로바이더 다운로드)
terraform init

# 실행 계획 확인 (실제로 뭐가 생성/변경/삭제되는지)
terraform plan

# 적용
terraform apply

# 특정 리소스만 적용
terraform apply -target=aws_instance.web

# 모두 삭제
terraform destroy

# 현재 상태 확인
terraform show
terraform state list

원격 상태 관리 (팀 협업)

HCL
# backend.tf
terraform {
  backend "s3" {
    bucket         = "my-terraform-state"
    key            = "prod/terraform.tfstate"
    region         = "ap-northeast-2"
    encrypt        = true
    dynamodb_table = "terraform-lock"
  }
}

상태 파일(terraform.tfstate)은 반드시 원격 저장소(S3 + DynamoDB 잠금)로 관리하세요. git에 커밋하면 절대 안 됩니다.

#Terraform#IaC#AWS#인프라#DevOps
편집 안내 · Editorial Note

이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.