[AWS] Elasticbeanstalk - GitHub Action을 이용한 자동 배포 만들기...

[AWS] Elasticbeanstalk - GitHub Action을 이용한 자동 배포 만들기...

1. IAM 권한 추가

EB (Elastic Beanstalk)를 사용해서 깃허브와 연동해 자동배포를 진행하기 위해

사용자(IAM) 에 eb 권한을 추가한다.

IAM - 사용자 - 클릭 - AdminstationAcess - AWSElascticBeanstalk 추가

2. Github Action - AWS 백엔드 배포 설정

Flask를 이용해 백엔드 배포를 진행하려 한다.

EB 로 배포를 할 때는 application.py로 파일을 만들어야 한다.(디폴트)

1. application.py

s3 = boto3.client() : AWS s3를 연결하기 위한 방법(boto3 라이브러리 이용) EB - 환경설정 필요

cors = CORS(application, resul~) : Cloudfront 주소와(프론트), EB주소(백엔드) 주소가 다르기 때문에 서버에서 모든 도메인 주소로 들어오는 걸 허용한다는 의미

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()

2. 배포 스크립트 - main.yml

경로 : .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" - 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-1 version_label: "python-${{ steps.format-time.outputs.replaced }}" region: ap-northeast-2 deployment_package: deploy.zip

3. requirement.txt - 설치 구성 라이브러리

EB를 이용한 배포는, 따로 설정을 해주지 않기 때문에 requirement.txt로 설치해야할 라이브러리를 알려주면, 자동 설치가 된다.

가상환경을 만들어 준후, 라이브러리를 설치하고, 설치한 라이브러리를 pip freeze > requirement.txt 파일로 만들어준다

4. EB - Cloudfront 연동 ( 프론트 - 백 연동)

EB를 이용해 배포를 진행하면, front 코드에서 s3에 데이터를 저장해야할 때

url을 EB url을 이용한다.

ex)

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("파일이 업로드 되었습니다!!"); }, }); }

728x90

from http://thalals.tistory.com/152 by ccl(A) rewrite - 2021-10-04 01:00:25