English / 日本語
cdk-cloudfront-function-bundleはAmazon CloudFront Functions (CloudFront Functions)のハンドラ関数を複数の小さなハンドラ関数を連結して構成したいときに役立つライブラリです。
このライブラリはAWS Cloud Development Kit (CDK)バージョン2と一緒に使う想定です。
npm install https://github.com/codemonger-io/cdk-cloudfront-function-bundle.git#v0.1.0このライブラリが定義するメインのクラスBundledCodeはaws-cdk-lib.aws_cloudfront.FunctionCodeのサブクラスなので、BundledCodeのインスタンスをaws-cdk-lib.aws_cloudfront.Functionのcodeプロパティに指定することができます。
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',
},
),
});BundledCodeを作成する例がtest/bundled-code.test.tsにあります。
CloudFront Functionsのハンドラはより小さな独立したユニットに分割するできるケースが多いのではないかと思います。例えば、以下の操作は別々のユニットに分けられます。
Dateヘッダを追加する- URIに
/index.htmlを付け足す
ところが、CloudFront Functionsのイベントタイプ毎(Viewer RequestかViewer Response)にひとつのスクリプトしか割り当てられません。 この制限により全部をひとつのファイルに詰め込まなければならないため、機能の一部を再利用したりオンオフしたりすることが難しくなります。 それぞれのファイルから独立したハンドラを読み込み、それらを連結してスクリプトを構成できたら素敵な気がします。
このライブラリはaws-samples/amazon-cloudfront-multi-function-packagerにインスパイアされたもので、コードの一部を拝借しました。
先方のライブラリでも私のやりたいことはできるかもしれませんが、使用するにはLambda関数をAWS上にデプロイして呼び出さなければなりません。
これはちょっと(私にとっては)やり過ぎです。
CDKのデプロイメントフェーズにハンドラをビルドしてくれるような何かが欲しいところです。
そこで、cdk-cloudfront-function-bundleの出番です。
APIドキュメントはapi-docs/markdownにあります(英語版のみ)。
npm cinpm run buildnpm run build:doc