Skip to content

Latest commit

 

History

History
78 lines (54 loc) · 3.68 KB

File metadata and controls

78 lines (54 loc) · 3.68 KB

English / 日本語

CDK CloudFront Function Bundle

cdk-cloudfront-function-bundleAmazon CloudFront Functions (CloudFront Functions)のハンドラ関数を複数の小さなハンドラ関数を連結して構成したいときに役立つライブラリです。

このライブラリはAWS Cloud Development Kit (CDK)バージョン2と一緒に使う想定です。

cdk-cloudfront-function-bundleをインストールする

npm install https://github.com/codemonger-io/cdk-cloudfront-function-bundle.git#v0.1.0

サンプル

このライブラリが定義するメインのクラスBundledCodeaws-cdk-lib.aws_cloudfront.FunctionCodeのサブクラスなので、BundledCodeのインスタンスをaws-cdk-lib.aws_cloudfront.Functioncodeプロパティに指定することができます。

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ドキュメントはapi-docs/markdownにあります(英語版のみ)。

開発

依存関係の解決

npm ci

ビルド

npm run build

ドキュメントの生成

npm run build:doc