FastAPI - Serverless 로 배포하기

dev_dong·2025년 3월 19일

FastAPI의 layerd architecture 기반의 서버리스로 배포를 하며 삽질한 경험을 정리해봤습니다.

우선 사용한 환경과 아키텍쳐 형식은 아래와 같습니다

# 환경
OS : MacOS (M3 MAX)
Lang : Python3.12
env : Docker
Dependency Management: Poetry
# 아키텍쳐
/
poetry.lock
run_server_local.py
config.yaml
server
└─ application
	└─ controller
    └─ dto
    └─ service
└─ domain
	└─ entity
└─ infrastructure
	└─ di
    └─ repositories
- app.py

자세한 아키텍쳐는 깃 레포 참고 부탁드립니다. (https://github.com/dgseo1101/fastapi_layerd_architecture)

server/app.py 에는, dependency injection을 위한 container나,
router를 include 해놓은 app이 있으며, 이 앱을 python library 중, magnum을 사용하여 핸들러로 지정해줬습니다.

이렇게 해서 핸들러로 만들어둔 서버를 아래와 같이 도커 이미지로 빌드 후

#Dockerfile
FROM public.ecr.aws/lambda/python:3.12

WORKDIR ${LAMBDA_TASK_ROOT}

RUN pip install poetry

COPY poetry.lock pyproject.toml ${LAMBDA_TASK_ROOT}/

RUN poetry config virtualenvs.create false && poetry install --no-interaction --no-ansi --no-root

COPY server ${LAMBDA_TASK_ROOT}/server
COPY core ${LAMBDA_TASK_ROOT}/core
COPY config.yml ${LAMBDA_TASK_ROOT}/config.yml
COPY _env/dev.env ${LAMBDA_TASK_ROOT}/.env

EXPOSE 8000

CMD [ "server.app.handler" ]

해당 도커 이미지를 AWS ECR에 업로드 하여 lambda 생성 시, 컨테이너 이미지로 지정해주면 됩니다.

profile
개발 잘하고 싶은 동근이의 공부방 (임시글 만수르)

0개의 댓글