본문 바로가기

💻 개발IT/Infra

[AWS] 초간단 Node.js 배포해보자! (feat. lambda(serverless))

이전에 EC2로 서버를 배포했지만

비용상 lambda에서 배포해보고자 한다.

https://sunghee2.tistory.com/entry/AWS-EC2-생성과-Nodejs-배포

 

[AWS] Node.js를 배포해보자! (feat. EC2)

EC2 인스턴스 생성 1. 중앙 주황색 버튼 '인스턴트 시작' 클릭 2. 인스턴스명 작성 후, OS 이미지 선택 ( 우분투 20.04 LTS ) 3. 새 키페어 생성하고 다운 받기 4. 인스턴스 시작 버튼을 눌러 생성하기 EC2

sunghee2.tistory.com

 

AWS Lambda란?

AWS의 Serverless 컴퓨팅 서비스로

서버 프로비전 없이 코드 실행이 가능하다.

  • 보통 2가지 방법으로 호출
    1. Event 기반
    2. AWS 다른 서비스 또는 API Gateway를 통해 호출
      ※ API Gateway : Lambda함수를 외부에서 호출할 수 있는 라우터 역할
  • 가격 저렴 : 처음 100만건 호출 무료, 이후 100만건 당 $0.2 * (컴퓨팅/메모리 사용에 따라)

 

 

serverless 란?

node.js 코드를 AWS Lambda에 간편하게 배포할 수 있는 npm 라이브러리이다.

 

실제로는 AWS lambda 사이트에 들어가 직접 설정 하고 함수를 생성해야하지만

여기서는 간편하게 serverless 라이브러리를 통해 배포하고자 한다.

 

 

 

배포하기!

1. serverless 설치

터미널 창을 열어서 글로벌로 serverless를 설치해준다.

npm install -g serverless

 

2. AWS 액세스 키 발급

우선, AWS 사이트에 접속한다.

https://console.aws.amazon.com/console/home

 

https://console.aws.amazon.com/console/home

 

console.aws.amazon.com

 

우측 상단의 AWS 아이디를 클릭하고

"보안 자격 증명" 을 클릭한다.

 

조금만 스크롤을 내리면

"액세스 키" 부분에서 "액세스 키 만들기"를 선택한다.

 

아래와 같이

액세스 키와 비밀 액세스 키를 발급받을 수 있다.

발급받았으면,

이 화면에서 벗어나지 말고 다음 단계를 진행한다.

 

3. serverless config 설정

위에서 발급받은 액세스 키(key)와 비밀 액세스 키(secret)를 이용하여

터미널에서 config 설정을 해준다.

serverless config credentials --provider aws --key {key} --secret {secret}

 

 

4. serverless create

터미널에서 아래와 같이 입력하여

AWS Lambda 함수를 생성하기 위한 프로젝트 구조와 파일을 생성한다.

 

이 명령어를 입력하면,

serverless에서 제공하는 "aws-nodejs" 템플릿을 기반으로 새로운 Lambda 함수를 생성할 수 있다.

serverless create -t aws-nodejs

 

프로젝트에 들어가면

handler.js와 serverless.yml이 생성되어있다.

 

  • handler.js : AWS Lambda 함수의 코드를 작성하는 곳
  • serverless.yml : serverless 설정파일로, AWS Lambda함수의 구성 정보 포함

 

 

 

5. handler.js 작성

우선, serverless-http를 설치한다.

serverless-http는 node.js의 HTTP 요청과 응답을 AWS Lambda에서 처리할 수 있는 형태로 변환한다.

npm install serverless-http

 

그리고

이미 기존에 index.js(또는 app.js)에 작성되어있다고 가정하고

아래와 같이 handler.js를 변경한다.

const app = require("./index");
const serverless = require("serverless-http");

module.exports.hello = serverless(app);

 

 

index.js 맨 하단에 'app.listen(3000)' 처럼 포트가 열려있을텐데

'module.exports = app'으로 변경해준다.

 

 

6. serverless.yml 작성

배포하기 위해 필요한 설정파일인 serverless.yml을 작성한다.

service: aiChatbot
frameworkVersion: "3"

provider:
  name: aws
  runtime: nodejs18.x
  memorySize: 2048
  timeout: 15
  stage: prod
  region: ap-northeast-2

functions:
  hello:
    handler: handler.hello
    events:
      - http: ANY /{proxy}
      - http: ANY /
  • service : App 이름이자 lambda 함수 이름에도 들어감
    만약 이걸 변경해서 재배포하면 lambda 함수가 다른 이름으로 또 생성됨
  • frameworkVersion : 사용하고 있는 serverless 버전
  • provider : 백앤드 서비스를 제공하는 클라우드 프로바이더의 정보를 설정해주는 부분
    • name : aws를 적으면 aws를 프로바이더로 사용
    • runtime : 함수 실행할 환경 정보
    • memorySize : 함수 실행할 메모리 크기
    • timeout : 타임아웃 시간
    • region : 지역
    • stage : prod 운영 / dev 개발 / stage 스테이지 설정 가능
  • function
    • hello : 함수 이름을 설정 
    • handler : handler.js에서 정의한 hello 함수를 연결
    • events : 함수가 호출될 때 사용할 이벤트 설정
      • ANY : 요청 메소드 
      • /{proxy} : 요청 URL 

 

 

7. 배포

터미널에 아래와 같이 배포를 한다.

serverless deploy

 

제대로 배포가 되었으면 

아래와 같이 url 이 나온다.

이 URL을 통해 서버에 접속할 수 있다!

 

8.  AWS 사이트에서 확인

AWS Lambda console에 접속하면,

https://ap-northeast-2.console.aws.amazon.com/lambda

 

https://ap-northeast-2.console.aws.amazon.com/lambda

 

ap-northeast-2.console.aws.amazon.com

 

 

Lambda함수에 1개가 있다는 것을 확인할 수 있고

클릭하면 우리가 배포한 함수를 확인할 수 있다.

 

관련 오류

1. Internal server error

API 접속시 서버에 에러가 발생했다는 것으로

CloudWatch 로그를 통해 자세한 로그를 확인할 수 있다.

 

1) AWS CloudWatch 접속

https://ap-northeast-2.console.aws.amazon.com/cloudwatch/

 

https://ap-northeast-2.console.aws.amazon.com/cloudwatch/

 

ap-northeast-2.console.aws.amazon.com

 

2) 로그 메뉴 > 로그 그룹 접속

 

3) 로그 그룹에서 함수명 선택

 

4) 하단의 로그 스트림 탭에서 원하는 시간으로 확인

 

5) 로그 클릭하면 확인할 수 있다.

 

 

반응형