[backend-api] Add lambda layer libs
This commit is contained in:
1
.idea/modules.xml
generated
1
.idea/modules.xml
generated
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
3
backend-api-libs-lambda-layer/config.yml
Normal file
3
backend-api-libs-lambda-layer/config.yml
Normal file
@@ -0,0 +1,3 @@
|
||||
AWS_REGION: ap-northeast-2
|
||||
STAGE: dev
|
||||
DEPLOYMENT_BUCKET: deploy-vanilla-serverless
|
||||
16307
backend-api-libs-lambda-layer/package-lock.json
generated
Normal file
16307
backend-api-libs-lambda-layer/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
104
backend-api-libs-lambda-layer/package.json
Normal file
104
backend-api-libs-lambda-layer/package.json
Normal 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"
|
||||
}
|
||||
}
|
||||
26
backend-api-libs-lambda-layer/serverless.yml
Normal file
26
backend-api-libs-lambda-layer/serverless.yml
Normal 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
|
||||
10
backend-api/.gitignore
vendored
10
backend-api/.gitignore
vendored
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user