English / 日本語
cdk-cloudfront-function-bundle is a library that helps you compose a handler function for Amazon CloudFront Functions (CloudFront Functions) by chaining multiple smaller handler functions.
This library is supposed to be used with the AWS Cloud Development Kit (CDK) version 2.
npm install https://github.com/codemonger-io/cdk-cloudfront-function-bundle.git#v0.1.0As the main class BundledCode defined in this library is a subclass of aws-cdk-lib.aws_cloudfront.FunctionCode, you can specify an instance of BundledCode to code property of aws-cdk-lib.aws_cloudfront.Function:
import { aws_cloudfront as cloudfront } from 'aws-cdk-lib';
import { BundledCode } from 'cdk-cloudfront-function-bundle';
new cloudfront.Function(this, 'Function', {
code: new BundledCode(
{
filePath: 'handlers/add-date.js',
handler: 'addDate',
},
{
filePath: 'handlers/supplement-index.js',
handler: 'supplementIndex',
},
),
});You can find an example that creates a BundledCode in test/bundled-code.test.ts.
I think a CloudFront Functions handler may often be decomposed into independent smaller units of handlers; for instance, the following manipulations can be separate units:
- adding
Dateheader - supplementing trailing
/index.htmlto the URI
However, we can assign only one script as CloudFront Functions per event type (viewer request or response). This restriction makes it hard to reuse or turn on/off part of features because we have to put everything in one file. It would be nice if we could compose a script by chaining independent handlers described in individual files.
This library was inspired by aws-samples/amazon-cloudfront-multi-function-packager, and I borrowed some code from it.
Their library could do what I wanted to do, however, I had to deploy and invoke a Lambda function on AWS to use it.
This was overkill for me.
I needed something that can build a handler during the deployment phase of the CDK.
So cdk-cloudfront-function-bundle comes in.
You can find the API documentation in api-docs/markdown.
npm cinpm run buildnpm run build:doc