본문 바로가기

Develop

Django app AWS EB(elasticbeanstalk) 배포해보기

안녕하세요 물개발자입니다.

 

google trend of django

google trend에 django를 찾아보면 위와 같은 검색어 흐름을 볼 수 있습니다. Django에 관심을 가지는 개발자 숫자가 많아지고 있음을 알 수 있습니다. 그리고 최근에 제가 근무하는 회사 지인이 AWS 환경에서 django 서비스를 운용해보고자 하는 경우가 있어 이와 같이 문서로 정리해봅니다.

 

다행히 aws에서 아래와 같이 친절한 한글 문서를 제공하고 있으니 이것을 기반으로 하겠습니다. 

 

Django 애플리케이션을 Elastic Beanstalk에 배포

https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/create-deploy-python-django.html

 

https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/create-deploy-python-django.html

Django 애플리케이션을 Elastic Beanstalk에 배포

docs.aws.amazon.com


기억하면 좋은 것들

requirements.txt

pip freeze > requirements.txt

EB는 관리형 서비스로 내부적으로 EC2를 생성을 합니다. 그리고 개발자가 개발한 django 앱을 실행하는데요, 실행에 필요한 패키지는 requirements.txt 에 기록된 패키지명과 버전이 기준이 됩니다. 그러니 개발과정에서 추가되거나 버젼이 변경이 되는 경우 반드시 requirements.txt 파일에 기록할 필요가 있습니다.

WSGIPath

.ebextensions/django.config

option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: ebdjango/wsgi.py

 

문서에서는 ebdjango/wsgi.py로 적혀있습니다만, 본인의 프로젝트명에 따라서 변경해 주어야 합니다. manage.py의 위치를 기준으로 wsgi.py의 상대 경로를 지정해 주면 됩니다.

 

예를 들어 저와 같이 아래의 구조를 가지고 있다면 main/wsgi.py 가 맞습니다.

$ tree
.
├── main
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

 eb init

eb init -p python-3.6 django-tutorial

You have not yet set up your credentials or your credentials are incorrect 
You must provide your credentials.
(aws-access-id): 

 

이와 같이 aws-access-id의 입력을 요구하고 있습니다. 아래의 링크를 통해서 profile 생성할 수 있습니다.

https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/create-deploy-python-django.html

 

https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/create-deploy-python-django.html

Django 애플리케이션을 Elastic Beanstalk에 배포

docs.aws.amazon.com

 

그리고 만들어진 프로필 이름을 명시하면 계속 진행할 수 있습니다. 명령어 실행 결과 아래와 같이 region 설정이 되어있을 수 있는데요.

  default_region: us-west-2

$ cat .elasticbeanstalk/config.yml

branch-defaults:
  default:
    environment: null
global:
  application_name: django-tutorial
  branch: null
  default_ec2_keyname: null
  default_platform: python-3.6
  default_region: us-west-2
  include_git_submodules: true
  instance_profile: null
  platform_name: null
  platform_version: null
  profile: aws-profile
  repository: null
  sc: null
  workspace_type: Application

 

us-west-2는 아래 링크에서 확인할 수 있듯이 oregon 이므로 서울로 변경하고 싶다면 region 옵션도 추가해 주어야 합니다.

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html 

eb init -p python-3.6 django-tutorial --profile [프로필이름] -region ap-northeast-2

키 페어

EB 가 관리하는 EC2 자원에 접근하기 위한 키 설정 과정입니다. 이 과정을 그냥 지나치면 ssh 명령어로 접근할 수 없으니 기존에 키 페어가 있다면 사용하고 그렇지 않은 경우 새로 만들어도 문제가 되지는 않습니다. 새로 만들어진 경우 그 키는 ~/. ssh 경로에 자동으로 생기니 놀라지 않으셔도 됩니다.

 

마무리

EC2를 직접 사용하는 IAAS 방식과 EB를 활용하는 PASS 방식 모두 클라우드 자원을 이용하는 접근하는 방식입니다. 각각이 주는 장단점이 있기 때문에 절대적으로 한 방식이 옳다고 얘기하는 것은 무리가 있습니다. 하지만 AWS에서 제공하는 서비스를 쉽게 활용하고 싶고, 서버 관리에 부담이 느껴지다면 EB를 선택하는 것도 좋은 선택이 될 수 있겠습니다.

 

반응형