Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/RafalWilinski/serverless-puppeteer-layers

Serverless Framework + AWS Lambda Layers + Puppeteer = ❤️
https://github.com/RafalWilinski/serverless-puppeteer-layers

aws-lambda chrome headless layers puppeteer serverless

Last synced: 11 days ago
JSON representation

Serverless Framework + AWS Lambda Layers + Puppeteer = ❤️

Awesome Lists containing this project

README

        

# Serverless Puppeteer using AWS Lambda Layers




Twitter: rafalwilinski

> Recently AWS introduced [Layers](https://aws.amazon.com/about-aws/whats-new/2018/11/aws-lambda-now-supports-custom-runtimes-and-layers/) which enables sharing common code between functions and working with large dependencies (such as headless chrome) much easier.

This project example returns a screenshot of page requested via `?address=` query parameter.

![Demo](assets/demo.gif?raw=true 'Demo')

### Usage

It is very important to tell NPM to skip installing chromium from `puppeteer` package. To do so, installing dependencies should be done using this command:

```sh
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 npm install
```

or

```sh
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 yarn
```

Without this, your function size would be more than 200MB which is way too much.

After that, you can simply deploy your funciton.

```sh
sls deploy

curl ?address=https://google.com
```

or apply this ARN to your function directly: `arn:aws:lambda:us-east-1:085108115628:layer:chrome:6`

### Bundling latest Chromium on your own

Prerequisites:

- `brotli`

```sh
./download-latest.sh
```

Credits for this solution go to [San Kumar](https://github.com/san-kumar)

### Author

👤 **Rafal Wilinski**

- Twitter: [@rafalwilinski](https://twitter.com/rafalwilinski)
- Github: [@RafalWilinski](https://github.com/RafalWilinski)

### Show your support

Give a ⭐️ if this project helped you!