Infra/Aws

[AWS][Spring] Aws 우분투 인스턴스 웹 애플리케이션 자동 배포 스크립트 만들기

kth990303 2022. 6. 8. 16:16
반응형

지난 포스팅에서 github에 올린 웹 애플리케이션을 aws 인스턴스에 배포하는 방법을 알아보았다.

https://kth990303.tistory.com/329

 

[AWS] AWS EC2를 이용하여 스프링 웹 애플리케이션 배포해보기

AWS는 아마존에서 개발한 클라우드 서비스 플랫폼이다. 여기서 클라우드 서비스란, IT 리소스(CPU, 메모리 등의 자원)를 인터넷으로 빌려주고 사용한 만큼의 비용을 받는 것을 의미한다. EC2는 Elasti

kth990303.tistory.com

이번 포스팅에서는 터미널에서 특정 sh 파일을 실행하기만 하면 위 과정이 자동으로 이루어지는 작업을 기록해보려 한다.

aws ec2 인스턴스는 이미 생성이 돼있다는 가정 하에 포스팅을 작성한다.


1. 셸 스크립트 (deploy.sh) 작성

우아한테크코스의 백엔드 크루 조조그린이 기가 막히게 예쁘게 작성해준 스크립트를 따로 수정해서 정리해본 것이다.

echo =========================================
echo 	   기존 repository 디렉토리 제거
echo =========================================
rm -r -f repository
echo =========================================
echo  새로운 repository 디렉토리 생성 후 이동
echo =========================================
mkdir repository
cd repository
echo =========================================
echo 배포하고자 하는 프로젝트를 git 에서 clone
echo =========================================
git clone -b {브랜치명} --single-branch {레포지토리 주소.git}
echo =========================================
echo 		   bootJar 생성
echo =========================================
cd {레포지토리명}
./gradlew bootJar
echo =========================================
echo         기존 서버 프로세스 종료
echo =========================================
sudo kill -9 $(sudo lsof -t -i:{실행 프로세스 port 번호})
echo =========================================
echo                서버 실행
echo =========================================
cd build/libs
chmod 755 {배포 jar 파일}
nohup java -jar {배포 jar 파일} &
echo =========================================
echo           디렉토리 위치 초기화
echo =========================================
cd /home/ubuntu
echo =========================================
echo 		    빌드 완료
echo =========================================

이 스크립트를 실행시키면 깃허브에서 /home/ubuntu 위치에서 웹 애플리케이션을 클론하여 빌드한다.

만약 해당 Port에서 실행중인 프로세스가 있으면 그 프로세스를 종료시키고 서버를 실행시키는 스크립트이다.

 

해당 명령어 내용이 궁금하다면 맨 위에 올린 포스팅을 참고하자.

 

2. 해당 셸 스크립트 인스턴스에 등록하기

해당 셸 스크립트가 존재하는 디렉토리로 이동한 후에, 터미널에 아래 명령어를 입력해주자.

scp -i {키페어 이름}.pem {셸스크립트명} ubuntu@{ec2-ip}:/home/ubuntu

키페어 권한으로 위 셸 스크립트를 aws ec2 인스턴스에 보내주자. 나는 위 셸 스크립트명을 deploy.sh로 작성했기 때문에 scp -i key-kay.pem deploy.sh ubuntu@{ec2-ip}:/home/ubuntu 로 작성해주었다. 뒤에 :/home/ubuntu 를 붙여주는 것을 명심하자.

 

참고로 과거에 이미 이 명령어를 입력했었는데, 기억이 안나고 키워드만 기억난다면 아래 명령어를 입력해주면 입력 이력들이 나온다.

history | grep {키워드}

 

3. aws 인스턴스에 접근

인텔리제이의 start SSH 또는 터미널에서 aws 인스턴스에 접근해주자.

ssh -i {키페어} ubuntu@{ec2-ip}

 

4. 셸 스크립트 실행

이제 셸 스크립트를 실행시켜주자!

./deploy.sh

다행히 성공적으로 빌드가 완료됐다. 애플리케이션 서버 코드에 문제가 없다면 제대로 작동이 될 것이다.

swagger이 작동되는 것을 확인하여 서버가 정상적으로 배포됨을 확인할 수 있었다!

 

만약 의도대로 돌아가지 않는다면 아래 명령어를 통해 nohup.out을 확인하여 어떤 에러가 발생했는지 확인해보자.

cd repository/build/libs	// nohup 파일 존재하는 디렉토리 이동
cat nohup.out	// nohup 결과 조회

위 명령어를 입력하면 실행하면서 어디에 예외가 발생했는지 알 수 있다.

 

만약 repository에 build/libs 디렉토리가 존재하지 않는다면 재실행해보도록 하자.

재실행해도 안된다면 셸 스크립트 명령어를 본인 환경에 맞게 잘 수정했는지 확인해보아야 한다.


웹 인스턴스와 db 인스턴스가 분리돼있을 경우, 위 방법은 로컬의 h2 테스트 db를 사용하여 진행될 것이다.

다음 포스팅에서는 db까지 연동하여 배포하는 방법을 기록해보도록 하겠다!

반응형