-
AWS CodePipeline으로 추천 API 모델 배포하기프로젝트 회고록 2021. 8. 16. 23:08
CodPipeline 아키텍처 보러가기
https://ninano1109.tistory.com/168
API 모델 CodePipeline 아키텍처(Feat. 검색어 추천 API 배포)
keyword_train DAG에서 검색어 학습 후 docker image 빌드 및 FastAPI 컨테이너를 띄우기 위해 필요한 모든 파일을 S3 버킷 내 latest/latest.zip(default로 지정!) 이름으로 업로드 codepipeline은 latest/lates..
ninano1109.tistory.com
[Airflow DAG - Keyword_train]
- keyword_train에서 FastText 모델로 학습 후 weight 파일이 만들어짐.
- 예를 들어 A 인풋이 들어왔을 때 B 아웃풋을 리턴하는 로직의 파일(단순 비유)
- 위 weight 파일과 ECS 서비스 배포에 필요한 여러가지 파일들을 zip으로 압축해서 S3에 업로드
[AWS CodePipeline]
CodeCommit(Source)
- S3 지정 경로 Bucket(deploy)에 일별 날짜 폴더와 latest 폴더(매일 갱신)가 함께 적재됨
- latest 폴더 내부의 source.zip 파일(default)이 올라올 때 자동 동작함
CodeBuild
- weight 파일 + 기타 여러가지 파일(Dockerfile, TIMESTAMP.txt 등)
- docker image 생성 및 ECR 업로드 => Dockerfile로 Fast API 실행하는 이미지 빌드
# Dockerfile FROM 262XXX.dkr.ecr.ap-northeast-2.amazonaws.com/python37_slim_buster RUN apt-get update && apt-get install -y --no-install-recommends \ apt-utils \ tree \ net-tools \ curl \ unzip \ cron \ vim \ && rm -rf /var/lib/apt/lists/* # docker 내 keyword_code 폴더 생성 RUN mkdir /keyword_code # requirement.txt 파일만 복사 하기 (cache 사용을 위함) COPY requirements.txt /keyword_code/requirements.txt # docker 내에서 코드 실행할 위치 설정 WORKDIR /keyword_code # 이미지 생성 과정 중 명령어 실행(필요 라이브러리 설치) RUN pip install -r requirements.txt # 모든 코드들 docker 실행 폴더 위치에 복사하기 COPY . /keyword_code # docker 이미지 빌드 시 TIMESTAMP 변수 define ARG TIMESTAMP ENV MODEL_NAME="gb_search" ENV MODEL_VERSION="${MODEL_NAME}_${TIMESTAMP}" # FastAPI 8000번 포트 열기 EXPOSE 8000 # set locale ENV LC_ALL=C.UTF-8 # 컨테이너 실행 CMD python3 app.py --aws-conf=aws --model-conf=model --model-version=$MODEL_VERSION
Deploy to Dev/ Prod
- ECS 개발 서비스(dev-service2)는 rolling update(서버 하나씩 죽이고 뛰우는 순차적 교체)방식으로 배포
- ECS 운영 서비스(dev-service2)는 blue/green(추가된 서버에서 한번에 교체) 방식으로 배포
- 배포 = 매일의 새로운 docker image를 기반으로 새로운 컨테이너를 띄우면서 ECS 서비스 업데이트
- 컨테이너 새로 띄울 때, 제일 마지막 단계에서 flask를 띄우는데, 이 때 고객사별 weight 파일(A요청 → B반환)을 메모리에 올려 놓아서 {키워드} 요청 시 {추천결과} 를 반환할 수 있음
- BentoML의 밑단은 flask로 되어 있고, gunicorn이 flask application에 들어오는 요청을 중개해서 request를 던져주는 역할
Validate
- DeployToDev 단계 이후 개발 서비스에 먼저 배포해서 검증하기 위한 단계.
- AWS Lambda를 활용하여 슬랙에 알림을 주는 함수 로직 추가.
ApprovalOrDeny
- 슬랙 알림을 통해 검색어 추천(FastText)과 딥러닝 기반 다음에 볼 상품(SA)의 추천 결과를 확인하여, 에러 발생 고객사가 없고, 추천 상품들의 응답이 정상적으로 왔다고 판단되면 Deploy 클릭!
DeployToProd
- 운영 서비스 배포 진행
당신이 어떤 것을
할머니에게 설명해주지 못한다면,
그것은 진정으로 이해한 것이 아니다.
- A.Einstein
'프로젝트 회고록' 카테고리의 다른 글
Airflow on ECS 파이프라인 구축기 (0) 2023.07.10 MS Teams에서 Airflow DAG 자동 실행 파이프라인 구축(Feat. Teams, Lambda, Airflow 연동) (0) 2022.04.22 Docker 컨테이너 배포 파이프라인 구축 스프린트 회고 (0) 2021.06.18 👣 방문자 기록 사이트 토이프로젝트 회고 (2) 2021.04.27