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