프로젝트3

(1) Serverless를 이용한 Lambda 생성

FYE 2023. 2. 18. 20:56

 

Step 1: Serverless를 이용한 Lambda 생성

serverless framework를 이용하여 간단한 Lambda 함수를 생성하고 배포합니다.

 

Tutorial: Your First Serverless Framework Project

https://www.serverless.com/framework/docs/tutorial

 

 

서버리스 프레임워크 설치

(node와 npm이 설치되어 있다면) npm모듈이기때문에 설치하는 방법은 간단하다.

npm install -g serverless

 

 

serverless

또는 sls를 입력하면 된다.

그러면 새 서비스를 부트스트랩하는 데 도움이 되는 마법사와 같은 프로세스가 시작됩니다.

Node.js - Starter 로 선택한다.

 

 

프로젝트 이름은 test1으로 정해주고

리전을 정해주려고 디플로이는 no를 선택했다.

 

 

TEST1 디렉토리안에는

ㄴ.gitignore

ㄴindex.js

ㄴREADME.md

ㄴserverless.yml 

 

serverless.yml파일을 열어보면 

service: test1
frameworkVersion: '3'

provider:
  name: aws
  runtime: nodejs18.x

functions:
  function1:
    handler: index.handler

 

AWS Lambda함수를 배포하고 관리하기 위한 serverless Framework 설정파일이다

  • service 항목은 서비스의 이름을 지정할 수 있고, 저는 test1로 지정했습니다.
  • frameworkVersion은 사용할 serverless framework 버전을 지정한 것이고 버전3을 이용한다고 명시되어 있다.
  • provider항목에서는 AWS서비스를 사용할 수 있도록 설정하는 것이다.
    • name : 사용할 클루읃 제공 업체 이름 지정 = aws
    • runtime : AWS Lambda에서 실행할 런타임을 지정 = nodejs18버전 사용
  • fucntions항목에서는 배포할 함수를 정의한다
    • function1 : 함수의 이름을 정의한 것
    • handler : lambda함수의 핸들러를 지정한 것 
      • index.handler로 index.js 파일의 handler함수를 사용한다는 의미이다.

 

 


 

이제 serverless.yml에 대해 파악했으니 레퍼런스를 참고하여 리전을 변경해주자

service: test1
frameworkVersion: '3'

provider:
  name: aws
  runtime: nodejs18.x
  region: ap-northeast-2

functions:
  function1:
    handler: index.handler

provider에 region을 ap-northeast-2로 추가해줬다.

 


 

이제 핸들러를 편집해보자

index.js를 아래코드와 같이 수정해줬다.

module.exports.hello = async (event) => {
  let inputValue, outputValue
  console.log(event.body)

  if (event.body) {

    let body = JSON.parse(event.body)

    inputValue = parseInt(body.input)
    outputValue = inputValue + 1
  }

  const message = `메시지를 받았습니다. 입력값: ${inputValue}, 결과: ${outputValue}`

  return {
    statusCode: 200,
    body: JSON.stringify(
      {
        message
      },
      null,
      2
    ),
  };
};

 

위의 코드는 AWS Lambda함수의 핸들러 함수로, 'event'를 인자로 받아서 처리하는 함수이다.

  • inputValue, outputValue 변수를 초기화하고 evenet.body값을 출력한다.
  • event.body값이 있으면 JSON.parse함수를 사용하여 파싱한다.
  • 입력값을 정수(int)로 파싱하여 inputValue에 할당한다.
  • outputValue변수에는 inputValue + 1의 값이 할당된다.
  • message변수에는 inputValue와 outputValue 값을 포함한 메시지 문자열이 할당된다.
  • Lambda함수의 응답으로 statusCode 200으로, body에는 message값을 JSON문자열로 변환하여 반환한다.

이 코드는 HPPT POST 요청으로 받은 ' { input : 숫자 } ' 데이터를 파싱하여 입력값에 1을 더한 후,

결과값과 함께 응답하는 AWS Lambda함수를 구현한 것이다.

 

 

 

 

 

 


 

이전의 코드는 index.js파일안에 handler라는 이름을 가졌지만

지금은 hello로 변경했기때문에

serverless.yml 코드도 수정을 해줘야한다.

 

service: test1
frameworkVersion: '3'

provider:
  name: aws
  runtime: nodejs18.x
  region: ap-northeast-2

functions:
  function1:
    handler: index.hello

handler를 index.hello로 변경해주었다

 


 

배포를 해주자

serverless deploy
sls deploy

둘 다 사용가능하다!

 

 

us-east-1로 디플로이가 됐길래

지우고 다시 디플로이를 해줬다

 

serverless remove

 

ap-northeast-2리전에 제대로 배포완료


 

이제 API GATEWAY를 붙여주자

api게이트웨이를 추가시키면

트리거에서 확인할 수 있습니다.

이제 엔드포인트로 접속해볼까요..

 

 


 

 

cURL을 통한 테스트 : 입력값의 +1 반환

curl -X POST API_GATEWAY_endpoint \
--header 'Content-type: application/json' \
--data-raw '{ "input": 1 }'



curl명령어를 통해 결과값을 받았다!

성공ㅎㅎ

 

 

 

 

 

 


참고레퍼런스

https://www.serverless.com/framework/docs/providers/aws/guide/serverless.yml

https://www.serverless.com/framework/docs/tutorial