• aws
  • linux

접속 불가 상태의 LightSail 인스턴스에서 데이터 복구하기

SSH 접속이 안 되는 LightSail 인스턴스의 스냅샷을 EC2로 내보내고, 볼륨을 다른 인스턴스에 붙여 데이터를 살려낸 과정.

시리즈 · Infra1 / 3
  1. 접속 불가 상태의 LightSail 인스턴스에서 데이터 복구하기
  2. Terraform CI/CD 구축 (1): GitHub PR과 Jenkins 연동
  3. Terraform CI/CD 구축 (2): Jenkinsfile로 Plan 결과를 PR에 남기기

LightSail 인스턴스에 접속할 수 없게 되어 디스크의 데이터를 복구했던 과정을 정리한다.

상황

  • LightSail의 스냅샷을 바탕으로 새 인스턴스를 시작했다.
  • SSH 접속이 되지 않는다. 브라우저 기반 접속도 마찬가지였다.

AWS에 문의하니 Python 패키지 오류로 cloud-init 서비스가 정상 동작하지 않는다는 답변을 받았다. 인스턴스를 되살리기는 어려웠고, 디스크의 데이터라도 살려야 했다.

방법은 스냅샷을 EC2로 내보낸 뒤, 그 볼륨을 정상 동작하는 다른 EC2 인스턴스에 붙여서 읽는 것이다.

1. 스냅샷을 EC2로 Export

LightSail의 스냅샷 메뉴에서 Export to Amazon EC2를 선택한다.

LightSail 스냅샷의 Actions 메뉴에서 Export to Amazon EC2를 선택하는 화면

2. AMI로 EC2 인스턴스 생성 (EC2-A)

Export가 끝나면 LightSail 스냅샷을 기반으로 한 AMI가 EC2에 생성된다. 이 AMI로 인스턴스를 만든다. 이 인스턴스를 EC2-A라고 하겠다.

EC2 콘솔의 AMI 목록에서 AMI로 인스턴스 시작을 선택하는 화면

LightSail에서 부팅 후 접속이 안 됐으니 EC2-A도 똑같이 접속이 안 된다. EC2-A를 만드는 목적은 접속이 아니라, 스냅샷의 내용이 담긴 EBS 볼륨을 얻는 것이다.

3. 복구용 EC2 인스턴스 생성 (EC2-B)

Amazon Linux 기반의 새 EC2 인스턴스를 만든다. 이 인스턴스를 EC2-B라고 하겠다.

4. 볼륨을 분리해 EC2-B에 연결

  1. EC2-A를 중지한다.
  2. EC2-A를 선택하고 하단의 스토리지 탭에서 사용 중인 볼륨을 확인한다.
  3. 해당 볼륨을 선택한 뒤 작업 → 볼륨 분리를 누른다.

EBS 볼륨 상세 화면의 작업 메뉴에서 볼륨 분리를 선택하는 화면

분리된 볼륨은 볼륨 목록에서 사용 가능 상태로 표시된다. 같은 메뉴의 볼륨 연결로 EC2-B에 연결한다.

5. 마운트 후 백업

EC2-B에 접속해 lsblk로 연결된 디스크를 확인하고 마운트하면, LightSail에서 쓰던 OS의 파일 시스템이 그대로 보인다. 여기서 필요한 데이터를 백업하면 된다.

볼륨을 마운트하는 방법은 AWS 문서 - Amazon EBS 볼륨 사용을 참고한다.