mirror of https://github.com/nocodb/nocodb
Bert Verhelst
7 years ago
1 changed files with 81 additions and 0 deletions
@ -0,0 +1,81 @@
|
||||
/** |
||||
* I was able to get xmysql to work on AWS lambda. This is just some docs on the process to help others. |
||||
* AWS setup notes: |
||||
* * The deploy uses serverless: https://serverless.com/framework/docs/getting-started/
|
||||
* * The lambda function is accessed through API Gateway and access the RDS (mysql) database |
||||
* ** Make sure you deploy your API Gateway setup otherwise it won't be accessible. |
||||
* * The security setup: |
||||
* ** You need to put your lambda in a VPC |
||||
* ** The lambda role needs access to the VPC |
||||
* ** The RDS server has to be inside the VPC as well |
||||
* |
||||
* Performance: |
||||
* * Requests to the API Gateway resolve in ~ 90ms |
||||
* |
||||
* Extra packages needed: |
||||
* * serverless-http |
||||
* |
||||
* More info on deploying this to lambda: |
||||
* * https://serverless.com/blog/serverless-express-rest-api/
|
||||
*/ |
||||
|
||||
"use strict"; |
||||
Object.defineProperty(exports, "__esModule", {value: true}); |
||||
var bodyParser = require("body-parser"); |
||||
var express = require("express"); |
||||
var serverless = require('serverless-http'); |
||||
var cors = require("cors"); |
||||
var mysql = require('mysql'); |
||||
var Xapi = require('./node_modules/xmysql/lib/xapi.js'); |
||||
var morgan = require('morgan'); |
||||
var app = express(); |
||||
|
||||
var onXapiInitialized = new Promise(function (resolve, reject) { |
||||
try { |
||||
// /**************** START : setup express ****************/
|
||||
app.use(morgan('tiny')); |
||||
app.use(cors()); |
||||
app.use(bodyParser.json()); |
||||
app.use(bodyParser.urlencoded({ |
||||
extended: true |
||||
})); |
||||
// /**************** END : setup express ****************/
|
||||
|
||||
app.use(function (req, res, next) { |
||||
// You can add authentication here
|
||||
console.log('Received request for: ' + req.url, req); |
||||
next(); |
||||
}); |
||||
|
||||
var mysqlConfig = { |
||||
host: config.mysql.host, |
||||
port: 3306, |
||||
database: config.mysql.database, |
||||
user: config.mysql.user, |
||||
password: config.mysql.password, |
||||
apiPrefix: '/', |
||||
ipAddress: 'localhost', |
||||
portNumber: 3000, |
||||
ignoreTables: [], |
||||
storageFolder: __dirname |
||||
}; |
||||
|
||||
var mysqlPool = mysql.createPool(mysqlConfig); |
||||
var xapi = new Xapi(mysqlConfig, mysqlPool, app); |
||||
xapi.init(function (err, results) { |
||||
app.listen(3000); |
||||
resolve(); |
||||
}); |
||||
} |
||||
catch (err) { |
||||
reject(err); |
||||
} |
||||
}); |
||||
|
||||
function handler(event, context, callback) { |
||||
onXapiInitialized.then(function () { |
||||
serverless(app)(event, context, callback); |
||||
}); |
||||
} |
||||
|
||||
exports.handler = handler; |
Loading…
Reference in new issue