Home

Awesome

CDK Bundle Analyzer

A library that delivers tools to analyze the bundle size of TypeScript/JavaScript CDK functions.

Prerequisites 📓

  1. Use the NodejsFunction construct to define functions
  2. Have local bundling enabled. Basically, this means that the bundling of the lambdas is done on the machine, not inside a docker container. To achieve that, esbuild must be installed in the project. Follow the link above for more details.

Usage 📦

Install with

pnpm add -D cdk-bundle-analyzer

Add the following CDK aspect after the CDK app definition:

import { NodeJsFunctionBundleAnalyzerAspect } from 'cdk-bundle-analyzer';

const app = new App();

// ...

Aspects.of(app).add(new NodeJsFunctionBundleAnalyzerAspect());

Add the metafile option to the NodejsFunction to analyze:

new NodejsFunction(this, 'MyFunction', {
  entry: 'src/index.ts',
  bundling: {
    // ...
    metafile: true,
  }
});

Run the following command to analyze the bundle:

cdk synth --quiet -c analyze=MyFunction

A browser window will open with the bundle size analysis 🎉

Options 🛠

For easier DX, the options must be passed as CDK context variables, directly when running the cdk synth command.

The following options are available:

analyze

The name of the function to analyze. If not specified, no function will be analyzed.

Example:

cdk synth --quiet -c analyze=MyFunction

template

The bundle template to use. Should be one of sunburst, treemap, network. Defaults to treemap.

Example:

cdk synth --quiet -c analyze=MyFunction -c template=sunburst

Custom NodejsFunction construct 🏗️

If using a custom construct that extends the NodejsFunction construct, simply pass the custom construct that extends the NodejsFunction construct to the NodeJsFunctionBundleAnalyzerAspect constructor.

For example:

import { NodeJsFunctionBundleAnalyzerAspect } from 'cdk-bundle-analyzer';

const app = new App();

// ...

class MyCustomNodejsFunction extends NodejsFunction {
  // ...
}

// ...

Aspects.of(app).add(
  new NodeJsFunctionBundleAnalyzerAspect({
    customFunctionConstruct: MyCustomNodejsFunction,
  }),
);

Remarks 📝

Using the Serverless Framework instead of the CDK? 🤔

No worries! Check out my plugin serverless-analyze-bundle-plugin that does the same thing for the Serverless Framework 🚀