

Here are the response values needed to return a PDF document from the Lambda runtime. Returning PDFs from AWS Lambda FunctionsĪWS Lambda functions control API Gateway responses using a custom JSON response format. HTTP APIs simply need to provide a isBase64Encoded flag in the API response. REST APIs need manual configuration for media types and content handling to support binary responses. Setting up a HTTP endpoint to return binary content is simpler using HTTP than REST APIs. no request validation, X-Ray support or private endpoints. HTTP APIs (announced in 2019) are simpler, cheaper and faster than the older-style REST APIs, but with a restricted set of features, e.g. bind( buffers))īinary Content with HTTP APIs using AWS API GatewayĪWS’s API Gateway service supports two types of API endpoints - HTTP or REST APIs. Here is all the JavaScript you need to create this custom PDF.Ĭonst options = Ĭonst doc = new PDFDocument( options). The library had a really simple API for generating PDFs from dynamic content. No native libraries to compile or external dependencies needed. It was a good choice for a serverless application for the following reasons: There are numerous Node.js libraries for generating PDFs including PDFKit, pdf-lib and HummusJS. Here’s how I did it… Creating custom PDF documents in Node.js I hadn’t previously built anything that generated PDFs dynamically (let alone using serverless) but discovered how easy this was to do on AWS Lambda using PDFKit and HTTP APIs with API Gateway. API responses had to include the document’s binary contents directly, rather than forwarding to an external storage service. PDFs would be accessed via a HTML link from an internal web-app. Custom PDFs needed to be created in real-time with dynamic content from an internal data source. I recently had this exact use-case on a client project. How can you return dynamically generated PDF documents as HTTP responses from serverless functions?
