100===Dev Ops/Terraform

초보자를 위한 Terraform 완벽 가이드 🌱

블로글러 2024. 10. 30. 22:47

처음 Terraform을 시작하시는 분들을 위해 하나하나 자세히 설명해드릴게요.

1. Terraform이란? 🤔

클라우드 인프라를 코드로 관리하는 도구입니다. 쉽게 말하면:

  • AWS 콘솔에서 클릭클릭하며 만들던 것을
  • 코드로 작성해서 자동으로 만들 수 있어요
  • 마치 레시피처럼 인프라 구성을 저장하고 재사용할 수 있죠!

2. 설치하기 📦

Windows의 경우

  1. Terraform 공식 사이트 방문
  2. Windows 64-bit 버전 다운로드
  3. 압축 풀고 실행 파일을 C:\terraform 폴더에 넣기
  4. 환경 변수 PATH에 C:\terraform 추가

Mac의 경우

brew install terraform

3. 첫 번째 프로젝트 만들기 🎯

프로젝트 폴더 생성

mkdir my-first-terraform
cd my-first-terraform

AWS 자격증명 설정

먼저 AWS 계정의 액세스 키와 시크릿 키를 준비해주세요.

# Windows PowerShell
$env:AWS_ACCESS_KEY_ID="your_access_key"
$env:AWS_SECRET_ACCESS_KEY="your_secret_key"

# Mac/Linux
export AWS_ACCESS_KEY_ID="your_access_key"
export AWS_SECRET_ACCESS_KEY="your_secret_key"

첫 번째 코드 작성하기

main.tf 파일을 만들어봅시다:

# AWS를 사용하겠다고 선언
provider "aws" {
  region = "ap-northeast-2"  # 서울 리전
}

# 간단한 EC2 인스턴스 생성
resource "aws_instance" "my_first_server" {
  ami           = "ami-086cae3329a3f7d75"  # Amazon Linux 2 AMI
  instance_type = "t2.micro"  # 프리티어 사용 가능한 작은 사이즈

  tags = {
    Name = "내 첫 번째 서버"
  }
}

4. 기본 명령어 배우기 🛠️

초기화하기

terraform init
  • Terraform 프로젝트를 시작할 때 가장 먼저 실행
  • 필요한 플러그인을 다운로드 받아요

계획 보기

terraform plan
  • 실제로 적용하기 전에 미리보기
  • 무엇이 생성/변경/삭제될지 보여줌

적용하기

terraform apply
  • 실제로 인프라를 생성/변경
  • 진행하기 전에 한 번 더 확인해줘요

삭제하기

terraform destroy
  • 만든 인프라를 모두 삭제
  • 비용 절약을 위해 연습이 끝나면 꼭 실행!

5. 변수 사용하기 📝

variables.tf 파일 생성

variable "instance_name" {
  description = "EC2 인스턴스의 이름"
  type        = string
  default     = "내 첫 번째 서버"
}

variable "instance_type" {
  description = "인스턴스 타입"
  type        = string
  default     = "t2.micro"
}

main.tf 수정

resource "aws_instance" "my_first_server" {
  ami           = "ami-086cae3329a3f7d75"
  instance_type = var.instance_type  # 변수 사용

  tags = {
    Name = var.instance_name  # 변수 사용
  }
}

6. 보안 그룹 추가하기 🔒

# SSH 접속을 위한 보안 그룹
resource "aws_security_group" "allow_ssh" {
  name        = "allow_ssh"
  description = "SSH 접속 허용"

  # SSH 포트 열기
  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["내_IP주소/32"]  # 본인 IP 주소만 허용
  }

  # 외부 인터넷 접속 허용
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

7. 실전 예제: 웹 서버 만들기 🌐

# 웹 서버용 보안 그룹
resource "aws_security_group" "web" {
  name = "web_server_sg"

  # HTTP 허용
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # 외부 연결 허용
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

# 웹 서버 생성
resource "aws_instance" "web" {
  ami           = "ami-086cae3329a3f7d75"
  instance_type = "t2.micro"

  user_data = <<-EOF
              #!/bin/bash
              yum update -y
              yum install -y httpd
              systemctl start httpd
              systemctl enable httpd
              echo "<h1>안녕하세요! Terraform으로 만든 웹 서버입니다!</h1>" > /var/www/html/index.html
              EOF

  vpc_security_group_ids = [aws_security_group.web.id]

  tags = {
    Name = "웹 서버"
  }
}

8. 주의할 점 ⚠️

  1. 비용 관리
    • 사용하지 않는 리소스는 꼭 terraform destroy로 삭제
    • 프리티어 범위 내의 리소스만 사용하기
  2. 보안
    • 보안 그룹 설정시 필요한 포트만 열기
    • AWS 액세스 키는 절대 GitHub 등에 올리지 않기
  3. 백업
    • .terraform 폴더는 git에 포함하지 않기
    • terraform.tfstate 파일은 잘 보관하기

9. 다음 단계 🎯

  1. VPC 구성 배우기
  2. 여러 리소스 연결하기
  3. 모듈 사용법 익히기
  4. 팀 협업 방법 배우기

마치며 🎁

생각보다 어렵지 않죠? 처음에는 하나씩 천천히 시작하세요. 에러가 나도 당황하지 마시고, 에러 메시지를 잘 읽어보면 해결 방법을 찾을 수 있어요!


궁금한 점이 있다면 언제든 댓글로 물어보세요! 😊

 

728x90

'100===Dev Ops > Terraform' 카테고리의 다른 글

Terraform Introduced  (0) 2024.06.12