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 생성 시, 컨테이너 이미지로 지정해주면 됩니다.