=== start new shit ===
More details on compiling libreoffice for Lambda
Lambda AMI
The most important detail is getting the correct AMI; the AMI that runs lambda functions.
steps:
- created ec2
c5.4xlarge
with 30GB of storage using the Lambda AMI - ssh into the new server
- generated ssh key,
ssh-keygen
- added the new key to my github account
- cloned the repo
git clone git@github.com:jbastias/serverless-libreoffice.git
- cd serverless-libreoffice
- remove the following options from
./autogen.sh
command incompile.sh
:- --with-system-expat
- --with-system-curl
- --with-system-nss
- --with-system-openssl
chmod +x compile.sh
./compile
- go for a long walk, followed by a long coffee and then followed by long lunch :P
Building Libreoffice
=== end new shit ===
Serverless LibreOffice
Show Me the Code
This repo contains code used to run the online demo.
├── compile.sh <-- commands used to compile LibreOffice for Lambda
├── infra <-- terraform config to deploy example Lambda
│ ├── iam.tf
│ ├── lambda.tf
│ ├── main.tf
│ ├── s3.tf
│ └── vars.tf
└── src <-- example Lambda function node in Node.js used for website demo
├── handler.js
├── libreoffice.js
├── logic.js
├── package.json <-- put lo.tar.gz in this folder to deploy. Download it below
└── s3.js
Compiled and ready to use archive can be downloaded under Releases section.
How To Help
Reduce Cold Start Time
Currently ƛ unpacks 109 MB .tar.gz to /tmp
folder which takes ~1-2 seconds on cold start.
Would be nice to create a single compressed executable to save unpack time and increase portability. I tried using Ermine packager and it works!! But unfortunately this is commercial software. Similar open-source analogue Statifier produces broken binaries.
Maybe someone has another idea how to create a single executable from a folder full of shared objects.
UPD: TODO: Check out node-packer and libsquash (no FUSE required!)
Further Size Reduction
I am not a Linux or C++ expert, so for sure I missed some easy "hacks" to reduce size of compiled LibreOffice.
Mostly I just excluded from compilation as much unrelated stuff as possible. And stripped symbols from shared objects.
Here is the list of: available RPM packages and libraries available in AWS Lambda Environment, which can be helpful.
Similar Projects
License
MIT © Vlad Holubiev