장고 - Elastic Beanstalk 이용한 배포
- 이번 포스트에서는 REST API를 생성한 dstagram 프로젝트를 대상으로, Elastic Beanstalk를 사용하여 배포를 진행해볼 것이다.
Elastic Beanstalk란?
- Elastic Beanstalk란 Docker 컨테이너 기반으로 애플리케이션을 쉽고 빠르게 배포하고, 운영 및 관리를 용이하게 해주는 AWS 서비스이다. (사용한 리소스만큼 비용 과금)
- 용량 프로비저닝, 로드 밸런싱, 조정, 애플리케이션 상태 모니터링에 대한 세부 정보를 자동으로 처리해준다.
- Go, Java, NET, Node.js, PHP, Python 및 Ruby에서 개발된 애플리케이션을 지원하며,
- 애플리케이션을 배포할 때, Elastic Beanstalk가 선택된 지원 가능 플랫폼 버전을 구축하고,
- Amazon EC2 인스턴스 등의 AWS 리소스를 하나 이상 프로비저닝하여 애플리케이션을 실행한다.
Elastic Beanstalk 배포 방법
1. AWS 서비스에서 IAM 계정 생성
- AWS 사이트 > IAM > [사용자] 메뉴 클릭
- 사용자 목록에서 [사용자 추가] 버튼 클릭
- 사용자 이름 입력 후, 액세스 유형으로 [프로그래밍 방식 액세스] 체크
- 권한 설정 부분에서 [그룹 생성] 버튼 클릭
- 그룹 생성 화면
- 그룹 이름 설정 및 정책 필터
- ElasticBeanstalk를 검색해 FullAccess에 체크
- 태그 추가 없이 [다음:검토] 버튼 클릭
- 전체 요약 사항 검토 후, [사용자 만들기] 버튼 클릭
- csv 파일 다운로드
2. 의존성 패키지 목록 파일 생성
$ pip freeze > requirements.txt
3. .ebextensions 폴더 생성
- 경로 : dstagram_project > .ebextensions
$ mkdir .ebextensions
4. .ebextensions 폴더에 django.config 파일 생성
- 경로 : .ebextensions > django.config
1
2
3option_settings:
aws:elasticbeanstalk:container:python:
WSGIPath: config/wsgi.py
5. settings.py에 배포 관련 설정 진행
- 경로 : config(프로젝트) > settings.py
1
2
3DEBUG = False
ALLOWED_HOSTS = ['*']
6. .gitignore 파일 생성
- 경로 : dstagram_project > .gitignore
1
2
3
4
5
6*.pyc
*~
/venv
__pycache__
db.sqlite3
.DS_Store
7. AWS CLI 설치(선택)
- 배포 자동화를 콘솔에서 처리하기 위한 목적 (여기에서는 설치하지 않을 것이다.)
$ pip install awscli
8. EB CLI 설치
$ pip install awsebcli
9. Git 초기화 및 커밋 진행
$ git init
$ git add -A .
$ git commit -m "deploy using eb"
10. eb init 명령 실행
- 기본 설정 진행(여기에선 CodeCommit 사용하지 않음)
$ eb init
- ap-northeast-2 : Asia Pacific (Seoul) 선택
- aws-access-id, aws-secret-key : IAM 계정 생성하여 다운로드한 csv 파일 참고하여 입력
- Enter Application Name : Enter 입력
- It appears you are using ~ (Y/N): Y 입력
- Select a platform version. : python3.6 선택(1번)
- Do you wish to continue with CodeCommit (Y/N) : N 입력
- Do you want to set up SSH for your instance? (Y/N) : Y 입력
- Select a keypair : 조회되는 번호 아무거나 입력
11. eb create 명령 실행하여 로드 밸런서 설정 진행
$ eb create
- Enter Environment Name : Enter 입력
- Enter DNS CNAME prefix : Enter 입력
- Select a load balancer type : application 선택(2번)
- 대기하다가, Successfully launched environment:~ 문구 확인
- 관리자 사이트 접속 안된다면,
- aws 사이트 > EC2 > 보안그룹 > CNAME 이름의 보안그룹 ID 복사
- RDS > 데이터 베이스 > VPC 보안그룹 > 인바운드 > 편집
- 포트 범위 : 5432
- 소스 : EC2에서 CNAME 이름의 보안그룹 ID 붙여넣기
12. eb open 명령 실행하여 사이트 확인
$ eb open
13. 코드 변경이 있을 시, 새로운 코드를 커밋하고, eb deploy 실행하면 새로운 코드로 업데이트된다.
Posted