Run Hapi server on AWS Lambda
npm install --save @tepez/hapi-lambda-handler
// handler.js
const HapiLambdaHandler = require('@tepez/hapi-lambda-handler');
const Hapi = require('hapi');
cosnt server = new Hapi.Server();
server.connection({});
server.route({
method: 'GET',
path: '/health',
handler: (request, reply) => reply({ status: 'ok' })
});
exports.handler = HapiLambdaHandler.handlerFromServer(server);
Return a Lambda Proxy handler function that handles event, context and callback as passed by a lambda-proxy integration of AWS Api Gateway.
-
server
: The Hapi server or a promise to it if it has to be initialized first.It is the responsibility of the using package to report initialization errors in the server. If the promise to the server rejects, 500 errors will be returned for every request.
-
injectOptions
:-
basePath: string
If the API is deployed under a custom path mapping this should be the basePath, e.g. '/v1.0'.
-
modifyRequest: (event: APIGatewayEvent, context: Context, request: ServerInjectOptions) => void
A synchronous callback receiving the
event
, thecontext
and therequest
just before injecting it to the Hapi server. This is a chance to modify the request in-place, e.g. to apply credentials to it.
-
Sometimes we need to wait for some processes to finish before returning the response to APIGateway, e.g. report an error to Sentry.
Hapi 17 dropped support for request tails, which was the method we used before.
You can create an array of promises on request.app.tailPromises
, the handler will
wait for them with Promise.all()
before returning the response.
function handler(request: IRequestWithTailPromises) => {
// ...
if (!request.app.tailPromises) request.app.tailPromises = [];
request.app.tailPromises.push(somePromise);
}