I have been having problems getting data from the parameterStore, but they have not been successful and lambda is waiting for the response of the ssm.
Basically I have this code
lambda.js
const serverlessExpress = require('@vendia/serverless-express')
const { Context, Handler } = require('aws-lambda');
var credentials;
var data;
const { getEncryptedParameter } = require('./parameterStore')
let cachedServer;
const app = require('./app')
async function obtainsData() {
try {
if (!credentials) {
console.log("getting credential!!!!")
credentials = await getEncryptedParameter('my_parameter')
} else {
console.log("context!!!!")
}
return credentials;
} catch (error) {
console.log("error obtainCredentials", error)
}
}
async function toServer() {
if (!cachedServer) {
data = await obtainsData();
console.log(data)
process.env.RDS_PASSWORD = data ? data : null
cachedServer = serverlessExpress({ app });
}
return cachedServer;
}
exports.handler = async (event, context, callback) => {
const server = await toServer();
console.log("after await")
return server(event, context, callback);
};
parameterStore.js
const { SSM } = require("aws-sdk");
const getParameterWorker = async (name, decrypt) => {
const ssm = new SSM({region: process.env.REGION || 'us-east-2'});
const result = await ssm
.getParameter({ Name: name, WithDecryption: decrypt })
.promise();
return result.Parameter.Value;
}
async function getParameter(name) {
return await getParameterWorker(name,false);
}
async function getEncryptedParameter (name) {
return await getParameterWorker(name,true);
}
module.exports = {
getParameter,
getEncryptedParameter
}
app.js
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
const { getCurrentInvoke } = require('@vendia/serverless-express')
var usersRouter = require('./routes/users');
const { event, context } = getCurrentInvoke()//event and context from lambda
var app = express();
//const router = express.Router()
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use('/users', usersRouter);
app.use(function (req, res, next) {
res.status(404);
res.json({ "error": { "statusCode": "404", "code": "path unrecognized" } });
});
app.use(function (err, req, res, next) {
res.status(500);
res.json({ "status": "error", "msg": err.toString() });
});
module.exports = app;
users.js
var express = require('express');
var router = express.Router();
router.get('/sample/test', async function (req, res, next) {
console.log("testing.....")
});
module.exports = router;
Testing inside lambda the answer is...
Version: $LATEST
INFO getting credential!!!!
END RequestId:
ask timed out after 180.02 seconds
Any idea why it doesn't go over toServer?
PD: Lambda has read permissions for any resource in aws/parameterStore