엘라스틱빈스톡

Elastic Beanstalk기본 개념과 내부 구성/ Elastic Beanstalk 통해서Spring boot project 배포

25G 2023. 3. 26. 15:51

Elastic Beanstalk?

- OS설치가 필요 없음(이미 설치가 돼 있다)

- JDK 설치가 필요 없음(이미 설치가 돼 있다)

- 오토 스케일링, 각종 소프트웨어 구성, 로드벨런서, 모니터링, 업데이트 버전 관리 등등 많은 설정 포함

 

샘플 어플리케이션 설치

AWS 콘솔에서 Elastic Beanstalk을 검색한후에 네브바에 "환경"탭을 눌러서 기본적인 설정을 한후에 "샘플 에플리케이션"을 채크한후 환경을 빌드하면 된다. 그럼 여러가지 환경을 빌드하고 도메인주소가 나올텐데 들어가보면 샘플애플리케이션이 다음과 같이 띄워져 있고 EC2 인스턴스 콘솔에 가도 새로운 EC2인스턴스가 생성된것을 확인할 수 있다. 

 

여기서 이상한 점을 발견할 수 있는데 도메인으로 들어갈때 요청했던 IP와 EC2 인스턴스에 퍼블릭 IP와 주소가 다른것을 확인할 수 있다.

그리고 한가지 더 이상한 점은 인바운드규칙으로 다른 포트를 열고 해당 IP:{열어준 포트}로 들어가도 위 화면이 나온다. 이를 이해하기 위해선 Elastic Beanstalk의 내부 구성을 이해해야 한다.

 

Elastic Beanstalk

Elastic Beanstalk (java 플랫폼) 생성 시에 일어나는 일

1. NginX 서버 설치및 설정(프록시)

- 포트 80

2. jdk설치 및 샘플코드 실행

- 샘플코드 포트 5000

3. 클라이언트 요청을 받기 위한 로드벨런서 설정

- 80포트 리스닝

 

그렇다면 빈스톡으로 만든 샘플 애플리케이션에 클라이언트가 요청하게 되면 프로세스가 다음과같이 흘러간다.

클라이언트 -> 로드벨런서(port:80) -> EC2 Nginx (port:80) -> 샘플애플리케이션 (port:5000)

Nginx server는 외부IP요청을 거부한다. Nginx는 같은 보안 그룹으로 묶인 요청만 받아준다(로드벨런서).

 

위 프로세스를 풀어서 설명하자면 로드벨런서만을 통해서 Nginx로 접근할 수 있고 Nginx가 프록시역할을해서 샘플애플리케이션에 접근핤 할 수 있습니다. 만약 EC2서버가 여러개라고 하면 로드벨런서가 내부 알고리즘을 통해서 자원이 한쪽에 부하가 일어나지 않도록 요청을 분산해서 요청을 하게 되고 각각의 EC2서버에 Nginx에서는 로드벨런스의 요청을 받아서 프록시처리를 한다.

 

spring boot 배포하기

aws elastic beanstalk에 들어가서 기존에 샘플 애플리케이션으로 띄어져 있던 환경에 들어가서 위 업로드 및 배포에 자신이 빌드한 .jar파일을 선택해 주기만하면 배포가 완료된다. 위 프로세스에서 5000포트의 샘플애플리케이션만 교체가 되는 개념이다.

왼쪽 네브바에가면 배포 로그도 확인해 볼 수 있다.

 

그냥 배포를 하게 되면 다음과같이 상태가 심각이 되는데 심각인 이유는 기존에 설정돼 있던 도메인주소로 요청을했을때 자원이 없을때(404 status code)일 확률이 높다

그렇기 때문에 애플리케이션에 최상위 주소가 있거나 아니면 빈스톡의 설정을 알아야한다.

구성 -> 로드벨런스 편집 -> 프로세스를 보면 "상태 검사 경로"란에 보면 "/"로 설정이 돼 있다 해당 프로세스 설정때문에 "/"로 요청해서 status code가 200이 안돌아오면 위 사진처럼 심각상태가 된 것이다.

 

ElasticBeanstalk이 만든 EC2로 SSH 접속 해보기

자 그럼 어떻게 빈스톡이 서버를 구성했는지 한번 체크해 보려고 한다.

일단 띄어져 있는 프로세스만 봐도 알수 있는것이 application.jar로 내 jar파일이 이름이 변경돼서 프로세스가 띄어져있고 nginx또한 띄어져 있다. 

자 그럼 이제 nginx의 설정을 보자

sudo find / -name nginx

cd /etc/nginx/nginx.conf

로 확인해 본다

위 server{}안에 80포트를 리슨하고 있는것을 확인할수 있고 빈스톡의 자세한설정은 include conf.d~~ 를 보면 된다고 돼 있다. 그럼 한번 가서 빈스톡의 설저을 본다.

/ 로 요청이오면 5000번으로 프록시 패스하라고 명령돼 있다.