본문 바로가기
백엔드/Lambda

[Lambda] AWS 배포를 위한 serverless 프레임워크, Lambda

by eyoo 2022. 6. 28.

페이스북이나 인스타그램처럼 폭발적으로 증가하는 데이터를 저장하고 처리하기 위해 NoSQL을 사용한다.

 

NoSQL은 관계형 데이터베이스(RDBMS)에 비해 안정성은 떨어지나 높은 확장성을 보여준다.

# Shard기법으로 확장한다.

# 대표적인 NoSQL으로는 Dynamo, MongoDB, Casandra등이 있다.

 

대부분의 기업은 중요한 정보들을 처리할땐 RDBMS을 사용하고 댓글과 포스팅같은 데이터에는 NoSQL를 사용한다.

 

또한 프로필 수정과 같은 기능은 빠른 응답을 위해 Cache 서버를 사용하며,

사진을 업로드 하고 사진에 대한 부가적인 작업을 하기위해 Message queue를 사용한다.

 

이에 많은 회사들은 각기 다른 많은 서버와 자원들을 관리하기 위해 serverless를 활용한다.

# serverless는 클라우드 컴퓨팅 실행 모델의 하나로, 클라우드 제공자는 동적으로 머신 자원의 할당을 관리한다.

# 기존의 클라우드 방식과 달리 일일이 규칙을 설정하지 않아도 된다.

 

# 먼저 API 게이트웨이가 Rest API 요청을 받아 Lambda를 실행시킨다.

# 그 후 Lambda가 RDS, S3, NoSQL서버 등에 데이터를 처리한다.

 

 

이제 serverless 환경을 구성해보자.

 

serverless 메뉴얼:

https://www.serverless.com/framework/docs/getting-started

 

Setting Up Serverless Framework With AWS

The Serverless Framework documentation for AWS Lambda, API Gateway, EventBridge, DynamoDB and much more.

www.serverless.com

 

 

먼저 node.js를 다운로드한다.

 

npm (node.js) 다운로드:

https://nodejs.org/ko/

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

# npm 은 자바스크립트 프로그래밍 언어를 위한 패키지 관리자다

# 안정적인 LTS 버전 다운로드

 

 

그후 터미널에서 서버리스를 다운로드한다.

 

npm install -g serverless

# AWS Lambda가 파이썬 3.8 이기에 파이썬 3.8로 가상환경을 만들어줘야 한다. 

 

 

serverless 홈페이지에서 sign up 하고 생성 버튼을 누른후 python flask API를 선택하여 진행한다.

 

이름 설정하면 아래의 코드가 생성된다.

 

# 역슬래쉬를 ' \ ' 지우고 한줄로 입력한다.

 

 

터미널에서 cd..으로 깃허브 폴더로 이동한 후 위의 코드를 실행시킨다.

# 그럼 자동으로 배포하는 serverless가 깃허브 폴더로 들어간다.

# AWS credential관련 선택사항이 뜨는데 skip 하고 이후에 설정한다.

 

 

AWS credential: https://www.serverless.com/framework/docs/providers/aws/guide/credentials

 

Serverless Framework - AWS Credentials

The Serverless Framework documentation for AWS Lambda, API Gateway, EventBridge, DynamoDB and much more.

www.serverless.com

 

 

 

serverless 웹페이지에서 org의 provider로가서 add를 눌러 AWS credential을 설정한다.

 

 

 

Access/Secret Keys에서 IAM 사용자를 만들때 받았던 csv파일을 토대로 아래의 항목을 입력한다.

# 권한 확인 필요

 

 

더보기
더보기

터미널에서 코드로 입력하는 방법도 있다.

 

export AWS_ACCESS_KEY_ID=<your-key-here>
export AWS_SECRET_ACCESS_KEY=<your-secret-key-here>

 

 

코드에서 폴더열기로 해당 폴더를 찾고 실행시킨다.

 

# 폴더를 열면 여러 파일들을 볼수있는데 그중 주목해야할 파일들은 app.py, requirements.txt, serverless.yml 파일이다.

# app.py에는 실행되는 함수가 있다.

# requirements.txt에는 사용한 프레임워크와 라이브러리를 명시한다.

# serverless.yml에는 serverless의 상태를 보여준다.

 

 

serverless.yml의 service, org, app을 작성해주자.

 

org: eyoo95
app: aws-yh-recipe-server
service: aws-yh-recipe-server

frameworkVersion: '3'
...

# org는 serverless 웹페이지에서 org의 메뉴위의 이름을 입력한다.

# app과 service는 serverless 웹페이지의 apps에서 확인할수있다.

 

 

배포시 터미널에서 코드입력

 

serverless deploy

# 혹은 sls deploy 입력

 

 

배포가 완료되면 serverless 웹페이지의 app에서 확인할수있다.

 

 

실행시킨 터미널에서 endpoint를 확인할수있는데, 이 URL을 postman에 넣고 실행시키면 제대로 작동하는것을 볼수있다.

 

# app.py에 아래의 main코드를 입력하고 테스트해보자.

if __name__ == '__main__':
    app.run()

 

 

Lambda는 이벤트에 대한 응답으로 코드를 실행하고 자동으로 기본 컴퓨팅 리소스를 관리하는 서버리스 컴퓨팅 서비스다.

 

AWS Lambda 에서 애플리케이션을 확인할수있다.

 

# Lambda의 기본 지역이 us-east-1인것에 유의하자.

 

 

사용되는 함수도 확인할수있다.

 

 

함수를 클릭하면 API 게이트웨이를 확인할수있다.

 

# API 게이트웨이가 응답을 받아 해당 람다에 전송한다.

 

 

권한에 문제가 있으면 IAM에서 Admin권한이 아닌 아래의 권한들을 추가한다.

 

 

 

기타 에러 해결법 참고:

https://www.stackery.io/blog/top-10-deployment-errors/

 

Top 10 Serverless Deployment Errors (and How to Fix Them)

We translate the the top 10 serverless deployment errors into something you can understand, and show you how you resolve them if they show up.

www.stackery.io

 

 

 

 

 

 

댓글