[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">
|
<project version="4">
|
||||||
<component name="ProjectModuleManager">
|
<component name="ProjectModuleManager">
|
||||||
<modules>
|
<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" />
|
<module fileurl="file://$PROJECT_DIR$/.idea/vanillameta.iml" filepath="$PROJECT_DIR$/.idea/vanillameta.iml" />
|
||||||
</modules>
|
</modules>
|
||||||
</component>
|
</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정보
|
#db정보
|
||||||
/config.serverless.yml
|
config.serverless.yml
|
||||||
/.env.dev
|
.env.dev
|
||||||
/.env.prod
|
.env.prod
|
||||||
/.ormconfig.json
|
.ormconfig.json
|
||||||
/vanillameta
|
vanillameta
|
||||||
.
|
.
|
||||||
# compiled output
|
# compiled output
|
||||||
/dist
|
/dist
|
||||||
|
|||||||
@@ -14,12 +14,10 @@ provider:
|
|||||||
## memorySize: 512 - 기본은 512
|
## memorySize: 512 - 기본은 512
|
||||||
timeout: 10
|
timeout: 10
|
||||||
layers:
|
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:VanillaMetaApiNodeLibs: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
|
|
||||||
stage: ${opt:stage, file(./config.serverless.yml):STAGE}
|
stage: ${opt:stage, file(./config.serverless.yml):STAGE}
|
||||||
region: ${opt:region, file(./config.serverless.yml):AWS_REGION}
|
region: ${opt:region, file(./config.serverless.yml):AWS_REGION}
|
||||||
# deploymentBucket: ${file(./config.serverless.yml):DEPLOYMENT_BUCKET}
|
deploymentBucket: ${file(./config.serverless.yml):DEPLOYMENT_BUCKET}
|
||||||
environment:
|
environment:
|
||||||
STAGE: ${self:provider.stage}
|
STAGE: ${self:provider.stage}
|
||||||
NODE_ENV: ${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_HOST: ${self:custom.DB_CONFIG.${self:custom.STAGE}.DB_HOST}
|
||||||
# # DB_USER: ${self:custom.DB_CONFIG.${self:custom.STAGE}.DB_USER}
|
# # DB_USER: ${self:custom.DB_CONFIG.${self:custom.STAGE}.DB_USER}
|
||||||
# # DB_PASSWORD: ${self:custom.DB_CONFIG.${self:custom.STAGE}.DB_PASSWORD}
|
# # 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:
|
apiGateway:
|
||||||
binaryMediaTypes:
|
binaryMediaTypes:
|
||||||
- '*/*'
|
- '*/*'
|
||||||
@@ -70,7 +56,7 @@ package:
|
|||||||
- .env.prod
|
- .env.prod
|
||||||
- src/templates/**
|
- src/templates/**
|
||||||
exclude:
|
exclude:
|
||||||
# - node_modules/**
|
- node_modules/**
|
||||||
- .git/**
|
- .git/**
|
||||||
- test/**
|
- test/**
|
||||||
- e2e/**
|
- e2e/**
|
||||||
@@ -81,7 +67,6 @@ package:
|
|||||||
|
|
||||||
functions:
|
functions:
|
||||||
app: # 람다함수 이름
|
app: # 람다함수 이름
|
||||||
# 'handler' 모듈은 'src/serverless' 파일에서 export 되어있음
|
|
||||||
handler: src/serverless.handler
|
handler: src/serverless.handler
|
||||||
events:
|
events:
|
||||||
- http:
|
- http:
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import { AppModule } from './app.module';
|
|||||||
import express from 'express';
|
import express from 'express';
|
||||||
// import { logger } from './core/middleware/logger.middleware';
|
// import { logger } from './core/middleware/logger.middleware';
|
||||||
import cookieParser from 'cookie-parser';
|
import cookieParser from 'cookie-parser';
|
||||||
|
import { ValidationPipe } from '@nestjs/common';
|
||||||
|
|
||||||
// NOTE: If you get ERR_CONTENT_DECODING_FAILED in your browser, this is likely
|
// 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
|
// 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.setGlobalPrefix('v1');
|
||||||
nestApp.use(cookieParser());
|
nestApp.use(cookieParser());
|
||||||
nestApp.use(eventContext());
|
nestApp.use(eventContext());
|
||||||
|
nestApp.useGlobalPipes(new ValidationPipe({ transform: true }));
|
||||||
await nestApp.init();
|
await nestApp.init();
|
||||||
cachedServer = createServer(expressApp, undefined, binaryMimeTypes);
|
cachedServer = createServer(expressApp, undefined, binaryMimeTypes);
|
||||||
}
|
}
|
||||||
@@ -37,18 +39,6 @@ async function bootstrapServer(): Promise<Server> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const handler: Handler = async (event: any, context: Context) => {
|
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();
|
cachedServer = await bootstrapServer();
|
||||||
return proxy(cachedServer, event, context, 'PROMISE').promise;
|
return proxy(cachedServer, event, context, 'PROMISE').promise;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user