Skip to content

Deploy a Flask app on Amazon ElasticBeanstalk

Amazon ElasticBeanstalk로 Python Flask App 배포 실습

이번 실습은 Amazon Elastic Beanstalk을 통해 웹앱을 구성 해보는 실습입니다. AWS에서 가장 대표적인 PaaS인 ElasticBeanstalk를 운영하는 방법과 코드 배포 방법을 이해할 수 있습니다.

eb-flask-todo-architecture

Time to Complete: 0.5 hours

Tutorial Prereqs:

$ pip install awsebcli --upgrade --user
$ eb --version
EB CLI 3.20.3 (Python 3.7.1)

1. ElasticBeanstalk 구성

Amazon Elastic Beanstalk

Sample Code

eb-flask-todo-demo-webpage

Flask sample

$ git clone https://github.com/cloudacode/FlaskIntroduction
$ cd FlaskIntroduction
# 이번 실습에서는 build 자동화를 연동을 하지 않으며 Warning 메시지를 피하기 위해 buildspec 파일 삭제
$ rm -rf buildspec.yml

EB Application 및 environment 배포

$ eb init -p python-3.7 flask-todo-demo --region ap-northeast-2
Application flask-todo has been created.

EB Environment 배포

$ eb create flask-todo-demo --vpc.elbpublic

eb-flask-todo-demo-output

만약 특정 VPC에 배포를 하고 싶은 경우는 vpc 옵션을 추가적으로 부여

$ eb create flask-todo-demo -r ap-northeast-2 --vpc.id <vpc-id> \
--vpc.elbsubnets <subnet-01,subnet-02> --vpc.ec2subnets <subnet-01,subnet-02> \
--vpc.publicip --vpc.elbpublic

만약 Database 까지 함께 배포를 하고 싶은 경우는 -db 옵션을 추가

Warn

ElasticBeanstalk를 생성하면서 DB를 함께 생성하는 경우 추후에 EB 삭제시 DB도 함께 삭제가 되므로 RDS는 별도로 생성 해서 연동 하는 것을 추천

(옵션) EB 환경변수 설정

추후 EB에 환경 변수를 함께 전달 하고 싶은 경우

$ mkdir -p .ebextensions
$ cat <<'EOF' > .ebextensions/options.config
option_settings:
  - option_name: DB_HOST
    value: eb-rds
  - option_name: DB_NAME
    value: todo
EOF

EB 배포 확인 및 로그

Elastic Beanstalk 환경 관리 CLI

# 로그 확인
$ eb logs
# EB 상태 확인
$ eb status
Environment details for: flask-todo-demo
  Application name: flask-todo-demo
  Region: ap-northeast-2
  Deployed Version: app-a696-221024_235944023808
  Environment ID: e-mdcmmemta3
  Platform: arn:aws:elasticbeanstalk:ap-northeast-2::platform/Python 3.7 running on 64bit Amazon Linux 2/3.4.0
  Tier: WebServer-Standard-1.0
  CNAME: flask-todo-demo.eba-3htsmntp.ap-northeast-2.elasticbeanstalk.com
  Updated: 2022-10-25 00:04:06.247000+00:00
  Status: Ready
  Health: Green

해당 CNAME을 브라우저에서 접속하여 정상적으로 접근 되는지 확인

2. 애플리케이션 수정 및 EB 재배포

코드 수정

FlaskIntroduction/static/css/main.css 에 background-color를 lightblue로 변경

body, html {
    margin: 0;
    font-family: sans-serif;
    background-color: lightblue;
}

git 에 수정 내역 커밋

$ git add static/css/main.css
$ git commit -m "change bg to lightblue"

EB 재배포

$ eb deploy

eb-flask-todo-demo-webpage-updated

3. 환경 삭제

Elastic Beanstalk Environments 콘솔에서 환경 삭제

혹은

$ eb terminate

🎉 Congratulations, you have completed Deploying a Flask Application to Elastic Beanstalk

이 글이 유용하였다면 ⭐ Star를, 💬 1:1 질문이나 기술 관련 문의가 필요하신 분들은 클라우드어코드 카카오톡 채널 추가 부탁드립니다.🤗