
EC2 Cloning with Global Accelerator
EC2 Cloning Terraform 스크립트입니다.
Terraform을 사용하여 AWS EC2를 복제하고, 기존 글로벌 엑셀러레이터(Global Accelerator)에서 이전 복제된 EC2를 제거한 후, 새 EC2를 등록하는 스크립트입니다.
요구사항:
- 현재 운영 중인 AWS EC2를 복제
- 기존 EC2의 AMI를 생성 후 이를 사용하여 새 EC2 생성
- 기존 EC2와 동일한 태그, 보안 그룹, 서브넷을 유지
- Global Accelerator 업데이트
- 이전 복제된 EC2가 있으면 Global Accelerator에서 제거 후 종료
- 새 EC2를 Global Accelerator의 엔드포인트 그룹에 등록
- 자동화 스크립트 실행 방법 제공
실행 방법:
- Terraform 설치
- Terraform 공식 다운로드에서 최신 버전을 설치합니다.
- AWS CLI 및 자격 증명 설정 (
aws configure
)을 완료합니다.
- Terraform 코드 작성
아래 스크립트를main.tf
파일로 저장합니다. - Terraform 실행
terraform init terraform apply -auto-approve
Terraform 코드 (main.tf)
provider "aws" {
region = "us-east-1" # 원하는 리전으로 변경하세요
}
# 기존 EC2 찾기 (운영 중인 인스턴스)
data "aws_instance" "original" {
filter {
name = "tag:Name"
values = ["your-instance-name"] # 기존 EC2의 태그 값 변경
}
}
# 기존 EC2의 AMI 생성
resource "aws_ami_from_instance" "clone_ami" {
name = "cloned-ami-${timestamp()}"
source_instance_id = data.aws_instance.original.id
}
# 새 EC2 생성
resource "aws_instance" "cloned_ec2" {
ami = aws_ami_from_instance.clone_ami.id
instance_type = data.aws_instance.original.instance_type
subnet_id = data.aws_instance.original.subnet_id
vpc_security_group_ids = data.aws_instance.original.vpc_security_group_ids
tags = {
Name = "Cloned-EC2"
}
}
# 기존 Global Accelerator 찾기
data "aws_globalaccelerator_accelerator" "ga" {
name = "your-accelerator-name" # 기존 글로벌 엑셀러레이터 이름
}
# 기존 Endpoint Group 찾기
data "aws_globalaccelerator_endpoint_group" "endpoint_group" {
listener_arn = data.aws_globalaccelerator_accelerator.ga.id
}
# 기존 EC2 엔드포인트 제거
resource "aws_globalaccelerator_endpoint_group" "updated_endpoint_group" {
listener_arn = data.aws_globalaccelerator_accelerator.ga.id
endpoint_configuration {
endpoint_id = aws_instance.cloned_ec2.id
weight = 100
}
}
# 기존 복제된 EC2 종료 (Terraform 관리 외의 인스턴스라면 수동으로 처리 필요)
resource "aws_instance" "terminate_old_ec2" {
count = length(data.aws_globalaccelerator_endpoint_group.endpoint_group.endpoint_configuration) > 0 ? 1 : 0
instance_id = data.aws_globalaccelerator_endpoint_group.endpoint_group.endpoint_configuration[0].endpoint_id
lifecycle {
ignore_changes = [ami, instance_type]
}
}
AWS EC2 복제 및 Global Accelerator 업데이트 작업 흐름도
아래 그림과 함께 작업 흐름을 설명하겠습니다.
1. Terraform 실행 시작
- Terraform을 실행하여 AWS 환경을 프로비저닝합니다.
2. 기존 운영 EC2 조회
- 현재 운영 중인 EC2 정보를 가져옵니다.
- EC2의 AMI ID, 보안 그룹, 서브넷, 태그 등을 확인합니다.
3. 기존 EC2의 AMI 생성
- 기존 EC2의 상태를 그대로 복제하기 위해 AMI (Amazon Machine Image) 를 생성합니다.
- AMI는 이후 새 EC2 인스턴스를 생성하는 데 사용됩니다.
4. 새 EC2 인스턴스 생성
- 생성된 AMI를 기반으로 새로운 EC2 인스턴스를 시작합니다.
- 기존 EC2와 동일한 보안 그룹, 서브넷, 태그를 적용하여 원본과 유사한 환경을 만듭니다.
5. Global Accelerator 정보 조회
- AWS Global Accelerator에 등록된 기존 EC2 정보를 가져옵니다.
- 현재 Endpoint Group에서 등록된 EC2를 확인합니다.
6. 기존 복제 EC2 조회
- Global Accelerator에 등록된 기존 복제된 EC2를 찾습니다.
- 이 단계에서 조건을 확인하여, 등록된 EC2가 있다면 제거하고 새 EC2로 교체합니다.
7. 기존 복제 EC2 제거
- 기존 EC2가 Global Accelerator의 엔드포인트 그룹에 포함된 경우, 먼저 제거합니다.
- 기존 엔드포인트를 유지한 채 새로운 EC2를 등록할 수 없기 때문에 제거 후 추가하는 방식을 사용합니다.
8. 기존 복제 EC2 종료
- Global Accelerator에서 제거된 기존 EC2는 더 이상 필요하지 않기 때문에 종료합니다.
- 이렇게 하면 불필요한 EC2 인스턴스 유지 비용을 절감할 수 있습니다.
9. 새 EC2를 Global Accelerator에 등록
- 이제 복제된 새로운 EC2를 Global Accelerator의 엔드포인트 그룹에 추가합니다.
- 가용성이 보장된 상태로 새로운 트래픽이 라우팅될 수 있도록 합니다.
10. Terraform 실행 종료
- 모든 작업이 정상적으로 완료되었으면 Terraform 실행을 종료합니다.
- 결과적으로 운영 환경의 복제 및 업데이트가 완료됩니다.
참고 사항:
your-instance-name
및your-accelerator-name
값을 실제 환경에 맞게 수정해야 합니다.- EC2가 여러 개일 경우 특정 태그나 ID를 필터링하는 로직을 추가해야 합니다.
- 기존 Global Accelerator의 엔드포인트 그룹을 동적으로 업데이트하는 방식이므로, 실행 전에 기존 설정을 확인해야 합니다.
이 스크립트를 실행하면 운영 중인 AWS EC2를 Terraform을 사용해 복제하고, Global Accelerator의 엔드포인트를 최신 상태로 유지할 수 있습니다. 🚀