반응형
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}
반응형
'Data Engineer' 카테고리의 다른 글
kubernetes - 자주 사용하는 kubectl 명령어 정리 (1) | 2023.10.09 |
---|---|
fastapi - 컨테이너 서비스로 구성해보기 (2) (0) | 2023.09.25 |
Chat GPT Simple Application 만들기 (0) | 2023.05.01 |
airbyte(에어바이트) 구축 및 실습 (0) | 2023.01.02 |
airbyte (에어바이트) 기초 (1) | 2023.01.02 |