1. IAM 권한 추가

2. github와 파이참 연동

 

3. 백엔드 코드 application.py 

import boto3
from flask import Flask, render_template, request, jsonify
from flask_cors import CORS
import os

application = Flask(__name__)
cors = CORS(application, resources={r"/*": {"origins": "*"}})

@application.route('/')
def main():
    return render_template("index.html")

@application.route('/fileupload', methods=['POST'])
def file_upload():
    file = request.files['file']
    s3 = boto3.client('s3',
                      aws_access_key_id=os.environ["AWS_ACCESS_KEY_ID"],
                      aws_secret_access_key=os.environ["AWS_SECRET_ACCESS_KEY"]
                      )
    s3.put_object(
        ACL="public-read",
        Bucket=os.environ["BUCKET_NAME"],
        Body=file,
        Key=file.filename,
        ContentType=file.content_type
    )
    return jsonify({'result': 'success'})

if __name__ == '__main__':
    application.debug = True
    application.run()

 

4. github action과 연동 (settings secrets 설정)

 

 

5. 배포 스크립트 추가 ( .github/workflows/main.yml )

name: backend
on:
  push:
    branches:
      - main
jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout source code.
        uses: actions/checkout@master
        
      - name: Set up Python 3.8
        uses: actions/setup-python@v1
        with:
          python-version: "3.8"
        #패키징 deploy.zip으로
      - name: Generate deployment package
        run: zip -r deploy.zip . -x '*.git*'

      - name: Get timestamp
        uses: gerred/actions/current-time@master
        id: current-time

      - name: Run string replace
        uses: frabert/replace-string-action@master
        id: format-time
        with:
          pattern: '[:\.]+'
          string: "${{ steps.current-time.outputs.time }}"
          replace-with: '-'
          flags: 'g'

      - name: Deploy to EB
        uses: einaregilsson/beanstalk-deploy@v16
        with:
          aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          application_name: python-app
          environment_name: Pythonapp-env
          version_label: "python-${{ steps.format-time.outputs.replaced }}"
          region: ap-northeast-2
          deployment_package: deploy.zip

**** 맨아래 application_name, environment_name 설정 참조 위치

6. EB에 환경변수 설정

  • EB에 환경변수 설정 - 구성 > 소프트웨어 수정 > 환경속성 

 

7. EB에 배포를 위한 준비

EB 같이 클라우드에서 관리해주는 서비스들은 배포 규칙이 있어요.

파이썬 파일은 EB에서 실행될 파이썬 파일명은 application.py 입니다.
라이브러리 모음은 기존에 pip 로 라이브러리를 설치했던 부분을 EB에서는
 requirements.txt 파일을 만들어서 배포합니다.

배포 규칙 참고문서 :  https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/create-deploy-python-flask.html

  • 라이브러리 모음 파일 - requirements.txt
이 부분은 이전에 EC2에 배포할때는
pip install flask boto3 라이브러리를 수동으로 설치해 주었지만,
EB라는 서비스에서 라이브러리 설치도 알아서 해요
그래서 설치할 라이브러리 목록을 만들고 리파지토리에 포함시켜주어야 해요.
#터미널에서 실행
pip freeze > requirements.txt

requirements.txt 생성 됨

  • 라이브러리 추가
    • 터미널에서 명령어로 추가해도 되고 
    • 파이참 라이브러리 추가 file- setting - interpreter로 추가해도 됨
#터미널 명령어로 추가할 경우
pip install boto3 flask flask_cors

라이브러리 추가 후 pip freeze > requirements.txt 한번 더 실행해 주면 requirements.txt 파일에 설정 추가 됨

 

8. Commit하고 push하면 배포 됨

 

9. 프론트 & 백엔드 연동

  • 프론트 코드
#EB_URL 부분에 EB의 URL로 바꿔줌
function save() {
            var form_data = new FormData($('#upload-file')[0]);
            $.ajax({
                type: 'POST',
                url: '{EB URL}/fileupload',
                data: form_data,
                processData: false,
                contentType: false,
                success: function (data) {
                    alert("파일이 업로드 되었습니다!!");
                },
            });
        }

PUSH 후 CloudFront 주소로 접속해 페이지 소스 보기로 연동된거 확인

 

Mixed Content error 발생 시 확인

2022.04.26 - [프로그래밍/개발이슈] - Mixed Content error

 

 

*참고 문서 : https://www.notion.so/AWS-2-8404da0631b74b129bfbc8ecfda08abd

 

'프로그래밍 > Git' 카테고리의 다른 글

Github Action을 이용한 배포 자동화  (0) 2022.04.26
Git 이란?  (0) 2022.04.23
gitignore란?  (0) 2022.04.23

+ Recent posts