[backend-api] Add lambda layer libs

This commit is contained in:
Dosun Yun
2022-10-27 06:08:32 +09:00
parent 609594eae8
commit cade517676
9 changed files with 16459 additions and 35 deletions

1
.idea/modules.xml generated
View File

@@ -2,6 +2,7 @@
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/backend-libs-lambda-layer/backend-libs-lambda-layer.iml" filepath="$PROJECT_DIR$/backend-libs-lambda-layer/backend-libs-lambda-layer.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/vanillameta.iml" filepath="$PROJECT_DIR$/.idea/vanillameta.iml" />
</modules>
</component>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$/../backend-api-libs-lambda-layer" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@@ -0,0 +1,3 @@
AWS_REGION: ap-northeast-2
STAGE: dev
DEPLOYMENT_BUCKET: deploy-vanilla-serverless

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,104 @@
{
"name": "backend-api-lambda-layer",
"version": "1.0.0",
"description": "VanillaMeta Serverless API lambda layer module",
"author": {
"name": "vanillabrain",
"url": "https://vanillabrain.com"
},
"private": true,
"license": "Apache-2.0",
"scripts": {
"deploy": "serverless deploy",
"package": "serverless package"
},
"dependencies": {
"@google-cloud/bigquery": "^6.0.3",
"@nestjs/axios": "^0.1.0",
"@nestjs/common": "^9.0.0",
"@nestjs/config": "^2.2.0",
"@nestjs/core": "^9.0.0",
"@nestjs/mapped-types": "*",
"@nestjs/platform-express": "^9.0.0",
"@nestjs/swagger": "^6.1.2",
"@nestjs/typeorm": "^9.0.1",
"@nestjsplus/knex": "^1.0.0",
"@types/mustache": "^4.2.1",
"@types/winston": "^2.4.4",
"aws-lambda": "^1.0.7",
"aws-serverless-express": "^3.4.0",
"axios": "^0.27.2",
"class-transformer": "^0.5.1",
"class-validator": "^0.13.2",
"cookie-parser": "^1.4.5",
"cross-env": "^7.0.3",
"js-joda": "^1.11.0",
"knex": "^2.3.0",
"knex-bigquery": "^2.0.3",
"knex-schema-inspector": "^2.0.4",
"knex-snowflake-dialect": "^1.0.1",
"mustache": "^4.2.0",
"mysql2": "^2.3.3",
"nest-winston": "^1.7.0",
"oracledb": "^5.5.0",
"pg": "^8.8.0",
"reflect-metadata": "^0.1.13",
"rimraf": "^3.0.2",
"rxjs": "^7.2.0",
"sqlite3": "^5.1.1",
"swagger-ui-express": "^4.5.0",
"ts-jenum": "^2.2.2",
"typeorm": "^0.3.9",
"typeorm-naming-strategies": "^4.1.0"
},
"devDependencies": {
"@nestjs/cli": "^9.0.0",
"@nestjs/schematics": "^9.0.0",
"@nestjs/testing": "^9.0.0",
"@types/express": "^4.17.13",
"@types/jest": "28.1.8",
"@types/node": "^16.0.0",
"@types/supertest": "^2.0.11",
"@typescript-eslint/eslint-plugin": "^5.0.0",
"@typescript-eslint/parser": "^5.0.0",
"aws-sdk": "^2.1239.0",
"eslint": "^8.0.1",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-prettier": "^4.0.0",
"jest": "28.1.3",
"prettier": "^2.3.2",
"serverless": "^3.23.0",
"serverless-domain-manager": "^5.1.5",
"serverless-http": "^2.7.0",
"serverless-latest-layer-version": "^2.1.1",
"serverless-offline": "^8.2.0",
"serverless-plugin-optimize": "^4.2.1-rc.1",
"serverless-plugin-typescript": "^2.1.0",
"serverless-plugin-warmup": "^6.0.0",
"serverless-webpack": "^5.5.5",
"source-map-support": "^0.5.20",
"supertest": "^6.1.3",
"ts-jest": "28.0.8",
"ts-loader": "^9.2.3",
"ts-node": "^10.0.0",
"tsconfig-paths": "4.1.0",
"typescript": "^4.7.4"
},
"jest": {
"moduleFileExtensions": [
"js",
"json",
"ts"
],
"rootDir": "src",
"testRegex": ".*\\.spec\\.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"collectCoverageFrom": [
"**/*.(t|j)s"
],
"coverageDirectory": "../coverage",
"testEnvironment": "node"
}
}

View File

@@ -0,0 +1,26 @@
service: vanillameta-serverless-api-lambda-layer
frameworkVersion: '3'
package:
patterns:
- '!*'
- '!*/**'
- node_modules/**
- '!node_modules/aws-sdk'
provider:
name: aws
runtime: nodejs14.x
stage: ${file(./config.yml):STAGE}
region: ${file(./config.yml):AWS_REGION}
deploymentBucket: ${file(./config.yml):DEPLOYMENT_BUCKET}
environment:
STAGE: ${self:provider.stage}
layers:
VanillaMetaApiNodeLibs:
path: ./
description: "vanillameta serverless-api node_modules lambda layer"
compatibleRuntimes:
- nodejs14.x

View File

@@ -1,9 +1,9 @@
#db정보
/config.serverless.yml
/.env.dev
/.env.prod
/.ormconfig.json
/vanillameta
config.serverless.yml
.env.dev
.env.prod
.ormconfig.json
vanillameta
.
# compiled output
/dist

View File

@@ -14,12 +14,10 @@ provider:
## memorySize: 512 - 기본은 512
timeout: 10
layers:
- arn:aws:lambda:${opt:region, self:provider.region}:${AWS::AccountId}:layer:SellerkingApiNodeLibs:latest
# - arn:aws:lambda:${opt:region, self:provider.region}:${AWS::AccountId}:layer:FirebaseNodeLibs:latest
- arn:aws:lambda:${opt:region, self:provider.region}:${AWS::AccountId}:layer:AWSNodeLibs:latest
- arn:aws:lambda:${opt:region, self:provider.region}:${AWS::AccountId}:layer:VanillaMetaApiNodeLibs:latest
stage: ${opt:stage, file(./config.serverless.yml):STAGE}
region: ${opt:region, file(./config.serverless.yml):AWS_REGION}
# deploymentBucket: ${file(./config.serverless.yml):DEPLOYMENT_BUCKET}
deploymentBucket: ${file(./config.serverless.yml):DEPLOYMENT_BUCKET}
environment:
STAGE: ${self:provider.stage}
NODE_ENV: ${self:provider.stage}
@@ -27,18 +25,6 @@ provider:
# # DB_HOST: ${self:custom.DB_CONFIG.${self:custom.STAGE}.DB_HOST}
# # DB_USER: ${self:custom.DB_CONFIG.${self:custom.STAGE}.DB_USER}
# # DB_PASSWORD: ${self:custom.DB_CONFIG.${self:custom.STAGE}.DB_PASSWORD}
#
## iamRoleStatements:
## - Effect: Allow
## Action:
## - dynamodb:DescribeTable
## - dynamodb:Query
## - dynamodb:Scan
## - dynamodb:GetItem
## - dynamodb:PutItem
## - dynamodb:UpdateItem
## - dynamodb:DeleteItem
## Resource: "arn:aws:dynamodb:${opt:region, self:provider.region}:*:*"
apiGateway:
binaryMediaTypes:
- '*/*'
@@ -70,7 +56,7 @@ package:
- .env.prod
- src/templates/**
exclude:
# - node_modules/**
- node_modules/**
- .git/**
- test/**
- e2e/**
@@ -81,7 +67,6 @@ package:
functions:
app: # 람다함수 이름
# 'handler' 모듈은 'src/serverless' 파일에서 export 되어있음
handler: src/serverless.handler
events:
- http:

View File

@@ -11,6 +11,7 @@ import { AppModule } from './app.module';
import express from 'express';
// import { logger } from './core/middleware/logger.middleware';
import cookieParser from 'cookie-parser';
import { ValidationPipe } from '@nestjs/common';
// NOTE: If you get ERR_CONTENT_DECODING_FAILED in your browser, this is likely
// due to a compressed response (e.g. gzip) which has not been handled correctly
@@ -30,6 +31,7 @@ async function bootstrapServer(): Promise<Server> {
nestApp.setGlobalPrefix('v1');
nestApp.use(cookieParser());
nestApp.use(eventContext());
nestApp.useGlobalPipes(new ValidationPipe({ transform: true }));
await nestApp.init();
cachedServer = createServer(expressApp, undefined, binaryMimeTypes);
}
@@ -37,18 +39,6 @@ async function bootstrapServer(): Promise<Server> {
}
export const handler: Handler = async (event: any, context: Context) => {
// 아래 파일 업로드 시 안되는 문제 때문에 추가.
// if (
// event.body &&
// event.headers['Content-Type'] &&
// event.headers['Content-Type'].includes('multipart/form-data')
// ) {
// // before => typeof event.body === string
// console.log('file Upoad 해야 한다.~~~~~~~~~~~~~~~~~~~~ : ', event.body);
// event.body = Buffer.from(event.body, 'binary') as unknown as string;
// // after => typeof event.body === <Buffer ...>
// }
cachedServer = await bootstrapServer();
return proxy(cachedServer, event, context, 'PROMISE').promise;
};