초보 개발자

EC2 Status check failed시 자동으로 재부팅 하는 방법 본문

AWS

EC2 Status check failed시 자동으로 재부팅 하는 방법

taehyeki 2023. 4. 11. 18:00

EC2 상태가 정상적이지 않을 경우, EC2에 통신이 이루어 지지 않는다.

만약 EC2 단일 서버를 운영하는 회사가 있다면. 아무도 출근하지 않는 주말의 경우에 서버가 정상 작동이 되지 않는다면 주말 내내 서버를 이용하지 못한 부분에 있어 회사는 손해를 볼 수도 있다.

 

따라서 EC2를 자동으로 재부팅 시키는 방법을 찾아 보았다. Amazon Doc를 참고하면 자세히 설명이 되어 있다.

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/UsingAlarmActions.html#AddingRebootActions

 

이 방법에 따르면 EC2에 Status check failed ( instance ) 일 경우 재부팅 하는 CloudWatch Alarm을 부착하여 해결할 수 있다고 한다.

 

 

알람이 필요한 인스턴스의 오른쪽 마우스 클릭 후 Monitor and troubleshoot -> Manage CloudWatch alarms 클릭

1분 간격으로 2번 인스턴스 상태가 Fail일 경우 리부트하는 조건을 생성

 

테스트용 ec2를 하나 만들고 아래와 같은 커맨드를 입력하면 해당 ec2는 fail 상태에 접어든다.

sudo ifconfig eth0 down

 

의도적으로 ec2상태를 fail로 만들고 alarm이 잘 울리는지 확인을 해보는 것이다. 

 

한 번의 경우 빼고 자동으로 ec2를 리부팅 시켜주는 것을 확인하였다. 한번은 왜 그런지 잘 모르겠다..

 

하지만 서버를 리부트 시켜주고 난 뒤 프로그램을 실행시키지 않으면 아무 소용이 없기에 EC2콘솔에서 USER DATA를 작성해두면 프로그램이 boot될 때마다 실행시키고 싶은 커맨드를 실행시킬 수 있다. 

간단한 웹 서버를 하나 만들어 두고 실행시키는 user data를 작성해두었다.

 

서버에서 리부트를 시키고 나면 

sudo reboot

 

user data에 작성된 스크립트가 작동이 잘 되는 것을 확인할 수 있다.

 

 

 

 

시행착오

 

1. user data는 reboot할때는 실행되지 않는다고 생각했다.

맨 처음 start할 때만 실행이 된다고 생각을했기에,

구글링해본 결과 하기 경로에 shell script를 저장 해두면 부트 될 때마다 그 스크립트가 실행이 된다고 하여,

이 방식도 사용해 본 결과 잘 작동하였다. 실제로 사용한 방식은 이 방식이다. 서버를 잠시라도 꺼두면 안되는 조건이 있었기 때문이다. user data를 작성하려며 일단 ec2 server를 stop시켜야 하는데 이건 그럴필요가 없다.

/var/lib/cloud/scripts/per-boot/

이와 관련하여 cloud-init이라는 기능이 있는 것 같다. 이건 linux에서 처음 기동할 때 실행되는 것이라고 한다. 아마도 user data를 작성해두면 그 스크립트가 cloud init이 실행시키는 것 중 하나에 편입되는 것이 아닐까 ?

 

 

2. Status check failed은 서버가 stop이 되어있을 때도 발생할 것이라고 생각하였다.

따라서 서버에 cloudwatch alarm을 달아두고 서버를 stop시켰을 경우에도 발생할 것이라고 생각하였다.하지만 계속 알람이 울리지 않았다. 곰곰히 생각해보니 애초에 서버가 stop이 되어있다면 staus check 자체도 불가능 하니, 말도 안되는 생각을 하고 있었던 것이다.