본문 바로가기
AWS/CI·CD 파이프라인 구축

Serverless와 Docker를 이용해서 AWS에 Flask API 서버 배포하는 방법

by Fletcher 2024. 7. 5.

※때에 따라서 소프트웨어 또는 프레임워크의 버전 및 인터페이스에 대해,

조회하시는 시간과 본 포스트 작성의 시간적 격차가 있는 경우

해당 설명과 상이한 부분이 있을 수 있습니다!

 

 

먼저 준비 사항이 있습니다!

1. serverless 프레임워크 설치 및 회원가입 완료

2. Docker 소프트웨어 설치 및 회원가입 완료

3. flask 프레임워크 설치 완료

4. serverless ~ AWS IAM Credential 설정 완료

※참고 $ serverless config credentials --provider aws --key (IAM 액세스 키값) --secret (IAM 시크릿 액세스 키값) -o

 

준비가 끝났다면

serverless와 Docker를 이용한 flask API server 배포에 대한

샘플 코드를 살펴보겠습니다!

 

1. serverless.yml 파일 설정

참고로! 저는 serverless 3.38.0 버전을 사용했습니다!

버전 표기 없이 install을 하시면 자동으로 4.0 버전으로 설치가 되실텐데, 해당 버전이 아직 베타 버전인지라

별도 버전 표기 없이 설치했다가 수많은 에러와 오류의 향연 속에서 고생했습니다 ^^!

이 글을 보시는 분들에 따라 해당 시점에서는 4.0 버전이 LTS일 수도 있겠네요!

 

timeout 부분은 편하신만큼 임의로 설정하시면 됩니다!

 

 

 

2. requirements.txt 설정

이 부분에서 중요한건 serverless-wsgi가 기재되어 있어야 한다는 부분입니다!

 

 

3. Dockerfile 설정

 

 

4. dockerignore 설정

 

 

5. app.py 설정

여기서 중요한 두 가지가 있는데요

첫 번째로, import serverless_wsgi

두 번째는, def handler(event, context):

return serverless_wsgi.handle_request(app, event, context)

부분이 각각 기재되어 있어야 하는 부분입니다!

위와 같이 설정이 완료되셨다면, 도커 소프트웨어가 실행중인 상태에서

terminal에서 $ serverless deploy 또는 $ sls deploy를 입력하시면 됩니다!

성공적으로 서버에 배포가 되었다면 위와 같은 로그가 나옵니다!

 

진짜 성공적으로 배포가 되었는지 AWS와 POSTMAN을 이용해서 확인해보겠습니다!

 

 

 

 

AWS ECR 대시보드 화면으로 접근하면 앞전에 같이 만들었던 리포지토리가 보일겁니다!

처리과정이 정상적이었다면 이 리포지토리에 컨테이너화 된 이미지가 들어가있겠죠?

 

 

 

해당 리포지토리에 성공적으로 이미지가 추가되어 있는 것을 볼 수가 있습니다!

AWS에 접속한김에 하나 더 확인해볼까요?

 

 

 

별도로 Lambda 함수를 생성하지 않아도,

serverless를 이용해 성공적으로 배포가 되었다면 위와 같이 함수가 생성되어 있습니다!

serverless-text-app-dev-app이라고 올라가있네요!

 

 

 

API GATEWAY도 트리거로 추가되어 있습니다!

해당 엔드포인트로 HTTP Request를 보내서 정상적으로 Response가 오는지 확인해볼까요?

 

 

 

아까 flask로 작성한 API서버에 테스트용으로 간단한 API를 만들어놨었습니다

POSTMAN을 이용해 API를 호출하니,

Response의 바디로 "success" 메세지가 잘 옵니다!

API 호출 성공입니다 ^^!

 

 

이상으로 서버 배포에 대해 간단하게 알아보았습니다!

참고로 위 방법은 로컬에서 serverless 프레임워크를 이용해 내 AWS 서버에 직접 배포한 방식입니다!

근데 항상 사용자가 직접 배포를 할순 없죠?

다음에는 GitHub와 GitHub Actions를 이용해서 CI/CD 파이프라인 구축을 완료해보겠습니다!