초보 개발자

ELB / TG 본문

AI 웹개발 트랙 - 내배캠/8주차

ELB / TG

taehyeki 2022. 1. 31. 22:03

EC2를 생성하여 AWS로부터 하나의 컴퓨터를 받았다. 그리고 거기에 아래와 같이 명령어를 입력하여 

python3을 python으로 입력해도 알아들을 수 있도록,

pip3를 pip로 입력해도 알아들을 수 있도록 설정을 해주고, flask 와 boto3을 받았다.

# python 이라는 명령어로 3 버전 이상을 실행하도록 하는 명령어입니다.
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
# pip3 설치
sudo apt-get update
sudo apt-get install -y python3-pip

# 버전 확인
pip3 --version

# pip3 대신 pip 라고 입력하기 위한 명령어
# 아래 명령어를 입력하면 pip 라고 쳐도 pip3를 작동시킬 수 있습니다.
sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1

# 파이썬 개발에 필요한 라이브러리 설치
pip install flask boto3 flask-cors

그리고 깃 클론을 통해서 올려놓은 서버를 받아와서 여기서 실행시키면 된다. 서버를 구동시키면 아래의 주소로 들어가라고 하는데 여기로 들어가면 안나오고 

 

우리가 생성한 EC2의 퍼블릭 IP로 들어가야 한다. 하지만 그렇게 해도 안들어가질 것이다.

왜냐하면 우리가 EC2를 생성할 때 보안그룹을 하나 붙여줄텐데. 여기서 5000번 포트를 설정해주어야 들어올 수 있다.

따라서 사용자 지정 TCP 포트 5000 그리고 0.0.0.0/0으로 모두가 들어올 수 있도록 설정해주면 비로소 들어올 수 있다.

 

여기까지는 순조로웠는데...

ELB를 연결하면서 오류가 발생했다. ELB란 elastic load balancer였던가? 우리의 서버가 한대라면, 수 많은 트래픽에 과부하가 걸릴 수 있다. 따라서 여러 서버를 만들고(TG) 거기로 분산시켜주는 역할을 하는 것이 ELB의 역할이다.

 

따라서 먼저 컴퓨터들이 서버로 바로 연결되는 것이 아니라 우리가 지정해놓은 특정 포트로 먼저 연결이 된다.

80번 포트라고 가정한다면, 80번 포트로 들어오면 그걸 다시 5000번 포트로 넘겨주는 것이다. 

 

ELB에도 각 보안그룹을 지정해주어야 한다. 그리고 여기에는 굳이 5000번 포트를 줄 필요가 없이 80번 포트로 설정해두었다면 80번 포트만 설정해두고 서버에는 80번 포트는 설정해둘 필요 없이 5000번 포트만 설정하면 된다.

 

ELB에도 보안그룹 따로 서버에도 보안그룹 따로 연결하고, ELB에는 80번 포트만, 서버에는 5000번 포트만 연결하면 된다.

 

이 부분을 스파르타 강의에서는 대상그룹을 먼저 안만들고, 로드밸런서를 만들면서 동시에 대상그룹을 만드는 작업을 진행하면서 자세한 설명이 없어가지고.. 이 부분에서 3시간동안 삽질을 했다.. 

 

여기서 TG는 대상그룹을 의미한다. 여러대의 서버를 하나의 그룹으로 묶어 관리하는 것이다. 방금까지는 한개의 EC2인스턴스만 대상그룹으로 설정해주었다. 그리고 대상그룹을 만들 때 포트 번호를 5000번으로 설정해주어야 한다.

 

수동추가

아까 처럼 직접 하나의 인스턴스를 더 생성하고 여기 대상그룹에 추가하자. 

근데 이건 health status가 unhealthy로 되어있다.이유는 이 인스턴스는 아직 켜지지 않았기 때문이다. 

따라서 키페어로 접근하고 거기서 다시 아까와 같이 처음부터 모든걸 다 받고 서버를 실행시키면

이렇게 변한다.

 

자동추가

근데 인스턴스가 시시각각 필요하고, 또 안필요할 때도 있다. 따라서 자동으로 추가되는 것이 좀더 유연할 것이다.

이를 하기 위해 먼저 img라는 걸 만들어줘야하는데 뭔가 틀 같은 느낌이다. 

 

인스턴스에 오른쪽 마우스 클릭 -> 이미지 템플릿 생성? 클릭 > 이름 정해주고 생성,

 

이제 auto scale을 생성해줘야 한다.

 

이름, AMI에서 아까 만든 img 클릭, 인스턴스 유형에서 t2.micro 클릭,  보안그룹 전 인스턴스와 동일한 것 선택, 키 페어 기존 것 선택 생성확인

 

아직 끝난 것이 아니다.

 

auto 스케일링 그룹을 구성을 해줘야한다.

메인 구경 - EC2 왼쪽 메뉴 > Auto Scaling > Auto Scaling 그룹 > 시작 템플릿 또는 구성 선택 - 시작 구성으로 전환 클릭 > 좀 전에 만든 auto scale 선택 > vpc 선택(기존 것 하나) > 서브넷(아무거나 두개) 선택 > 로드 밸런서 기존 것에서 선택 > 나머지 다 넘김 끝

 

이제 새로 생긴 인스턴스를 다시 키페어를 사용해서 들어가면 우리가 좀 전에 수동으로 인스턴스를 생성했을 때와는 달리 기존 파일들이 다 담겨있따. 이것도 nohup python app.py & 으로 백그라운드에서 실행시켜주면 잘 health status도 바뀌는 것을 확인할 수 있따.

 

하나는 수동, 하나는 자동으로 만들었다.

 

 

2개가 필요하다면 scale구성에서  최소 용량을 2개로 늘리면 된다. 하지만 우리가 직접 python을 실행시켜줘야하는 번거로움이 있다. 이번에는 더 간단한 방법을 알아보자.