장고 - 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
    3
    option_settings:
    aws:elasticbeanstalk:container:python:
    WSGIPath: config/wsgi.py

5. settings.py에 배포 관련 설정 진행

  • 경로 : config(프로젝트) > settings.py
    1
    2
    3
    DEBUG = 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 실행하면 새로운 코드로 업데이트된다.