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

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

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

목차
  1. Terraform이란?
  2. 설치
  3. 기본 구조
  4. AWS EC2 예시
  5. 워크플로우
  6. 원격 상태 관리 (팀 협업)

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 도구가 초안 작성에 사용될 수 있습니다. 명령어의 실행 여부와 검증 환경은 각 가이드에 기재된 근거를 확인하세요. 적용 전 사용 중인 버전의 공식 문서를 확인하고, 오류는 이메일로 알려주세요. 이메일로 제보

주제 관련 공식 문서(자동 연결 · 문장별 근거 아님)Terraform 공식 문서 ↗AWS 공식 문서 ↗

질문 & 답변 (Q&A)

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