Open4
NestJSバックエンドアプリをサーバレス化
公式ドキュメントを一読した上で作業を開始する。
install
npm i @vendia/serverless-express aws-lambda
npm i -D @types/aws-lambda serverless-offline
rootディレクトリにserverless.ymlを追加する
serverless.yml
service: serverless-example
plugins:
- serverless-offline
provider:
name: aws
runtime: nodejs14.x
region: ap-northeast-1
package:
exclude:
- .git/**
- src/**
- test/**
- nodemon.json
- README.md
functions:
main:
handler: dist/index.handler
events:
- http:
method: ANY
path: /
- http:
method: ANY
path: '{proxy+}'
src/index.tsを追加する
src/index.ts
import { NestFactory } from '@nestjs/core';
import serverlessExpress from '@vendia/serverless-express';
import { Callback, Context, Handler } from 'aws-lambda';
import { AppModule } from './app.module';
let server: Handler;
async function bootstrap(): Promise<Handler> {
const app = await NestFactory.create(AppModule);
await app.init();
const expressApp = app.getHttpAdapter().getInstance();
return serverlessExpress({ app: expressApp });
}
export const handler: Handler = async (
event: any,
context: Context,
callback: Callback
) => {
server = server ?? (await bootstrap());
return server(event, context, callback);
};
tsconfig.jsonに追記する
tsconfig.json
"compilerOptions": {
…
"esModuleInterop": true
…