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