Skip to content
This repository has been archived by the owner on Mar 14, 2020. It is now read-only.

🆗 Run Google Chrome Lighthouse on AWS Lambda.

License

Notifications You must be signed in to change notification settings

joytocode/lighthouse-lambda

This branch is 3 commits ahead of, 13 commits behind master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

2687f7c Â· Aug 4, 2018

History

24 Commits
Mar 24, 2018
Aug 4, 2018
Aug 4, 2018
Mar 24, 2018
May 5, 2018
Aug 4, 2018
Aug 4, 2018
Aug 4, 2018
Aug 4, 2018

Repository files navigation

joytocode/lighthouse-lambda

Run Google Chrome Lighthouse on AWS Lambda.

Versions

Since version 2.x, lighthouse-lambda has the same major version of lighthouse. For example, lighthouse-lambda 2.x will use lighthouse 2.x.

This README is for version 2.x. To see latest version, visit https://github.com/joytocode/lighthouse-lambda.

Installation

$ npm install lighthouse-lambda@archived-v2 --save

Lambda function

// index.js

const createLighthouse = require('lighthouse-lambda')

exports.handler = function (event, context, callback) {
  Promise.resolve()
    .then(() => createLighthouse('https://example.com', { logLevel: 'info' }))
    .then(({ chrome, start, createReport }) => {
      return start()
        .then((results) => {
          // Do something with `results`
          const html = createReport(results)
          // Do something with the html report
          return chrome.kill().then(() => callback(null))
        })
        .catch((error) => {
          // Handle errors when running Lighthouse
          return chrome.kill().then(() => callback(error))
        })
    })
    // Handle other errors
    .catch(callback)
}

Testing locally

You can use docker-lambda to test your Lambda function locally.

$ docker run --rm -v "$PWD":/var/task lambci/lambda:nodejs8.10 index.handler

Deployment

You can use docker-lambda to install dependencies and pack your Lambda function.

$ docker run --rm -v "$PWD":/var/task lambci/lambda:build-nodejs8.10 bash -c "rm -rf node_modules && npm install"

$ docker run --rm -v "$PWD":/var/task lambci/lambda:build-nodejs8.10 bash -c "rm -f *.zip && zip lambda.zip -r node_modules index.js package.json"
  • The file will be big (at least 75MB), so you need to upload it to S3 then deploy to Lambda from S3.
  • You should allocate at least 512 MB memory and 15 seconds timeout to the function.

API

createLighthouse(url, [options], [config])

Same parameters as Using Lighthouse programmatically.

Returns a Promise of an Object with the following fields:

  • chrome: an instance of chromeLauncher.launch(), remember to call chrome.kill() in the end.
  • log: an instance of lighthouse-logger (only if you set options.logLevel).
  • start(options): a function to start the scan which returns a Promise of Lighthouse results.
    • options.saveArtifacts: a flag to indicate whether result artifacts should be saved (default: false).
  • createReport(results): a function to create html report from Lighthouse results.

Credits

lighthouse-lambda uses the Headless Chrome binary (stable version) from @serverless-chrome/lambda.

License

MIT