EC2 Cloning with Global Accelerator

EC2 Cloning Terraform 스크립트입니다.
Terraform을 사용하여 AWS EC2를 복제하고, 기존 글로벌 엑셀러레이터(Global Accelerator)에서 이전 복제된 EC2를 제거한 후, 새 EC2를 등록하는 스크립트입니다.


요구사항:

  1. 현재 운영 중인 AWS EC2를 복제
    • 기존 EC2의 AMI를 생성 후 이를 사용하여 새 EC2 생성
    • 기존 EC2와 동일한 태그, 보안 그룹, 서브넷을 유지
  2. Global Accelerator 업데이트
    • 이전 복제된 EC2가 있으면 Global Accelerator에서 제거 후 종료
    • 새 EC2를 Global Accelerator의 엔드포인트 그룹에 등록
  3. 자동화 스크립트 실행 방법 제공

실행 방법:

  1. Terraform 설치
  2. Terraform 코드 작성
    아래 스크립트를 main.tf 파일로 저장합니다.
  3. 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-nameyour-accelerator-name 값을 실제 환경에 맞게 수정해야 합니다.
  • EC2가 여러 개일 경우 특정 태그나 ID를 필터링하는 로직을 추가해야 합니다.
  • 기존 Global Accelerator의 엔드포인트 그룹을 동적으로 업데이트하는 방식이므로, 실행 전에 기존 설정을 확인해야 합니다.

이 스크립트를 실행하면 운영 중인 AWS EC2를 Terraform을 사용해 복제하고, Global Accelerator의 엔드포인트를 최신 상태로 유지할 수 있습니다. 🚀

Leave a Reply

Your email address will not be published. Required fields are marked *