AWS elasticbeanstalk 에 flask 배포하기 -1

김재영·2021년 4월 7일
0
개발환경: mac os

1. flask 사용 이유

플라스크는 파이썬언어로 쓰여진 미니멀한 웹 프레임워크 입니다.

장고는 ORM 기능이 내장되어 SQL 코드 없이 서버에서 생산적인 코드 처리가 가능합니다. 대신 ORM 기능을 사용하기 위해 model 에 대한 정의, db 에 migration을 하는 등 서버가 복잡하고 무거워 지는 단점이 있습니다. 특히 디버깅시 짜여진 아키텍처 내에서 커스터마이징을 해야하기 때문에 생각보다 공부해야 할 것이 많았습니다.

flask는 ORM 을 다루는 내부 로직이 따로 있지 않습니다. SQL 처리를 따로 해주어야 한다는 번거로움이 있지만 코드 커스터마이징이 쉽고 디버깅시 문제를 다양한 방법으로 해결할 수 있었습니다.

결론: 빠른 개발과 단순한 rest api 배포용으로는 flask 가 적합하다고 판단하였습니다.

2. elasticbeanstalk ?


elastic beans talk을 사용하면 어플리케이션의 생성과 배포를 위해 필요한 리소스를 알아서 준비해 줍니다(프로비저닝). 리소스는 하나의 로드밸런스와 ec2로 구성된 오토 스케일링 그룹을 포함합니다. 코드를 업로드 하기만 하면 자동으로 이러한 환경을 설정해 주기 때문에 애플리케이션 서버를 효율적으로 관리 할 수 있습니다.

*auto scaling 이란 자동으로 스케일을 조절해주는 기능입니다. 
서버 부하(load)에 따라 load balancer는 스케일을 조절하여 
자동으로 ec2를 축소하거나 확장해줍니다

3. elasticbeanstalk 를 이용하여 flask배포

  1. flask 앱 생성
  2. aws eb cli 를 사용하여 elastic beanstalk 환경 생성 및 flask 앱 배포

1. Flask 앱 생성

1.1 우선 플라스크 어플리케이션 폴더를 만들어야 합니다.

저는 크롤링용 서버로 플라스크 앱을 사용하기 때문에 crawling_inner_api 로 폴더이름을 정했습니다.

$mkdir eb-flask-tutorial(사용하고자 하는 폴더 이름을 입력하면 됩니다.)
$pip install flask

1.2 해당하는 폴더에 application.py 라는 이름으로 파이썬 파일을 만들어 줍니다.(파일이름 꼭 application.py 로 맞춰 주세요)
(EB 에서 application 이라는 이름을 기본값으로 호출하기 때문에)

~/crawling_inner_api/application.py

from flask import Flask,request
###Use cors
from flask_cors import CORS
import json
import datetime
from util.data_util import *

SCHEMA_VERSION = "v1.0.0"

## 플라스크 앱 이름은 application 으로 통일해주셔야 합니다
application = Flask(__name__)
CORS(application)
application.config['JSON_AS_ASCII'] = False

@application.route('/')
def index():
    return json.dumps({'name': 'kjy',
                       'email': 'wodud6349@gmail.com'})

# run the app.
if __name__ == "__main__":
    # Setting debug to True enables debug output. This line should be
    # removed before deploying a production app.
    application.debug = True
    application.run()

1.3 test

터미널 창에서 python application.py 실행 한 후 
로컬에서 서버가 잘 작동되는지 확인


local 에서 flask 서버가 잘 작동되는지 확인함

2. aws eb 에 배포하기

2.1 플라스크 어플리케이션을 만들어 졌으면 배포를 위해서는 해당 어플리케이션의 라이브러리를 eb 에서도 설치 할 수 있도록 리스트를 열거해주어야 합니다. 패키지 리스트를 requirementx.txt 에 저장합니다

pip freeze > requirements.txt

2.2 eb 환경 생성

$pip install awsebcli

$eb init

eb cli 를 실행하면 다음과 같은 화면이 나옵니다
(맨처음region 선택. 한국은 10)ap-northeast-2 선택)
그다음으로 계정인증을 해줘야함 access-id , secret-key 넣어달라고 하는데 
이건 aws 계정 만들때 생성된 key 값을 넣어주시면 됩니다.  

입력하고 나면 밑에서 application 이름 설정, python 환경 셋팅 
code-commit 에는 no 해주고 나중에 ssh 접속해서 code 수정할거기 때문에 
ssh 연결은 yes 

eb 환경에대한 셋팅이 완료되었으니 이제 해당 설정의 환경 만들어주면 끝

$eb create crawling-inner-api

위에서 elastic beanstalk 구조 설명한 것과 같이
elastic beanstalk 는 생성되면서 load balancer , auto sacaling group, ec2-instance, security group 등의 자원을 프로비저닝 해주는걸 알 수 있습니다.

4.Debugging

elastic beanstalk 는 배포시 log 를 남기는데 이 log 를 통해 배포시 문제점을 발견할 수 있음. 저같은 경우도 다음과 같이 degraded 로 에러가 발생하였습니다.

aws console > elastic beanstalk > 환경 > 로그 에서 디버깅 가능

0개의 댓글