Serverless Node.js Starter

이 가이드에서 다룬 내용을 바탕으로, 앞으로의 프로젝트를 위한 좋은 출발점을 마련하는 것이 합리적입니다. 이를 위해 Serverless Node.js Starter라는 이름의 서버리스 스타터 프로젝트를 몇 가지 만들었습니다. TypeScript를 사용한다면, Serverless TypeScript Starter도 준비되어 있습니다. Python 버전인 Serverless Python Starter도 있습니다. 이 스타터 프로젝트들은 Seed와도 잘 작동합니다. Seed는 Serverless Framework를 위한 완전히 구성된 CI/CD 파이프라인입니다.

Serverless Node.js Starterserverless-bundle 플러그인(serverless-webpack 플러그인의 확장)과 serverless-offline 플러그인을 사용합니다. 이 프로젝트는 다음과 같은 기능을 지원합니다:

  • Lambda 함수 코드에서 ES6 또는 TypeScript 사용
  • Webpack을 사용한 최적화된 패키지 생성
  • 로컬에서 API Gateway 실행
    • serverless offline start 명령어 사용
  • 단위 테스트 지원
    • npm test를 실행하여 테스트 실행
  • 적절한 오류 메시지를 위한 소스맵 지원
    • 오류 메시지가 올바른 줄 번호를 표시
    • CloudWatch에서도 작동
  • 스테이지별 환경 변수 추가
  • Webpack 또는 Babel 설정을 관리할 필요 없음

데모

이 서비스의 데모 버전은 AWS에 호스팅되어 있습니다 - https://z6pv80ao4l.execute-api.us-east-1.amazonaws.com/dev/hello.

그리고 여기에 해당하는 ES7 소스 코드가 있습니다.

export const hello = async (event, context, callback) => {
  const response = {
    statusCode: 200,
    body: JSON.stringify({
      message: `Go Serverless v1.0! ${(await message({ time: 1, copy: 'Your function executed successfully!'}))}`,
      input: event,
    }),
  };

  callback(null, response);
};

const message = ({ time, ...rest }) => new Promise((resolve, reject) => 
  setTimeout(() => {
    resolve(`${rest.copy} (with a delay)`);
  }, time * 1000)
);

요구사항

설치

새로운 Serverless Framework 프로젝트를 생성하려면 다음 명령어를 실행하세요.

$ serverless install --url https://github.com/AnomalyInnovations/serverless-nodejs-starter --name my-project

새로 생성된 디렉토리로 이동합니다.

$ cd my-project

Node.js 패키지를 설치합니다.

$ npm install

사용법

로컬에서 함수를 실행하려면:

$ serverless invoke local --function hello

serverless-offline을 사용해 API Gateway를 로컬에서 시뮬레이트하려면:

$ serverless offline start

테스트를 실행하려면:

$ npm test

테스트 실행에는 Jest를 사용합니다. 테스트 설정에 대해 더 알아보려면 여기를 참고하세요.

프로젝트를 배포하려면:

$ serverless deploy

단일 함수를 배포하려면:

$ serverless deploy function --function hello

프로젝트에 환경 변수를 추가하려면:

  1. env.example 파일을 .env로 이름을 변경합니다.
  2. 로컬 스테이지에 필요한 환경 변수를 .env 파일에 추가합니다.
  3. serverless.yml 파일에서 environment: 블록의 주석을 해제하고, 환경 변수를 ${env:MY_ENV_VAR} 형식으로 참조합니다. 여기서 MY_ENV_VAR.env 파일에 추가한 변수입니다.
  4. .env 파일을 커밋하지 않도록 주의하세요.

시도해 보시고 궁금한 점이 있으면 이메일로 문의하거나, 버그를 발견하셨다면 새 이슈를 열어주세요.