AWS

AWS Lambda서버, serverless로 python flask API 서비스 만들기(internal server error 해결 방법, s3에 올린 사진이 깨질 경우)

HooSL 2022. 3. 4. 11:11

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

회원가입을 합니다.

create app을 누르고

python flask API를 누릅니다.

만드실 서버이름을 정해주시고 create

숫자가 들어가도 되지만 제일 앞에 들어가면 안됩니다.

왠만하면 소문자로만 하세요

해당 명령어를 복사 후

아나콘다 프롬프트 말고 메모장을 실행합니다.

Mac 같은 경우에는 문제가 없다는에 윈도우에서만 그대로 복사해서 사용할 경우 서버파일 설치가 진행되지 않습니다.

이유는 저 \ 표시 때문입니다.

메모장에서

\표시 를 전부 제거후 쭉 펼쳐줍니다

이제 이걸 복사후

아나콘다 프롬프트를 실행합니다.

서버파일을 저장하고 싶은것을 설정하세요

저는 내문서에 깃허브 폴더에 넣겠습니다.

디렉토리 변경 명령어 : cd 폴더이름

원하시는 폴더를 확인하시고 메모장에서 가공한 명령어를 붙여넣고 실행합니다.

다 끝나면 에러가 나게 됩니다.

신경쓰지마시고 프롬프트 종료하고 비쥬얼 스튜디오 코드를 실행합니다.

오픈 폴더하시고 만약 Get Started가 안뜨면 상단바 File 누르시면 오픈 폴더 있습니다.

아까 프롬프트에서 설정한 경로에 서버리스에서 설정한 이름으로 폴더가 있습니다.

선택후 실행합니다.

쭉 많은 파일들이 생긴게 보입니다.

여기서 serverless.yml 파일을 누릅니다.

위에 org와 app가 없을겁니다.

그래서 프롬프트에서도 에러가 난 것입니다.

위에 직접 적어줍니다.

위 org와 app를 적고 꼭 저장하세요 ctrl+s

상단바에 터미널 누르시고 powershell로 켜진거를 +버튼을 눌러 cmd로 바꿔줍니다.

cmd로 변경후 sls deploy를 실행합니다.

그럼 자동으로 node로 변경됩니다.

그럼 터미널 부분에 주소가 생긴게 보입니다.

그리고 좌측에 app.py를 보시면 주소를 입력시 어떻게 출력되는지 보입니다

확인은 저는 postman으로 실행했습니다.

GET으로 해당 주소를 보내면 밑에 정상 출력되는게 보입니다.

서버리스로 돌아가면 초록불이 들어와있습니다.

이제 로컬에서 작업한 프로젝트를 복사해서 서버 파일(serverless.yml있던 폴더)에 붙여넣어서 사용하시면 됩니다.

 

로컬호스트로 테스트가 마무리된 코드들을 서버에 옮기면 internal server error 가 뜨는 경우 

서버를 통해 올 경우 라이브러리가 적용이 잘안되서 그럴수 있다는 얘기가 있습니다

(확실하게는 모름)

에러에는 여러가지 이유가 있겠지만 저는 이렇게 해결했습니다.

aws에서 lambda를 들어갑니다.

좌측탭에서 함수를 누르고 에러나는 서버 함수로 들어갑니다.

여기서 프로젝트 라이브러리 레이어를 추가합니다.

add a layer를 누르시고

사용자 지정 계층 선택후 만드신 레이어를 추가하시면 됩니다.

라이브러리 레이어 만드는 방법 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

https://dbfoot.tistory.com/145?category=1248160 

 

AWS에 Numpy, Pandas Layer 만들기(AWS 레이어 만들기)

판다스 넘파이 레이어 만들기 1. putty 이용해서 ec2에 접속한다 $ ec2-user 2. 파이썬이 없으면 아나콘다 설치 https://www.anaconda.com/products/individual Anaconda | Individual Edition Anacon..

dbfoot.tistory.com

해당 게시글에서는 넘파이 판다스만 다뤘지만, 로컬테스트할때 사용했던 라이브러리를 전부 담고 하시면 됩니다.

 

서버로 이미지를 s3로 올릴경우 사진이 깨짐, 흰 작은 상자로 나올 경우.

 

이렇게 사진을 s3로 보내주었지만

이렇게 저장됐을 경우

서버파일에 serverless.yml 파일에 해당 코드를 넣어줍니다

  apiGateway:
    binaryMediaTypes:
      - 'image/png'
      - 'image/jpeg'
      - 'multipart/form-data'

그리고 저장후 sls deploy를 다시 하고 하면 정상으로 올라갑니다.