|
|
|
/**
|
|
|
|
* 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;
|