EC2시작할 때 스크립트 자동실행하여 서버 배포하기(feat. pm2)

개발자 왜?전·2020년 12월 16일
3

이전글에서 EC2인스턴스를 자동으로 켜고 끄게 만들었다. 그리고 설정해놨던 오전 10시에 접속해보니 502에러가 나를 반겨주고 있었다. 급한 마음에 SSH로 연결해서 확인해보니 서버가 꺼졌다가 켜지느라 pm2를 통해 배포되던 개발물도 없어졌던 것이다.

해결

기본적으로 AWS는 해결법에 대해 대부분의 내용에 대해 친절히 한글로 알려준다. 해결하기 위해 찾은 내용 또한 한글이었다.

그러나 설명과 다르게 여러 시도를 거쳐서 해결했다.

Cloud-init

먼저 cloud-init이 ec2에 설치되어야 한다. ubuntu를 기준으로 sudo apt-cache search cloud-init명령어를 통해 확인할 수 있다. 설치되어 있지 않다면 sudo apt-get install cloud-init을 통해 설치할 수 있다.

EC2 인스턴스

먼저 실행중인 인스턴스를 중지해야한다. 종료가 아니라 중지다! 다음과 같이 원하는 인스턴스를 클릭 후 인스턴스 상태에서 인스턴스 중지를 클릭하자

상태에 빨간색으로 중지됨이 뜨지 않으면 아직 중지중이니 기다려주자.

이후 조금 헤맨 부분인데 작업 > 인스턴스 설정 > 사용자 데이터 편집 부분이다. 공식글에도 이렇게 설명되어 있어 너무도 당연하게 인스턴스 상태 버튼 옆의 작업버튼을 클릭하고 인스턴스 설정을 확인했다. 그러나 그곳에는 사용자 데이터 편집 또는 사용자 데이터와 관련한 버튼이 없다. 제길

버튼은 해당 인스턴스에서 우클릭 후 확인할 수 있다.

사용자 데이터 수정하기

이제 다 왔다. 해당 버튼을 클릭하면 중지가 완료되었다는 가정하에 아래와 같은 화면이 나온다. 그리고 원래 선택되어 있는대로 사용자 데이터를 텍스트로 수정을 클릭하고 그 아래 textarea에 설정내용을 적어주면 된다.

설정 내용은 다음과 같다. 처리해야할 스크립트는 하단에 #!/bin/bash 아래부터 작성하면 된다.
작성할 때 주의할 점이 있다면,
1. sudo 기준이다.
2. root폴더 기준이다. (ec2에 연결하면 home/ubuntu/ 이기 때문에 너무도 당연히 ubuntu폴더가 기준인줄 알았다.)

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
**여기부분에 원하는 스크립트를 작성하시면 됩니다, 아래 2줄은 예시입니다.**
cd home/ubuntu/futchall <---- 폴더 변경
npx pm2 start npm -- start <--- pm2 실행
--//

마무리

일단 급한불은 껐다. 이렇게 당연한 것마저 고려하지 못하니 역시 초짜이긴 한 것 같다. 시행착오를 겪으며 원리나 흐름의 중요성에 대해 더욱 느낀다.
아직 해당 script의 시점에 대해 의문이 있다. 아무래도 먼저 시작되는 것 같다. 인스턴스를 재실행하고 연결해 pm2 list를 확인하면 npx가 재설치(?)되는 모습을 보인다. 더 찾아보고 추가할 수 있도록 해야겠다.

profile
하고 싶어 개발하는, 능동개발자

0개의 댓글