You can run jsreport serverlessly in AWS Lambda. This is the very convenient way to run cheap and automatically scalable reports rendering without a need for paying for the actual servers.
This documentation helps you with creating the AWS Lambda running jsreport, deploying templates and remote invocation of the rendering.
We prepared starter github repository jsreport-aws-lambda-starter-kit for you. The first you need to clone it.
git clone https://github.com/jsreport/jsreport-aws-lambda-starter-kit.git
Install dependencies and start jsreport...
npm i
npm start
On Linux, make sure you have the required chrome shared libraries mentioned in the install docs.
Then open http://localhost:5488
and prepare jsreport templates the same way you would do when running normal jsreport.
The best way is to create lambda layer with node_modules folder and then have just templates and configs inside the lambda function package itself. There is createLambdaLayer.js
script that helps you with that.
Call it using
node createLambdaLayer.js
Then log in to aws console and upload the prepared layer.zip
to a s3 bucket.
Then create aws lambda layer referencing the uploaded zip with nodejs 12.x runtime.
The next step is preparing the lambda package. This can be done using the following script.
node createLambdaPackage.js
Then create lambda function with the prepared lambda.zip
and merging the previously created layer.
We recommend also increasing the memory and timeout to reflect your needs.
It is up to you how you want to integrate the lambda function. It expects the standard jsreport rendering request as the parameter and outputs base64 encoded report output. You can invoke it using many approaches AWS supports like AWS CLI or a specific language SDK. However, we prepared script which uses AWS node.js SDK to invoke the lambda function and you can use it for testing.
node test.js
report.pdf
was properly rendered