지난 번에 AWS의 ElasticBeanstalk를 통한 배포를 압축파일을 통해서 해봤다.
이번에는 eb cli ( Elastic Beanstalk Command Line Interface ) 를 통해서 배포를 진행해본다.
[ 주요용어 ]
애플리케이션( Application ) : 다수의 배포 환경을 담는 컨테이너 ( aws의 elastic beanstalk 내에 존재 )
배포환경( Environment ) : 애플리케이션 배포환경 ( web server env / worker env )
애플리케이션 버전( Application Version ) : 애플리케이션 배포 히스토리, 원할때 배포 버전을 변경할 수 있다.
[ Django 배포 환경 준비 ]
settings / requirements 분기 확인
=> settings
- common.py
- dev.py( 개발용 )
- prod.py( 배포용 )
reqs
- common.txt
- dev.txt (개발용)
- prod.txt (배포용)
.ebextenstions/options.config 파일 확인( eb 설정 파일 )
container_commands:
01_migrate:
command: "python3 manage.py migrate"
02_collectstatic:
command: "python3 manage.py collectstatic --noinput"
03_chmod_sqlite:
command: "chmod 666 db.sqlite3"
04_create_superuser:
command: "python3 create_superuser.py"
option_settings:
aws:elasticbeanstalk:application:environment:
DJANGO_SETTINGS_MODULE: 프로젝트.settings.prod
aws:elasticbeanstalk:container:python:
WSGIPath: 프로젝트/wsgi.py
aws:elasticbeanstalk:container:python:staticfiles:
"/static/": "staticfiles/"
ebcli 설치
#> pip3 install --upgrade awsebcli ( 최신버전 설치를 위한 --upgrade 옵션 )
EBCLI 를 사용하기 위해서는 ACCESS/SECRET 키가 필요하다
관리자의 권한으로 사용하기엔 위험성이 존재하므로, AWS의 IAM유저를 생성해서 그 유저에게 권한을 주도록 한다
IAM 유저 생성
AWS 콘솔에서 IAM을 선택해서 들어간다
우선 그룹을 하나 생성해준다

그룹이름을 지정하고, AWSElasticBeanstalkFullAccess 를 선택하고 그룹생성을 한다
그 다음 유저 생성을 클릭하고, 사용자 이름을 지정한 다음

이 부분을 체크하고 다음으로 넘어가서 권한 부분에서 방금 전에 만들었던 그룹을 체크하고 생성한다.
유저를 생성하면 ACCESS_KEY와 SECRET_KEY를 알려주는데 한쪽에 따로 메모해두자
eb cli를 위해서 이 두개의 키가 필요하다
EBCLI 키 등록
~/.aws/config 경로로 파일을 만든다
그리고 그 안에
[ profile eb-cli ]
aws_access_key_id = ACESS_KEY
aws_secret_access_key = SECRET_KEY
이런 식으로 작성해준다.
eb 명령어 사용법
그냥 eb만 치면 명령어 목록을 볼 수 있다.
eb init
eb 프로젝트 초기화 및 AWS에 새 EB 애플리케이션 생성
eb create 환경명
새 환경 생성 및 배포
eb deploy
변동사항 발생 시 재배포
eb use 환경명
환경이 여러개일때, 사용할 환경 선택
eb status
환경 상태 출력
eb terminate [환경명]
환경 종료
이렇게 하면 EBCLI를 사용해서 배포가 가능하다
압축파일을 사용할 때와 마찬가지로, 개발환경에서의 가상환경이 포함되면 에러가 발생하니 주의해야한다
프로젝트를 생성할 때, 전체 프로젝트의 상위 경로에 가상환경을 만드는 습관을 들여야 한다.
171229 +) WSGIPath에러가 나고 해결책이 보이지 않을때는 eb config를 통해서 직접 경로를 설정해주는 방법도 있다.
이 모든 내용은 AskDjango 강의를 통해서 배웠습니다 감사합니다.
댓글
댓글 쓰기