처음 Terraform을 시작하시는 분들을 위해 하나하나 자세히 설명해드릴게요.
1. Terraform이란? 🤔
클라우드 인프라를 코드로 관리하는 도구입니다. 쉽게 말하면:
- AWS 콘솔에서 클릭클릭하며 만들던 것을
- 코드로 작성해서 자동으로 만들 수 있어요
- 마치 레시피처럼 인프라 구성을 저장하고 재사용할 수 있죠!
2. 설치하기 📦
Windows의 경우
- Terraform 공식 사이트 방문
- Windows 64-bit 버전 다운로드
- 압축 풀고 실행 파일을
C:\terraform
폴더에 넣기 - 환경 변수 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. 주의할 점 ⚠️
- 비용 관리
- 사용하지 않는 리소스는 꼭
terraform destroy
로 삭제 - 프리티어 범위 내의 리소스만 사용하기
- 사용하지 않는 리소스는 꼭
- 보안
- 보안 그룹 설정시 필요한 포트만 열기
- AWS 액세스 키는 절대 GitHub 등에 올리지 않기
- 백업
.terraform
폴더는 git에 포함하지 않기terraform.tfstate
파일은 잘 보관하기
9. 다음 단계 🎯
- VPC 구성 배우기
- 여러 리소스 연결하기
- 모듈 사용법 익히기
- 팀 협업 방법 배우기
마치며 🎁
생각보다 어렵지 않죠? 처음에는 하나씩 천천히 시작하세요. 에러가 나도 당황하지 마시고, 에러 메시지를 잘 읽어보면 해결 방법을 찾을 수 있어요!
궁금한 점이 있다면 언제든 댓글로 물어보세요! 😊
728x90
'100===Dev Ops > Terraform' 카테고리의 다른 글
Terraform Introduced (0) | 2024.06.12 |
---|