serverless 를 이용한 배포 - team-wedev/wedev GitHub Wiki

/serverless.yml

service: serverless-nestjs

provider:
  name: aws
  runtime: nodejs8.10
  region: ap-northeast-1
  profile: default
  stage: dev

plugins:
  - serverless-offline

package:
  exclude:
    - .git/**
    - src/**
    - test/**
    - e2e/**
    - nodemon.json
    - README.md

functions:
  index:
    handler: dist/src/index.handler
    events:
      - http:
          cors: true
          path: '/'
          method: any
      - http:
          path: '{proxy+}'
          method: any
          cors: true

src/index.ts

import { Context } from 'aws-lambda';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { Server } from 'http';
import { ExpressAdapter } from '@nestjs/platform-express';
import * as serverless from 'aws-serverless-express';
import * as express from 'express';

let cachedServer: Server;

async function bootstrapServer(): Promise<Server> {
  const expressApp = express();
  const adapter = new ExpressAdapter(expressApp);
  return NestFactory.create(AppModule, adapter)
    .then(app => app.enableCors())
    .then(app => app.init())
    .then(() => serverless.createServer(expressApp));
}

export const handler = (event: any, context: Context) => {
  if (!cachedServer) {
    bootstrapServer().then(server => {
      cachedServer = server;
      return serverless.proxy(server, event, context);
    });
  } else {
    return serverless.proxy(cachedServer, event, context);
  }
};
⚠️ **GitHub.com Fallback** ⚠️