FastAPI 프로젝트 배포:CI/CD

지진우·2023년 12월 17일
0

1. Introduction

이 시리즈를 통해 FastAPI 프로젝트를 배포했습니다. 하지만 서비스가 업데이트될 때마다 이미지를 ECR에 업로드하고 ECS 작업 정의를 생성한 뒤 업데이트를 해야하는 과정은 꽤나 번거롭습니다.

이번 포스팅에선 이 번거로운 작업들을 자동화하기 위해 CI/CD를 구축하는 방법을 살펴보겠습니다.

2. Github Repository 생성

먼저 github에세 새로운 레포지토리를 생성합니다. 이후 "Setting"에 들어와서 왼쪽 "Security" 패널의 "Secrets and variables"를 클릭하여 "New repository secret"을 생성합니다.

여기서 AWS IAM 사용자 생성을 했을 때 발급 받은 액세스 키로 아래와 같이 NameSecret을 설정하고 환경변수를 각각 생성합니다.

  • AWS_ACCESS_KEY_ID : 발급받은 aws access key
  • AWS_SECRET_ACCESS_KEY : 발급받은 aws secret access key

환경변수가 생성되었다면 "Actions" 탭에서 Deploy to Amazon ECs를 검색해 선택합니다.

이제 aws.ymlenv에서 아래의 항목을 수정해야합니다.

  • AWS_REGION: your aws region
  • ECR_REPOSITORY: AWS ECR Repository name
  • ECS_SERVICE: AWS ECS Service name
  • ECS_CLUSTER: AWS ECS Cluster name
  • ECS_TASK_DEFINITION: .aws/task-definition.json

설정이 되었다면 프로젝트 루트 디렉토리에 .aws 폴더를 생성하고 그 안에 task-definition.json 파일을 생성합니다.

이후 AWS ECS에서 테스크 정의에 생성된 테스크 정의의 JSON 내용을 복사해 task-definition.json에 붙여넣기 합니다.

이제 다시 github "Actions"으로 돌아와 "Commit"을 눌러줍니다.

3. CI/CD

aws.yml 파일은 새 버전의 서비스를 AWS ECS에 배포하기 위해 수행해야 하는 작업을 정의합니다. 사전에 정의된 동작은 main branch로 push할 때마다 github action이 배포를 시작하는 것입니다.

이제 git을 초기화하고 프로젝트 디렉토리와 연결해 push 작업을 진행해야합니다. git clone으로 해당 레포지토리를 가져온 후 프로젝트를 해당 레포지토리에 복사한 후 push합니다.

git clone <your repository url> <dir name>

git add .
git commit -m "first commit"
git push -u origin main

그리고 "Actions" 탭으로 이동하면 워크플로우의 단계별 절차를 확인할 수 있습니다.

잠시 후 배포가 완료된 것을 확인할 수 있습니다.

4. 테스트

이제 코드를 수정해 github action을 통해서 재배포를 해보겠습니다.

import os
from fastapi import FastAPI

app = FastAPI()

@app.get('/')
def welcome_root():
    my_name = os.environ.get("MY_NAME")
    return f"Hello {my_name}!"

변경사항을 수정 후 main 브랜치에 푸시합니다.

git add .
git commit -m "update code"
git push

Github "Actions" 탭으로 이동해 새배포가 완료되었으면 브라우저를 열어 확인합니다.

profile
높이보다는 멀리, 넓게보다는 깊게

0개의 댓글

관련 채용 정보