안녕하세요.
베스핀글로벌 클라우드기술지원팀 이주원 입니다.
고객 문의 중 AMI 를 생성해 새로운 인스턴스로 복사하는 과정에서 오류가 발생한 내용을 바탕으로 작성한 FAQ 입니다.
Question
AMI 생성 완료 후 서버가 죽음. ssh 접속 불가하고 재부팅 및 중지 후 시작을 여러번 해보았으나 상태검사 실패(1/2) 됨. (인스턴스 연결성 검사 실패)
AMI 생성 시 서버가 종종 죽는 경우는 보았으나 금방 다시 복구되었었는데 이번같은 경우는 여러 시도를 해보았으나 AMI 대상 서버 및 생성된 AMI 모두 사용 불가능하였습니다. 낮은 타입의 인스턴스(t2.micro) 에서 AMI 를 생성해서 발생한 이슈일까요?
Answer
결론부터 말씀드리면 확인 결과 인스턴스 타입 사양 문제는 아니었고, AMI를 생성한 원본 인스턴스 구성사항으로 발생하는 문제였습니다.
AMI를 통해 새로 생성된 인스턴스를 보면 문의주신 내용대로 인스턴스 상태검사가 실패로 인스턴스를 정상적으로 실행할 수 없는 상태였습니다.
인스턴스 상태검사 실패인 경우 주로 인스턴스 - 작업 - 모니터링 및 문제 해결 - 시스템 로그 가져오기 를 통해 문제를 확인해 볼 수 있습니다.
확인결과 아래와 같이 Python 스크립트를 실행하며 특정 모듈이 존재하지 않아 오류가 발생한 부분을 확인할 수 있었습니다.
단순히 생성된 AMI 를 통해 시작한 인스턴스에서 해당 오류가 발생한 이유는 당연하게도 AMI 의 원본 인스턴스에서 해당 부분에 문제가 있어 발생한 것으로 유추할 수 있습니다.
같은 방법으로 원본 인스턴스의 시스템 로그를 확인해본 결과 같은 오류가 발생한 것으로 확인했습니다.
즉, 원본 인스턴스에서 기본적으로 제공하는 Python 설정을 변경하였고 이 과정에서 특정 모듈이 누락되어 발생한 문제로 이러한 구성설정으로 이미지를 생성하여 인스턴스를 시작한 결과 제대로 시작할 수 없는 상태가 된 것 입니다.
그렇다면, 원본 인스턴스에서는 문제가 발생하지 않고 복제된 인스턴스에서만 문제가 발생한 이유는 원본 인스턴스 초기 구성 시 문제가 없는 AWS에서 제공하는 이미지를 통해 인스턴스를 시작 후 Python 환경을 수정한 것이지만 대상의 경우 이미 변경된 Python 환경으로 인스턴스를 시작하는 과정에서 오류가 발생하기 때문에 실행할 수 없는 것으로 확인됩니다.
또한, 인스턴스 시작시 Python이 문제를 일으키는 이유는 인스턴스 시작과 함께 cloud-init 명령이 실행되기 때문입니다. 이러한 명령은 Python을 통해 실행되는데 이때 Python이 정상적으로 실행되지 않아 발생한 문제입니다.
참고문서 : https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/user-data.html#user-data-shell-scripts
해당 문의는 원본 인스턴스에서 오류에서 확인한 해당 모듈을 추가 후 Python 오류가 발생하지 않도록 해결하고, 다시 AMI 생성 후 인스턴스 시작한 결과 정상적으로 실행되었습니다.
AMI를 만들기 전에 아래와 같은 정보들을 확인하는 작업들이 필요합니다.
�- 시작 프로그램 : 인스턴스 새롭게 시작 되면서 프로세스가 시작 될 수 있도록 되어 있는지,
- Disk 정보 : 리눅스의 경우, fstab과 같은 마운트 정보 확인
- 인스턴스 고유 정보 여부 : 직접적으로 IP가 들어가 있다거나, 대상 인스턴스에만 사용 되는 정보가 있지 않은지
- 외부 연결 정보 : 새롭게 만들어지는 인스턴스들과 연결 될 수 있는 구조인지
정리하자면 이번과 같은 문제는 원본 AMI 에서 발생하는 이슈로 인해 새로 시작한 인스턴스에서도 문제가 발생했던 것 입니다.
인스턴스 AMI 생성 후 실행하는 과정에서 문제가 발생했을 시 이번과 같이 원본 인스턴스에서 발생하는 문제가 없는 지, 시스템 로그 등을 통해 확인해보시기 바랍니다.
작성한 FAQ 가 도움이 되셨기를 바랍니다.
베스핀글로벌
클라우드기술지원팀
이주원