lambdafs
Version:
Efficient (de)compression package for AWS Lambda
98 lines (62 loc) • 3.29 kB
Markdown
[](https://www.npmjs.com/package/lambdafs)
[](https://www.typescriptlang.org/dt/search?search=lambdafs)
[](https://paypal.me/alixaxel)
Efficient (de)compression package for AWS Lambda, supporting **Brolti**, **Gzip** and **Tarballs**
```shell
npm install lambdafs --save-prod
```
This package provides a [`brotli` CLI command](/bin) to conveniently compress files and/or folders.
```shell
npx lambdafs /path/to/compress
```
The resulting file will be a (potentially tarballed) Brotli compressed file, with the same base name as the source.
> Due to the highest compression level, it might take a while to compress large files (100MB ~ 5 minutes).
## Usage
The `nodejs12.x` or `nodejs14.x` AWS Lambda runtime is required for this package to work properly.
```javascript
const lambdafs = require('lambdafs');
exports.handler = async (event, context) => {
try {
let file = __filename; // /var/task/index.js
let folder = __dirname; // /var/task
// Compressing
let compressed = {
file: await lambdafs.deflate(file), // /tmp/index.js.gz
folder: await lambdafs.deflate(folder), // /tmp/task.tar.gz
};
// Decompressing
let decompressed = {
file: await lambdafs.inflate(compressed.file), // /tmp/index.js
folder: await lambdafs.inflate(compressed.folder), // /tmp/task
};
return context.succeed({ file, folder, compressed, decompressed });
} catch (error) {
return context.fail(error);
}
};
```
Compresses a file/folder with Gzip and returns the path to the compressed (tarballed) file.
> The resulting file will be saved under the default temporary directory (`/tmp` on AWS Lambda).
Due to costly execution time on AWS Lambda, Gzip is *always* used to compress files.
### `inflate(path: string): Promise<string>`
Decompresses a (tarballed) Brotli or Gzip compressed file and returns the path to the decompressed file/folder.
> The resulting file(s) will be saved under the default temporary directory (`/tmp` on AWS Lambda).
Supported extensions are: `.br`, `.gz`, `.tar`, `.tar.br` (and `.tbr`), `.tar.gz` (and `.tgz`).
> For tarballs, original file modes are perserved. For any other files `0700` is assumed.
## Rationale
Getting large resources onto AWS Lambda can be a challenging task due to the [deployment package size limit](https://docs.aws.amazon.com/lambda/latest/dg/limits.html#w291aac11c35c15):
| Limit | Context |
| ------ | --------------------------- |
| 50 MB | Zipped, for direct uploads. |
| 250 MB | Unzipped, S3 and layers. |
For this reason, it's important to achieve a very high compression ratio as well as fast decompression times.
This is where the [Brotli algorithm](https://www.opencpu.org/posts/brotli-benchmarks/) comes in:

It allows us to get the best compression ratio and fast decompression times (at the expense of a slow compression).
## License
MIT