[AWS EBS] Volume을 소중히 다뤄보기

안녕하세요,
오늘은 볼륨에 대해 알아보려고 합니다.
좋은 주말 되세요!
EBS 볼륨 복제는 예기치 못한 장애로부터 데이터를 보호하고 백업 및 재해복구를 용이하게 하며
운영 효율성을 높이는데에 필수적인 기능이니, 알아두면 좋습니다~!

01. AWS EBS란?
✅ EBS (Elastic Block Storage)
- AWS에서 제공하는 블록 스토리지 서비스로 고성능, 영구적 스토리지.
- EC2 인스턴스에 연결하여 사용하는 네트워크 기반 블록 스토리지라고 합니다.
- AZ 단위로 동작하여 같은 AZ에 있는 EC2 인스턴스와 연결이 가능합니다.
네트워크 기반 스토리지라면, 장점이 뭘까?

잠시 인스턴스 서버가 필요가 없게 될 경우 중지를 하게 될텐데 EBS는 네트워크 기반 스토리지여서
중지가 되어 있어도 독립적으로 스토리지 기능만 사용이 가능하며 추가 과금이 되지 않는다!
만약 인스턴스 자원 유형을 업그레이드 하거나 인스턴스를 교체해야 될 경우에
EBS만 분리시킨 후에 다시 재연결만 한다면 데이터가 그대로 유지되어 사용이 가능합니다.
✅ EBS 타입 유형

1) gp3/gp2 : 범용 SSD
- gp3 : 최신 타입, 비용 효율적, IOPS와 처리량을 크기와 무관하게 설정이 가능하다.
- gp2 : 이전 세대, IOPS는 볼륨 크기에 비례
2) io2/io1 : 프로비저닝 IOPS SSD
- 고성능, 높은 내구성, IOPS를 직접 설정 가능
- io2는 io1보다 내구성과 성능이 더 뛰어나다.
3) 사용 사례
- gp3,gp2 : boot volume, 개발/테스트 환경, 일반 어플리케이션
- io2,io1 : 고성능 DB, 트랜잭션 처리 시스템, 높은 IOPS 요구 워크로드에 적합함.
02. 다른 VPC에서 EBS 스냅샷 복제
✅ EC2 → Elastic Block Store → Snapshot 생성

- 특정 인스턴스에 있는 볼륨을 선택하고, 스냅샷을 생성하자.
✅ Snapshot 설정 → 계정 추가

- 볼륨 스냅샷이 생성이 되었으면, 설정에서 공유할 계정을 추가하면 됩니다.
- 만약, 볼륨이 암호화된 볼륨이라면 KMS 키도 대상 계정에 공유해야 합니다.
- key policy 수정이 필요함!!
✅ 공유된 계정에 접속하여 확인
- EC2 → Storage 에서 확인이 가능하다!

03. EC2 서버에 마운트
절차 : 디스크 확인 → 마운트 디렉토리 생성 → 볼륨 마운트 → 마운트 확인 → 부팅 시 자동 마운트 설정
📌 disk 확인
- 현재 disk 확인 시 복제한 볼륨에 대한 파티션이 없음을 확인할 수 있다.
lsblk

📌 마운트 디렉토리 생성 & 마운트
sudo mkdir -p /mnt/mydata
sudo mount /dev/nvme1n1p1 /mnt/mydata
# mount 확인
df -h
📌 부팅 시 자동 마운트 설정
- 마운트 대상에 대한 UUID, 마운트디렉토리, 값 수정하여 추가 및 저장
sudo blkid /dev/nvme1n1p1
/dev/nvme1n1p1: UUID="abcd-1234" TYPE="ext4"
sudo cat /etc/fstab
LABEL=cloudimg-rootfs / ext4 defaults,discard 0 0
sudo vim /etc/fstab
UUID=abcd-1234 /mnt/mydata ext4 defaults,nofail 0 2
📌 마운트 저장
mount -a
04. 기존 EC2 인스턴스에서 루트 볼륨 교체
만약 스냅샷을 복제하여 새로운 디렉토리에 마운트 하는 것이 아닌, 교체 작업일 경우는 참고바랍니다.
✅ 사전 조건
- EBS 볼륨은 동일 OS 기반으로 준비되어 있어야 한다.
- 인스턴스 중지가 가능해야 한다 (Downtime 필요)
- 인스턴스와 볼륨은 같은 AZ에 있어야 한다.
- 인스턴스 중지를 시키고 작업을 해야하므로, 로컬PC에 aws 자격 증명 인증이 선행되야한다.
📌 인스턴스 중지 & 기존 루트 볼륨 확인
# 인스턴스 중지 확인
aws ec2 stop-instances --instance-ids [ec2 instance-id]
# 기존 루트 볼륨 확인
aws ec2 describe-instances --instance-ids [ec2 instance-id] --query "Reservations[].Instances[].BlockDeviceMappings"


📌 기존 루트 볼륨 제거 & 새 볼륨 연결
# 기존 루트 볼륨 분리
aws ec2 detach-volume --volume-id [OLD 볼륨id]
# 새 볼륨 연결
aws ec2 attach-volume --volume-id [NEW 볼륨 id] --instance-id [ec2 instance id] --device /dev/sda1
📌 인스턴스 시작
- 볼륨 연결 시 attaching이 되었다면, 인스턴스 시작

4-1. 볼륨 교체 확인 작업
📌 기존 볼륨은 제거되고, 새로운 볼륨 attach 확인

📌 블록 디바이스(디스크, 파티션) 속성 확인 & 부팅 시 자동 마운트 확인

- 루트 파티션(/)이 nvme0n1p1에 있고 파일 시스템은 ext4로 잘 설정되었음.
- 라벨이 fstab과 일치하게 잘 설정되었음.

- 마운트 잘 되어있는지 확인 완료.
감사합니다 :)