AWS EC2 backup and restore EBS volumes


AWS EC2에서 EBS volume을 backup하고 restore하기

개요

AWS에서 EC2를 운영하면서 해당 서버를 백업해야하는 경우가 생깁니다. 1개의 EBS volume로 운영할 수도 있지만, 2개 이상의 EBS에 각각 application, data, log, backup data 등으로 용도별로 나누어서 관리하는 경우도 있습니다. 이 경우 이 중 특정 volume만 백업 및 리스토어를 하면 더 빠르게 작업이 가능합니다.

AWS EC2 인스턴스를 백업하기 위한 두 주요 방법은 AMI(Amazon Machine Image) 생성과 EBS(Elastic Block Store) 볼륨의 스냅샷 생성입니다. 두 방법 모두 유용하지만 사용 사례에 따라 서로 다른 장단점이 있습니다.

AMI (Amazon Machine Image) 생성:

장점:

  1. 완전한 인스턴스 복사본: AMI는 EC2 인스턴스의 전체 이미지를 제공하며, 인스턴스의 OS, 애플리케이션, 설정, 데이터 등 모든 것을 포함합니다.
  2. 쉬운 재배포: AMI를 사용하면 동일한 설정의 새 EC2 인스턴스를 빠르게 시작할 수 있습니다. 확장성, 복구 또는 다른 리전으로의 마이그레이션에 유용합니다.
  3. 리전 간 마이그레이션: AMI는 다른 리전으로 복사될 수 있습니다.

단점:

  1. 저장 비용: AMI는 모든 EBS 볼륨 데이터를 포함하므로 저장 비용이 더 높을 수 있습니다.
  2. 시간 소요: 큰 EBS 볼륨이 연결된 인스턴스의 경우 AMI 생성 시간이 길어질 수 있습니다.
  3. 새로운 인스턴스로 실행을 해야하므로 ip, domain name 등이 모두 바뀌므로, 서버 운영시 이러한 변경사항들을 반영해줘야 합니다.

EBS Volume Snapshot:

장점:

  1. 저장 비용 절감: 스냅샷은 초기 버전에서 변경된 블록만 저장하므로 저장 비용을 절감할 수 있습니다.
  2. 유연성: 특정 EBS 볼륨만 백업할 수 있습니다. 전체 인스턴스가 아닌 특정 데이터를 백업하려는 경우에 유용합니다.
  3. 빠른 백업: 초기 스냅샷 이후 변경된 블록만 백업되므로 백업 시간이 더 짧을 수 있습니다.
  4. 운영중인 인스턴스 상에서 볼륨만 교체하면 되기에 ip, domain name등의 변경이 없습니다.

단점:

  1. 인스턴스 메타데이터 누락: 스냅샷은 EBS 볼륨의 데이터만 포함하며 인스턴스의 메타데이터, 설정, IAM 역할 등은 포함하지 않습니다.
  2. 복구의 복잡성: 인스턴스를 복구하려면 적절한 AMI와 함께 스냅샷에서 볼륨을 복원한 후 인스턴스에 연결해야 합니다.

이 포스팅에서는 EBS snapshot 기능을 통해서 EBS volume을 backup하고 restore하는 방법에 대해서 알아보겠습니다.

1. EBS volume snapshot

먼저 volume과 연결된 폴더를 확인합니다.

lsblk

# nvme3n1 ... 2T disk /home/ubuntu/app/data-2

위 결과로 nvme3n1/home/ubuntu/app/data-2 폴더로 연결이 되어 있어 있음을 알 수 있습니다.

이제 해당 volume의 EBS ID를 확인해야 합니다.

ls -l /dev/disk/by-id

# ... nvme-Amazon_Elastic_Block_Store_vol0a342a0aef7f1220b -> ../../nvme3n1

nvme3n1 의 EBS ID는 vol-0a342a0aef7f1220b 입니다.

snapshot을 생성하기전에 umount를 하는 것이 더 안전하긴 하지만, 현재 동작중인 서버가 아니고 이 폴더내에 다른 변경사항이 없을 것이라는 확신이 있는 경우에는 굳이 안해도 됩니다.

cd app
sudo umount data-2

AWS 콘솔로 가서 해당 EBS volume을 선택한 뒤 Create snapshot을 실행합니다.

만약 umount한 경우라면 snapshot 생성이 완료된 후 해당 volume을 다시 mount 해줍니다.

sudo mount -t xfs -o nouuid /dev/nvme3n1 /home/ubuntu/app/data-2

2. snapshot으로부터 EBS를 생성하여 EC2에 연결

AWS 콘솔에서 먼저 snapshot으로부터 EBS volume을 생성합니다.

  • EBS -> snapshots -> Actions -> Create volume from snapshot

EBS volume이 다만들어지면 EC2에 연결해줍니다.

  • Volumes -> 선택 -> Actions -> Attach volume

이때 EBS volume ID를 기억해주면 좋습니다. 아래 과정에서 필요합니다. 기억을 못하면 AWS 콘솔에서 확인이 가능합니다.

3. EC2에서 기존 volume umount한 후 새로운 volume mount

먼저 기존에 연결된 volume을 연결해제 합니다.

cd app
sudo umount data-2

EBS ID와 연결된 volume명을 확인합니다.

ls -l /dev/disk/by-id

# ... nvme-Amazon_Elastic_Block_Store_vol0a342a0aef7f1220b -> ../../nvme3n1

이 volume으로 연결합니다.

sudo mount -t xfs -o nouuid /dev/nvme3n1 /home/ubuntu/app/data-2

4. 기존 EBS volume 연결해제한 후 삭제

volume의 EBS ID를 확인해야 합니다.

ls -l /dev/disk/by-id

# nvme1n1     259:2    0    2T  0 disk

어느 폴더도 연결되어 있지 않은 volume은 nvme1n1 입니다.

이제 해당 volume의 EBS ID를 확인해야 합니다.

ls -l /dev/disk/by-id

# ... nvme-Amazon_Elastic_Block_Store_vol0a342a0aef7f1220b -> ../../nvme3n1

AWS 콘솔에서 해당 EC2 창으로 가서 EBS를 선택 -> Actions -> Detach volume

그 이후 EBS 창으로 가서 해당 volume을 선택해서 삭제하면 됩니다.

이 글이 도움이 되셨다면 공감 및 광고 클릭을 부탁드립니다 :)