AWS

Flask API 를 lambda ( 서버리스 ) 에 배포하는 방법

yugyeong 2023. 1. 11. 12:45

이번 게시글 내용은 전에 작성한 글과 이어진다.

https://yu1129.tistory.com/147

 

[Serverless] AWS 에서 IAM 을 이용하여 API 배포하기

AWS AWS - IAM - 사용자로 이동한다. 사용자 추가를 클릭하여서, 사용자 이름과 aws 자격 증명 유형 선택을 억세스 키 - 프로그래밍 방식 억세스로 선택을 해주고 다음으로 넘어간다. 권한 설정에서

yu1129.tistory.com

 

 

 

내가 만든 Flask 의 API 를 aws 에 배포하는 방법이다.

 

1. serverless.com 에서 서버리스 앱을 생성한다.

https://www.serverless.com/

 

Serverless: Develop & Monitor Apps On AWS Lambda

Easily develop and monitor auto-scaling applications on AWS Lambda, API Gateway, DynamoDB, etc., with the Serverless Framework and Serverless Monitoring Dashboard.

www.serverless.com

 

severless 사이트에 접속한 후 apps 의 create app 을 선택한다

 

 

flask api 를 배포할 것이기 때문에 python flask api 를 선택하여서 앱을 생성한다.

 

 

서버이름을 정하고 다음으로 넘어가면 아래와 같은 창이 나타난다.

아래창에서 나타난 코드를 메모장에 복붙한 후, \ 를 전부 지우고 코드들을 한줄로 만들어준 후 복사를 한다.

 

2. 로컬에 템플릿을 만든다.

복사한 코드를 cmd 에서 현재 깃허브 파일 경로로 이동하여서 붙여넣기를 하고 로컬에 템플릿 만들었다.

 

cd Documents

cd github 로 이동하여서 복사한 명령어를 입력하였다.

 

Do you want deploy now? 라는 명령어가 나오면 yes 라고 한다.

템플릿을 배포하겠냐는 의미이다.

 

만약 cmd 로 로컬에 템플릿을 만드는 과정에서 오류가 발생한다면 vs code 로 설치된 템플릿 폴더를 연 후 아래 명령어를 입력하면 수동으로 템플릿을 배포할 수 있다, 

 

$ serverless deploy 
# 또는
$ sls deploy

 

3. postman 으로 테스트 해본다.

서버리스를 배포했을 때 나온 도메인 주소를 가지고 postman 에서 테스트를 해본다.

잘 돌아간다면, 배포에 성공한 것이다.

 

4. aws 배포용 레파지토리를 만든다.

내가 만든 api 를 aws 에 배포하기 위해서 github 으로 이동하여 aws 배포용 레파지토리를 생성한다.

 

5.  서버리스 템플릿 폴더에 있는 것들을, 새로운 레파지토리로 모두 이동 (복사) 한다.

서버리스 템플릿 폴더에 있는 코드들을 전부 새로 생성한 레파지토리로 이동 또는 복사한다.

 

6. 새로운 레파지토리를 visual studio code 로 열고 .gitignore 파일에 , node_modules 를 타이핑하고 저장한다.

 

 

 

7. 새로운 레파지토리를 깃에 커밋하고 푸시한다.

 

8. 파이썬 인터프리터 가상환경을 맞게 설정한다.

 

9. 로컬에서 만든 서버 소스코드를, 새롭게 만든 새 레파지토리에 복사해서 넣는다.

  • 비주얼 스튜디오 코드를 2개 열어서 작업하는게 편하다.

 

현재 파일에서 .gitignore 과 api url 경로들이 담겨있는 app.py 파일만 제외하고 새 레파지토리에 전부 복붙하였다.

 

 

10. 새 레파지토리 소스코드를, 로컬에서 먼저 테스트한다.

복붙해서 옮긴 상태로  flask run 명령어를 이용하여 서버가 잘 작동하는지 테스트를 먼저한다.

잘 돌아가면, app.py 파일도 복붙하여서 옮긴 후, sls deploy 명령어를 이용하여서 서버에 배포한다.

 

11. 오류 발생시 CloudWatch 로 확인 

아마 오류가 발생했을 것이다.

이럴때는 aws 의 cloudwatch 의 로그 그룹으로 이동하여서 어떤 오류가 발생하였는지 확인을 하면 된다.

 

 

12. requirements.txt 파일에, 우리가 로컬에서 설치한 파이썬 라이브러리 이름을 적어줘야한다.

  •  aws 의 람다가 우리가 설치한 라이브러리를 설치하도록

 

오류가 발생한 이유는 모듈이 없어서이다.

그렇기 때문에 requirement.txt 파일에 우리가 로컬에서 설치한 파이썬 파일의 이름을 적어줘야 한다.

 

 

13. sls deploy 해서 배포한다.

이제 배포할 준비는 완전히 다 되었다.

sls deploy 명령어를 이용하여서 배포하면 된다.

 

14. aws 의 region 을 서울로 바꿔서 배포하기

현재 서버는 aws us-esat-1 region 에 배포된 것이다.

따라서 api 앱을 작동시킬 때, 속도가 느리기 때문에 region 을 서울로 바꿔서 배포해볼 것이다.

 

serverless.yml 파일로 이동하여서, provider 에 region: ap-northeast-2 라고 적어준다.

 

그리고 젤 위에 있는 org 와 app 은 지워서 다시 sls deploy 를 이용하여 서버를 배포한다.

 

 

15. 만약 배포시 credentials 로 실패하면, 로컬에 한번만 터미널로 credentials 셋팅 해주면 된다.

배포를 하였는데 만약 credentials 로 배포에 실패를 한다면, 터미널로 credentials 를 셋팅해주면 된다.

 

 

vs code 터미널에서 아래 명령어의 \ 를 지우고 한줄로 만든 다음, key 와 secret 값은 이전 게시글에서 다운로드 받은 csv 파일의 key , secret 값을 넣어준 후 실행해주면 region 이 서울로 바껴서 잘 돌아갈 것이다.

 

serverless config credentials \
  --provider aws \
  --key AKIAIOSFODNN7EXAMPLE \
  --secret wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY