반응형

1.목표 (what & why)

  • fast 를 이용해본다
  • 유지보수와 확장 가능한 구조의 프로젝트 구조를 만든다.
  • 쿠버네티스 기반 컨테이너 서비스로 동작하도록 만든다.
  • fast api application   
    • 별도 SMTP 서버로 이메일 전송을 대신할 수 있는 api 서버 구현 ( 상세한 구현 로직은 포함하지 않음. )
    • 인증은 기본 토큰 방식을 사용한다.
  • 만드는 목적과 이유
    • 보통 이런 REST API + Application 실행 요구사항은 AWS 람다를 대부분 이용했다. 그리고 이용하면 편하고..
    • AWS 람다는 서버리스기반으로 실행되기 때문에 고정 IP 를 부여하기 힘들다. (서브넷의 CIDR 를 조정하면 될것 같긴 하지만 그렇게는 아무도 안할 것 같다)
    • 화이트 리스트로 등록되어야만 실행을 하게 하는 서비스 들이 있다. 예를 들어 SMTP 서비스 들. 

 

2.과정 (Step)

  • fastapi application 을 작성한다
  • Dockerfile 을 작성하고 컨테이너 이미지를 생성한다
  • 쿠버네티스 Deployment yaml 을 작성하고, 파드, 서비스를 작성한다.
  • 배포와 자동화 스크립트를 만들어본다.
  • 사전 준비 과정
    • Docker , 쿠버네티스, 파이썬 개발 환경의 준비가 되어있어야 한다.

 

3. 방법 (How)

fastapi application 작성한다.

- github  -https://github.com/jaysooo/service-common-api

 



 

Dockerfile 을 작성하고 컨테이너 이미지를 생성한다

from python:3.11-alpine

# set env
WORKDIR /usr/src
# source copy
COPY ./app ./app

ENV PYTHONPATH /usr/src/app

# package install
RUN pip install --upgrade pip && pip install --no-cache-dir -r ./app/requirements.txt

EXPOSE 9000

# container execution
CMD python -m uvicorn app.main:app --reload --host=0.0.0.0 --port 9000

 

이미지 생성과 실행 테스트를 해본다.

#!/bin/bash
echo "[LOG] 01. local deploy.."
IMAGE_NAME=demoapp
IMAGE_VERSION=1.0
TARGET_PORT=9000
#echo ${IMAGE_NAME}:${IMAGE_VERSION}


echo "[LOG] 02. container cleansing.."
docker stop `docker ps | grep -e "${IMAGE_NAME}:${IMAGE_VERSION}" | awk '{print $1}'`
docker rmi -f ${IMG_NAMME}:${IMAGE_VERSION}

echo "[LOG] 03. image build.."
docker build -t ${IMAGE_NAME}:${IMAGE_VERSION} .

echo "[LOG] 04. container run.."
docker run -p ${TARGET_PORT}:${TARGET_PORT} -d ${IMAGE_NAME}:${IMAGE_VERSION}

docker ps | grep -e ${IMAGE_NAME}

 

이미지 빌드 및 실행 화면

 

 

API 실행 화면

 

반응형

+ Recent posts