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
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);
}
};