우선 ALB 를 생성할 때
ALB 로 포트포워딩하기
를 참고하여 8000번으로 포트포워딩을 해준다. 타겟 그룹을 만들 때 포트 번호를 지정해주면 된다. Django 의 포트는 디폴트 8000번이므로 8000번 포트를 열어준다.
설정을 해줬으면 내 프로젝트의 settings.py 에
ALLOWED_HOSTS = ['*']
을 추가해준다. 모든 호스트에서 프로젝트에 접근하는 것을 허용한다는 의미이다. 특정 IP 만 접근할 수 있도록 허용해줄 수도 있다. 파일 저장해준 다음 내 브랜치에 커밋한 뒤, 내 인스턴스에 접근한다.
키 페어가 있는 폴더로 cd 한 다음 키 페어의 권한을 chmod 400 "키_페어.pem"
로 바꿔준 뒤 ssh -i "키_페어.pem" ubuntu@e<DNS 주소 이름>
(예 : ssh -i "gdg-web1.pem" ubuntu@ec2-54-176-70-197.us-west-1.compute.amazonaws.com
) 로 접속해주면 된다.
그러면 우분투 콘솔창이 나오는데, 이때 프로젝트 폴더로 cd 한 다음 아래의 명령어를 실행시켜준다.
sudo apt update
sudo apt upgrade
sudo apt install -y python-is-python3 # python 명령어를 python3로 자동 연결
sudo apt install python3-venv # python의 venv 모듈은 가상 환경을 생성하기 위해 ensurepip를 사용해 기본 pip 설치를 시도하는데, 이때 python3-venv 패키지가 설치되지 않은 경우 ensurepip가 동작하지 않아 가상 환경 생성이 실패
python -m venv venv
source venv/bin/activate # 가상 환경 활성화
pip install -r requirements.txt # 필요한 패키지 설치
python manage.py runserver 0:8000 # 이때 0:8000 을 명시하지 않으면 localhost - 127.0.0.1 로 서버가 실행되기 떄문에 주의
이러고 ALB 의 DNS 주소로 가면 아래와 같이 잘 배포된 것을 볼 수 있다.(UI 가 이상한 건 내가 트래픽 분산되는지 보겠다고 한쪽 서버를 꺼서 그렇다)
트래픽 분산이 된 것을 보고 싶다면 CloudWatch 의 지표(metrics) > 모든 지표 > 찾아보기 > ApplicationELB > AvailabilityZone, TargetGroup
에서 내 가용 영역을 체크하고 그래프를 확인해보거나
ApacheBench 명령어로 트래픽을 생성해 평균 응답 시간이 얼마나 걸리는지 비교해보면 된다.
ab -n 100 -c 10 http://<로드밸런서-DNS>
결과
275408.us-west-1.elb.amazonaws.com/
This is ApacheBench, Version 2.3 <$Revision: 1913912 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking gdg-alb2-1886275408.us-west-1.elb.amazonaws.com (be patient).....done
Server Software: WSGIServer/0.2
Server Hostname: gdg-alb2-1886275408.us-west-1.elb.amazonaws.com
Server Port: 80
Document Path: /
Document Length: 2 bytes
Concurrency Level: 10
Time taken for tests: 0.894 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 34900 bytes
HTML transferred: 200 bytes
Requests per second: 111.80 [#/sec] (mean)
Time per request: 89.449 [ms] (mean)
Time per request: 8.945 [ms] (mean, across all concurrent requests)
Transfer rate: 38.10 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 16 21 3.0 20 29
Processing: 26 60 19.4 69 98
Waiting: 23 58 19.6 67 97
Total: 45 81 19.6 91 117
Percentage of the requests served within a certain time (ms)
50% 91
66% 93
75% 94
80% 95
90% 97
95% 101
98% 112
99% 117
100% 117 (longest request)