AWS 사양
- Front End : Route53, ACM, S3, CloudFront
- Back End : S3, EC2, AutoScaling Group, CodeDeploy(Blue-Green)
- Machin Learning : S3, EC2, CodeDeploy
1️⃣ GitHub에 코드 commit & push(main 브랜치) → GitHub Actions CI 실행
2️⃣ Flask 프로젝트 zip 압축 후 S3 버킷에 업로드
3️⃣ CodeDeploy를 통해 EC2에 배포
4️⃣ appspec.yml과 scripts로 Flask 애플리케이션 실행
🗂️ 디렉토리 구조
├─.github
│ ├─ workflows/
│ │ └─ deploy.yml/
requirements.txt에 정의된 Python 패키지를 설치name: BonBon Flask to AWS EC2
# main 브랜치에 push 발생 시
on:
push:
branches: [ main ]
# 환경변수 지정
env:
PROJECT_NAME: bonbon-ml
BUCKET_NAME: bonbon-ml-bucket
CODE_DEPLOY_APP_NAME: bonbon-dev
DEPLOYMENT_GROUP_NAME: bonbon-ml-dev
AWS_REGION: ap-northeast-2
jobs:
deploy:
runs-on: ubuntu-latest
steps:
# 1. 기본 체크아웃
- name: Checkout
uses: actions/checkout@v2
# python 환경 설정
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
# 가상환경(venv) 생성, requirements.txt에 정의된 Python 패키지를 설치
- name: Install dependencies
run: |
python -m venv venv
. venv/bin/activate
pip install -r venus/requirements.txt
# Flask 애플리케이션 파일을 zip 파일로 압축
- name: Make Zip File
run: |
cd venus
zip -qq -r $GITHUB_SHA.zip . -x "*.git*" -x "venv/*"
shell: bash
# AWS 자격증명 구성 및 AWS CLI 설치
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{secrets.AWS_SECRET_KEY_ID}}
aws-region: ${{env.AWS_REGION}}
# S3에 업로드
- name: Upload to S3
run: |
aws s3 cp --region ap-northeast-2 venus/$GITHUB_SHA.zip s3://$BUCKET_NAME/$PROJECT_NAME/$GITHUB_SHA.zip
# CodeDeploy를 이용해 EC2 인스턴스에 배포 -> S3에 업로드된 파일을 가져와서 실행시킴
- name: Code Deploy To EC2 instance
run: |
aws deploy create-deployment \
--application-name ${{ env.CODE_DEPLOY_APP_NAME }} \
--deployment-config-name CodeDeployDefault.AllAtOnce \
--deployment-group-name ${{ env.DEPLOYMENT_GROUP_NAME }} \
--s3-location bucket=$BUCKET_NAME,key=$PROJECT_NAME/$GITHUB_SHA.zip,bundleType=zip
Succeeded 확인
끝!
