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
- 라이브러리 추가
- 터미널에서 명령어로 추가해도 되고
- 파이참 라이브러리 추가 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 |