Serverless Framework

Prev Next

Classic 환경에서 이용 가능합니다 .

서버리스 프레임워크는 다양한 Cloud Provider의 Function-as-a-Service와 연동하여 서버리스 애플리케이션을 개발, 배포, 테스트할 수 있는 오픈소스 웹 프레임워크입니다. 네이버클라우드 Cloud Functions는 서버리스 프레임워크 Provider를 지원하며 서버리스 프레임워크를 활용하여 Cloud Functions를 손쉽게 구성하고 관리할 수 있습니다.

서버리스 프레임워크에서 제공하는 주요 개념과 각 항목별 Cloud Functions와 연관 관계는 다음과 같습니다. 자세한 내용은 Serverless Framework Concepts에서 확인할 수 있습니다.

서버리스 프레임워크의 Function은 Cloud Functions의 액션과 동일합니다. 배포에 있어서 제일 가장 기본적인 단위이며, 보통 하나의 액션은 하나의 작업을 수행합니다.

서버리스 프레임워크의 Event는 Function을 실행시키는 주체로서 Cloud Functions의 트리거와 동일합니다.

서버리스 프레임워크의 조직 단위 또는 프로젝트 단위입니다. serverless.yml 파일에 Functions, Events 등 서비스에 필요한 내용들을 작성합니다.

배포/관리할 액션 정보를 정의합니다.

설정 설명 필수 여부 기본값 제약사항
handler 액션의 main 함수가 정의된 파일 이름과 함수 이름. <파일이름>.<함수이름> O - -
runtime 액션의 런타임 O - nodejs, python만 제공
name 액션 이름 X <서비스명>-<스테이지>-<FUNCTION_KEY> -
memory 액션 메모리 X 256 (MB) 128, 256, 512
timeout 액션이 실행될 수 있는 최대 시간 X 60000 (ms) MIN 500 MAX 300000
  • 예시
# serverless.yml
service: myService
 
provider:
  name: navercloud
  region: gov
 
functions:
  hello:
    handler: handler.main 
    runtime: nodejs:16
    name: myAction
    memory: 512
    timeout: 60000
    parameters:
      foo: bar
 
plugins:
  - serverless-navercloud
YAML

Cloud Functions는 액션을 관리하는 패키지 리소스를 제공합니다. 패키지를 지정하지 않을 수 있고 정의한 패키지가 없을 경우, 자동으로 생성됩니다.

functions:
  hello:
    handler: handler.main
    packageName: myPackage
YAML

명시적으로 패키지를 배포하고 액션에서 지정할 경우, resource/packages에 배포할 패키지를 정의해야 합니다.

functions:
  hello:
    handler: handler.main
    packageName: myPackage
    runtime: nodejs:16
    name: myAction
    
resources:
  packages:
     myPackage:
       parameters:
         hello: world
YAML

배포/관리할 트리거 정보를 정의합니다. 배포 시, events 정보가 트리거 리소스로 변환됩니다. events가 지정된 액션의 플랫폼에 따라 트리거의 플랫폼이 결정됩니다.

functions:
   myAction:
     name: myAction
     handler: hadler.main
     events:
       - triggerName: myCronTrigger
          type: cron
          cronOptions: "*/5 * * * *"
       - triggerName: myBasicTrigger
           ...
YAML

Cron 트리거

- triggerName: cronTrg
  type: cron
  cronOption: <Cron Expression>
YAML

Github 트리거

- triggerName: gitTrg
  type: github
  username: <Github Username>
  accessToken: <Github Access Token>
  repository: <Github Repository>
YAML

서버리스 프레임워크 CLI를 이용하여 빌드, 배포 등 명령어를 실행하는 방법을 설명합니다.

서비스 구성을 클라우드 상에 배포하지 않고 파일로 패키징 합니다. 패키징 파일을 이용하여 형상 관리에 이용하거나 CI/CD 워크플로와 연동할 수 있습니다. Cloud Functions의 리소스 타입별로 3가지 파일이 생성됩니다.

  • functions.json (액션)
  • packages.json (패키지)
  • triggers.json (트리거)
$ serverless package --package <패키지 경로>
Bash

serverless.yml 파일 내용에 변경이 있을 경우, 변경 사항을 클라우드에 배포합니다. 기본적으로 Package 과정을 포함하며, --package 옵션을 이용하면 별도 빌드 없이 기존 생성된 패키지를 배포할 수 있습니다.

$ serverless deploy 
$ serverless deploy --package <패키지 경로>
Bash

클라우드 상에 배포되어 있는 액션을 실행합니다. 실행 결과로 액션 코드 리턴 값을 출력하며 상세 실행 결과가 필요한 경우, verbose 옵션을 추가해야 합니다. 배포되지 않은 액션은 실행할 수 없습니다.

$ serverless invoke -f <액션 이름>
$ serverless invoke -f <액션 이름> --verbose
$ serverless invoke -f <액션 이름> --timeout <타임아웃(ms)>
Bash

액션의 실행 이력과 결과를 조회합니다.

$ serverless logs -f <액션 이름>
$ serverless logs -f <액션 이름> --pageSize <페이지별 로그 수> --pageNo <페이지 번호>
# start/end는 "yyyy-MM-ddTHH:mm:ss" 형태로 작성하며 리전의 표준 시간대를 기준으로 합니다.
$ serverless logs -f <액션 이름> --start <조회 시작일시> --end <조회 종료일시> 
$ serverless logs -f <액션 이름> --tail
Bash

서버리스 프레임워크에서 Cloud Functions 액션, 트리거를 구성하는 방법을 소개합니다. 각 구성 요소의 자세한 설명은 구성 요소를 참고해 주십시오.

서버리스 프레임워크 설치

  • NPM을 이용하여 서버리스 프레임워크 패키지를 설치합니다.
npm install -g serverless@3
Bash
참고
  • Serverless Framework v4 이상은 지원하지 않습니다.
  • --global 또는 -g 옵션이 반드시 포함되어야 합니다.
  • Node.js >= 16.0 이 필요합니다.

Ncloud SDK Crendentials 등록

serverless-navercloud는 ncloud-sdk를 이용합니다. 환경 변수에 NCLOUD_ACCESS_KEY(또는 NCLOUD_ACCESS_KEY_ID)와 NCLOUD_SECRET_KEY(또는 NCLOUD_SECRET_ACCESS_KEY)가 등록되어 있어야 합니다.

$ export NCLOUD_ACCESS_KEY="네이버 클라우드 플랫폼 포털이나 Sub Account에서 발급받은 Access Key"
$ export NCLOUD_SECRET_KEY="네이버 클라우드 플랫폼 포털이나 Sub Account에서 발급받은 Secret Key"
Bash

Service 생성

아래의 명령어를 통해서 sls-tutorial이라는 이름의 서비스 디렉토리를 생성합니다.

$ mkdir -p sls-tutorial
$ cd sls-tutorial
Bash

서비스 구성 파일인 serverless.yml을 생성합니다. providerplugins을 다음과 같이 설정해야 합니다.

참고

지원 region: gov

# serverless.yml
service: sls-tutorial
 
provider:
  name: navercloud
  region: gov
 
functions:
  tuto1:
    handler: handler.tuto1
    runtime: nodejs:16
    memory: 256
    timeout: 60000
  tuto2:
    handler: handler.tuto2
    runtime: nodejs:16
    memory: 512
    timeout: 300000
    
plugins:
  - serverless-navercloud
YAML

네이버 클라우드 플랫폼의 Cloud Functions를 구성할 수 있도록 serverless-navercloud 플러그인을 설치합니다.

$ serverless plugin install -n serverless-navercloud
Bash

서비스에서 참조할 액션 코드를 작성합니다.

// handler.js
'use strict';
 
function tuto1(params) {
  const name = params.name || 'World';
  console.log('log', { payload: `Hello, ${name}` });
  return { payload: `Hello, ${name}!` };
}
 
function tuto2(params) {
  return { payload: 'hello world' };
}
 
module.exports = {
  tuto1, tuto2
};
JavaScript

serverless.yml에 정의된 액션을 Cloud Functions에 배포합니다. functions의 events 속성이 정의된 경우, Cloud Functions의 트리거도 배포되며 액션과 연결됩니다.

$ serverless deploy
Bash

클라우드 상에서 액션을 실행할 수 있습니다.

$ serverless invoke -f tuto1
Bash

특정 액션의 실행 이력과 로그를 확인할 수 있습니다.

$ serverless logs -f tuto1
Bash

Cloud Functions에서 제공하는 다양한 타입들의 리소스를 serverless.yml에 등록하는 예시입니다.

참고

아래 serverless.yml 예제에서 하기의 항목들은 사용자의 리소스 정보로 대체되어야 합니다.

  • Github Trigger 외부 연결 주소 생성을 위한 productId, apiName, stageName
  • Github Trigger의 Github Access Information
service: sls-tutorial

provider:
  name: navercloud
  region: gov

functions:
  cAct1:
    handler: handler.classicActionFunc1
    runtime: nodejs:16
    memory: 128
    timeout: 30000
    events:
      # cron trigger on classic platform
      - triggerName: cCronTrg
        type: cron
        cronOption: "* * 1 * *"
      # github trigger on classic platform
      - triggerName: cGitTrg
        type: github
        username: "cloudfunctions@ncloud.com"
        accessToken: "*****"
        repository: "navercloud/cloudfunctions"
        events:
          - "*"
        productId: "2vnk18dvh2"
        apiName: "api"
        stageName: "v2"
  # sequence Action on classic platform
  cAct2:
    handler: handler.classicActionFunc2
    runtime: nodejs:8
  cSeqAct:
    sequence:
      - sls-tutorial-dev-cAct1
      - sls-tutorial-dev-cAct2

plugins:
  - serverless-navercloud
YAML
  • Serverless Framework v4 이상은 지원하지 않습니다.
  • 액션 외부 연결 생성 지원하지 않습니다.
  • Node.js, Python 런타임을 제공하며 추후 전체 런타임 지원 예정입니다.
  • 로컬 디버그 기능은 지원하지 않습니다.