Today I Learned
4. 백엔드 구성해보기 - EC2 + ELB
1. ELB
Elastic Load Balancing(ELB)은 둘 이상의 가용 영역에서 EC2 인스턴스, 컨테이너, IP 주소 등 여러 대상에 걸쳐 수신되는 트래픽을 자동으로 분산합니다. 등록된 대상의 상태를 모니터링하면서 상태가 양호한 대상으로만 트래픽을 라우팅합니다.
ELB는 여러대의 EC2를 묶어서 사용하기 위한 서비스이다. 현업에서는 EC2한대만으로 서버를 구성하지 않고 여러대로 구성을 하는데 이때 트래픽(Load)를 분산(Balancing)해주는 역할을 한다. 클라우드를 사용하지 않을때도 LB(로드발란서)를 구입해서 사용했다고 한다. 클라우드 환경에서는 AWS가 제공하는 ELB서비스를 이용한다.
내가 만든 서비스에 트래픽이 몰려 EC2의 성능이 부족한 경우가 발생할 수 있다. (참... 행복한 상상이다) 이때, 인스턴스를 추가하여 해결 할 수 있다. 그런데 갑자기 CPU하나 메모리 하나였던 내 인스턴스를 CPU 10개 메모리 10개로 늘리려면 시간이 많이 필요할 것이다. 그러면 서비스를 못하게되고 물들어올 때 노를 못 젓고 가정이 무너지고 나라가 무너지고...
EC2앞에 ELB를 연결하면 위와 같은 문제가 해결된다.
원래는 도메인의 EC2에 IP를 연결하는데, 이렇게 되면 도메인에 ELB의 엔드 포인트를 연결하여 트래픽에 따라 EC2의 성능과 개수를 실시간을 대응할 수 있다.
2. ELB사용법
먼저
이녀석을
이렇게 해제하고 진행하면 스파르타의 강의와 같은 버전으로 진행할 수 있다.
우선 다음과 같이 접속하자.
EC2에 접속 > 로드밸런서 > Load Balancer 생성 > Application Load Balancer 생성
1. Load Balancer 구성
기본구성은 이름, 체계, ip 주소 유형이 있다. 이름은 규칙대로 정하시면 된다. 체계에서 인터넷 경계는 외부의 접근을 허용한다라는 것을 나타내고, 내부는 외부와 상관없이 내부 서비스들 끼리 사용하겠다는 것이다. 외부에 체크해주자. 마지막으로 IP 주소 유형은 ipv4를 유지하시면 된다.
리스너에는 어떤 프로토콜을 사용하여 접근하게 할 것인지를 설정하는 것이다. HTTP로 선택하자.
VPC는 이전에 언급한 default VPC를 선택하면 된다. 가용영역이 좀 어려운데, Zone을 선택하는 것이다. northeast의 a,b,c,d 네개의 Zone이 있는데 보통 a,c나 b,d이렇게 두개를 크로스해서 선택한다고 한다. a,c를 선택하자. 이렇게 설정하면, 하나의 Zone에 문제가 생겼다면, 다른 Zone의 EC2에 failover할 수 있게 만드는 기능이다.
2. 보안 설정 구성
보안 설정 구성으로 넘어가면 HTTPS를 사용하라고 나오는데, 일단은 HTTP로 구성해보자.
3. 보안 그룹 구성
보안 그룹 구성으로 넘어가서 새 보안 그룹을 생성 해주자. 포트는 80, 소스는 0.0.0.0/0으로 설정하여, 외부의 어떤 대역이든 80포트로 접속이 가능하게 하자.
4. 라우팅 구성
다음은 라우팅 구성이다. 라우팅 구성은 ELB에서 EC2로 연결되는 부분에 대해 설정하는 부분이다.
먼저 대상그룹을 생성해야한다. ELB에 EC2 instance를 연결하기 위해서는 먼저 그룹을 만들어 두고, 그룹에 EC2 instance 추가하는 방식을 사용한다. 만약 어떤 대상그룹에 트래픽이 과도하게 몰리면, 대상그룹에 EC2 instance를 추가하고, 트래픽이 줄어들면 EC2 instance를 삭제하여 사용한다.
대상 유형에는 EC2를 대상으로 하기 때문에 instance를 선택한다. 우리가 만든 EC2에서 사용할 포트는 5000번이기 때문에 프로토콜은 HTTP, 포트는 5000을 선택해주자.
상태검사는 보통 헬스체크라고 하는데, 연결된 EC2 instance의 상태를 계속 검사해서
만약에 EC2에 문제가 있으면 해당 EC2에는 트래픽을 보내지 않게 한다.
5. 대상 등록
다음은 대상등록이다. 현재 생성된 인스턴스 중에 ELB와 연결할 대상을 선택하는 부분이다. 하단의 인스턴스에서 원하는 인스턴스를 선택하고 등록된 항목에 추가를 누르면 된다.
6. 검토
이제 검토를 한번 해준뒤 생성하면 된다.
LB의 상태가 "프로비저닝 중"에서 "활성"으로 넘어오면 정상작동
DNS를 주소창에 입력하면 EC2 인스턴스의 그것에 연결된다!
AWS의 EC2에서 로드밸런싱의 대상그룹을 선택하여 상태를 확인할 수 있다.
EC2 하나를 더 추가하기 위한 가장 간단한 방법은 이전에 작업했던것처럼 EC2를 만들어서 수동으로 추가하는 것이다. 대상그룹에서 인스턴스를 추가해주면 된다.
3. 자동으로 EC2 추가하기
근데 생각해보면 EC2를 수동으로 추가할거면, 내가 트래픽이 몰릴 때 마다 AWS에 접속하여 EC2를 추가해야하는데, 이건 너무 개발자스럽지 못하다. 자동으로 추가하는 방법을 배워보자. "이미지"를 만들면 된다.
1. AMI 만들기
EC2를 자동생성 해서 추가되게 만들려면 우리가 EC2 생성할때 지정한 이미지 처럼 베이스 이미지가 필요하다. 내가 EC2에서 운영하고 있던 파일들을 그대로 이미지 한 부로 복사하여 갖다 쓰는 개념이다. 내가 추가하고자 하는 EC2의 디스크를 이용해 베이스 이미지를 만드는 방법은 다음과 같다.
원하는 인스턴스 우클릭 > 이미지 > 이미지 생성 > 이름 입력 후 생성 > 좌측의 이미지 > AMI > 이미지 확인
2. Auto Scaling 시작구성 만들기
Auto Scaling은 말 그대로 자동으로 Scaling을 한다는 말이다. 내 서비스에 걸리는 로드를 처리하는 대 사용되는 정확한 수의 Amazon EC2 인스턴스를 유지할 수 있다. Auto Scaling 그룹에서 EC2 인스턴스 모음을 생성하고, 각 Auto Scaling 그룹에서 최대/최소 인스턴스 수를 지정할 수 있다.
좌측의 Auto Scaling > 시작구성 > 시작구성생성
- 이름 - 원하는 이름
- AMI - 나의 AMI (내가 만든 AMI 선택)
- 인스턴스 유형 선택 - t2.micro (1 vCPU, 1 GiB, EBS 전용)
- 보안그룹 - 기존 보안 그룹 선택, launch-wizard-1, 인스턴스 보안에서 확인
- 키페어 - 기존 키 페어
시작구성생성 클릭
3. Auto Scaling 그룹 만들기
좌측의 Auto Scaling > Auto Scaling 그룹 > Auto Scaling 그룹 생성
- 이름 - 아무거나
- 시작구성으로 변경, python-auto-scale 선택 후 다음 클릭
- vpc선택, 서브넷 a,c선택 후 다음 클릭
- 기존로드 밸런스에 연결, 내 ELB에 연결 후 다음 클릭
- 조정정책에 EC2가 늘어날 조건을 지정하는데 지금은 없음 하고 다음 클릭
- 알림, 태그 다음 다음하고 생성
좌측의 대상그룹에서 인스턴스 헬스체크 가능
'Sparta' 카테고리의 다른 글
[Sparta] 17-1. AWS RDS (0) | 2021.10.08 |
---|---|
[Sparta] 16. ElasticBeanstalk (0) | 2021.10.07 |
[Sparta] 15-3. EC2 백엔드 (0) | 2021.10.07 |
[Sparta] 15-2. 네트워크 (0) | 2021.10.07 |
[Sparta] 15-1. GitHub Actions (0) | 2021.10.07 |