AWS에서 Terraform으로 무중단 배포 환경 구축하기 튜토리얼 =======
DevOps의 중요한 목표 중 하나는 애플리케이션의 배포를 지속적으로 진행하면서도 서비스 가용성을 유지하는 것입니다. AWS와 Terraform을 사용하여 무중단 배포 환경을 구축하는 방법을 단계별로 설명하겠습니다.
1. Terraform 설치
먼저 Terraform을 설치해야 합니다. Terraform은 Infrastructure as Code (IaC) 도구로, 인프라를 코드로 관리할 수 있게 해줍니다.
macOS에서 Terraform 설치
brew tap hashicorp/tap
brew install hashicorp/tfenv
tfenv install latest
tfenv use latest
Windows에서 Terraform 설치
Terraform의 최신 버전을 다운로드하고, 시스템 경로에 추가합니다.
2. AWS CLI 설치 및 설정
Terraform을 사용하기 전에 AWS CLI를 설치하고 설정해야 합니다.
AWS CLI 설치
pip install awscli
AWS CLI 설정
aws configure
이 명령어를 실행하면 AWS Access Key, Secret Access Key, 지역 및 출력 형식을 입력하라는 프롬프트가 나타납니다.
3. Terraform 설정 파일 생성
이제 Terraform 설정 파일을 생성합니다. 프로젝트 디렉토리를 만들고, 그 안에 main.tf 파일을 생성합니다.
mkdir terraform-aws-blue-green
cd terraform-aws-blue-green
touch main.tf
main.tf 파일에 다음과 같은 내용을 추가합니다.
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
}
resource "aws_subnet" "blue" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.1.0/24"
availability_zone = "ap-northeast-2a"
}
resource "aws_subnet" "green" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.2.0/24"
availability_zone = "ap-northeast-2b"
}
위 코드에서는 VPC와 두 개의 서브넷(blue와 green)을 생성합니다. 이는 무중단 배포를 위한 기본 구조입니다.
4. 애플리케이션 배포
이제 EC2 인스턴스를 blue와 green 서브넷에 배포합니다. 아래와 같이 main.tf에 추가합니다.
resource "aws_instance" "blue" {
ami = "ami-0c55b159cbfafe1fa" # Amazon Linux 2 AMI
instance_type = "t2.micro"
subnet_id = aws_subnet.blue.id
tags = {
Name = "blue-instance"
}
}
resource "aws_instance" "green" {
ami = "ami-0c55b159cbfafe1fa"
instance_type = "t2.micro"
subnet_id = aws_subnet.green.id
tags = {
Name = "green-instance"
}
}
5. Terraform 실행
이제 Terraform을 실행하여 AWS 리소스를 생성합니다.
terraform init
terraform apply
위 명령어는 Terraform이 AWS에 리소스를 생성하도록 지시합니다.
6. 무중단 배포 설정
무중단 배포를 위해 Load Balancer를 설정합니다. 아래 코드를 main.tf에 추가하세요.
resource "aws_elb" "main" {
name = "my-load-balancer"
availability_zones = ["ap-northeast-2a", "ap-northeast-2b"]
listener {
instance_port = 80
instance_protocol = "HTTP"
lb_port = 80
lb_protocol = "HTTP"
}
health_check {
target = "HTTP:80/"
interval = 30
timeout = 5
healthy_threshold = 2
unhealthy_threshold = 2
}
}
resource "aws_elb_attachment" "blue" {
elb = aws_elb.main.id
instance = aws_instance.blue.id
}
resource "aws_elb_attachment" "green" {
elb = aws_elb.main.id
instance = aws_instance.green.id
}
이제 Load Balancer가 blue와 green EC2 인스턴스에 트래픽을 분산하게 됩니다.
7. 배포 테스트
브라우저에서 Load Balancer DNS를 통해 애플리케이션에 접근하여 정상 작동하는지 확인합니다.
마무리
이 튜토리얼에서는 AWS와 Terraform을 사용하여 무중단 배포 환경을 구축하는 방법을 살펴보았습니다. 인프라를 코드로 관리함으로써 효율성과 안정성을 높일 수 있으며, 무중단 배포를 통해 사용자 경험을 향상시킬 수 있습니다. 이 과정을 통해 DevOps의 핵심 원칙인 자동화와 지속적인 배포를 실현해 보세요!