본문 바로가기
AWS

[AWS] Lambda에 수작업 배포해보기

by coding_su 2023. 1. 11.

📝AWS Lambda에 소스코드 수작업 배포해보기

테스트를 먼저 해봤으니 이제 로컬 컴퓨터에서 만든 소스코드를 사용 할 수 있게 수작업 배포를 해보겠다

요약정리
1. serverless.com에서 서버리스 앱을 만든다
2. 앱을 만든 코드를 복사해 cmd실행하여 로컬에 템플릿 만든다
3. 템플릿을 AWS에 배포(잘 돌아가는지 테스트), 포스트맨으로 테스트
4. AWS 배포용 깃허브 레파지토리를 만들어 로컬에 클론
5. 서버리스 템플릿 폴더에 있는 파일들을 새로운 레파지토리 파일로 모두 복사(숨긴 파일도 다 가져온다)
6. 새로운 레파지토리를 Visual Studio Code로 열어서 .gitignore파일에 node_modules을 타이핑하고 저장
 깃허브에 커밋, 푸시해준다
7. 파이썬 인터프리터 가상환경을 맞게 설정하고 로컬에서 만든 서버 소스코드를 지금 만든 레파지토리로 복사
8. 새 레파지토리 소스코드를 로컬에서 먼저 테스트(flask run)
9. requirements.txt에 필요한 라이브러리 입력
10. sls deploy 해서 배포한다

 

먼저 서버리스 홈페이지(https://www.serverless.com/)에 가서 서버리스 앱을 만든다

apps 이름 입력하고 생성하면 코드가 나오는데 그 코드를 복사해서

cmd를 실행시켜 문서(cd Documents)의 깃허브파일(cd GitHub) 경로에 입력해 실행시킨다

(윈도우는 역슬레시가 에러나니까 지우고 한줄로 만들어준 후 입력한다)

 - Visual Studio Code로 해당 폴더를 열어 app.py파일 터미널에 sls deploy 실행해서 테스트한다

 

실행이 완료 되었다면 endpoint 주소 복사해서 비어있는 포스트맨 url에 입력해 테스트해본다

 

테스트가 잘 되었다면 AWS 배포용 깃허브 레파지토리를 만들어 로컬에 클론해준다

클론 후 서버리스 템플릿 폴더에 있는 파일들을 새로운 레파지토리 파일로 모두 이동(복사)해준다(숨긴 파일도 다 가져온다)

이렇게 파일을 모두 이동(복사)해온 새로운 레파지토리를 Visual Studio Code로 열고 .gitignore 파일에 node_modules를 타이핑해서 저장하고 커밋, 푸시한다 (=노드모듈은 깃허브에 파일을 올리지 않겠다)

 Visual Studio Code에 이런 창이 띄워졌을때 Yes를 클릭해도 .gitignore 파일에 node_modules를 추가해준다

 

Visual Studio Code에서 파이썬 인터프리터 가상환경을 맞게 설정하고 로컬에서 만든 서버 소스코드를 지금 만든 레파지토리로 복사해서 넣어준다 (Visual Studio Code를 2개 열어서 작업하는게 편하다)

새 레파지토리 소스코드를 로컬에서 먼저 테스트해본다(flask run)

 

테스트가 잘돌아가서 이대로 sls deploy로 서버 배포해서 실행해보면 에러가 뜬다

서버가 에러난다면 AWS CloudWatch에 가서 로그를 확인 해봐야한다(프린트문도 로그에 찍힌다)

AWS CloudWatch > 로그의 로그 그룹 > lambda로 되어있는 서버 이름 클릭 > 로그 스트림 클릭해서 에러를 확인

[ERROR] ModuleNotFoundError가 발생했다고 적혀있는데 로컬에 설치해서 사용한 라이브러리(소스코드에 필요한 라이브러리) 설치가 안되어있어서 에러가 발생한 것이다(람다에는 파이썬만 있기때문에)


requirements.txt 파일에 로컬에서 설치한 파이썬 라이브러리 이름을 적어주면 된다(AWS의 람다가 라이브러리를 설치)

기본으로 세개가 입력되어있어 밑에 내가 사용한 라이브러리를 추가로 입력해주고 sls deploy 해서 배포하면 된다

Flask==1.1.4
Werkzeug==1.0.1
markupsafe==2.0.1
Flask-restful
mysql-connector-python
psycopg2-binary
passlib
Flask-jwt-extended
email-validator

 

+ 지금까지 한 배포는 AWS의 us-esat-1 리전(디폴트)에 배포된 것이다 리전을 서울로 바꿔서 배포해보겠다

 

아래 코드처럼 serverless.yml 파일의 provider:에 region: ap-northeast-2 입력 후 저장하고 실행했는데

Error: "ap-northeast-2" region is not supported by dashboard 에러가 발생했다

provider:
  name: aws
  runtime: python3.9
  region: ap-northeast-2

 

이럴때는 serverless.yml의 아래 코드를 지워주고 실행한다

org: yunwltn
app: serverless-memo-app

 

다시 배포했는데 Error: AWS provider credentials not found라는 에러로 실패하면

터미널로 credentials 셋팅해주면 된다(로컬에 한번만)

아래 코드의 1234, 5678인 키값을 IAM에서 받은 키값으로 변경해 터미널에 실행해준다

(윈도우는 역슬레시가 에러나니까 지우고 한줄로 만들어준 후 입력한다)

serverless config credentials \
  --provider aws \
  --key 1234 \
  --secret 5678

 

댓글