CloudFrontディストリビューションでAWS Lambda@Edge関数を管理するためのシンプルで効率的なコントローラーです。
Lambda@Edge Function Controllerは、CloudFrontディストリビューションにLambda@Edge関数を簡単にアタッチ/デタッチするためのTypeScriptライブラリです。複雑なCloudFront設定の更新を自動的に処理し、CDNセットアップでエッジ関数を簡単に管理できるようにします。
- シンプルなAPI: Lambda@Edge関数のアタッチ/デタッチが簡単
- イベントタイプ対応: すべてのLambda@Edgeイベントタイプをサポート(viewer-request, viewer-response, origin-request, origin-response)
- 自動設定: CloudFrontディストリビューション設定の自動生成と更新
- TypeScript対応: 包括的な型定義による完全なTypeScriptサポート
- AWS SDK v3: 最新のAWS SDK for JavaScript v3で構築
- ログ機能: デバッグとモニタリングのためのBunyanによる組み込みログ
- 柔軟な設定: カスタムAWSクライアントと設定のサポート
- A/Bテスト: テスト用に異なるLambda@Edge関数を素早く切り替え
- フィーチャーフラグ: 再デプロイなしでエッジの機能を有効/無効化
- セキュリティ更新: エッジ関数にセキュリティパッチを迅速にデプロイ
- パフォーマンス最適化: 異なるエッジ関数設定をテスト
- 開発ワークフロー: 異なる環境間でエッジ関数を管理
- 災害復旧: 以前のエッジ関数バージョンに素早くロールバック
npm install lambda-edge-controller
# または
yarn add lambda-edge-controllerimport { LambdaEdgeController } from 'lambda-edge-controller';
// コントローラーインスタンスを作成
const controller = new LambdaEdgeController(
'arn:aws:lambda:us-east-1:123456789012:function:my-edge-function:1',
'viewer-request'
);
// Lambda@Edge関数をCloudFrontディストリビューションにアタッチ
await controller.attachEdgeFunction('E1234567890ABCD');
// Lambda@Edge関数をCloudFrontディストリビューションからデタッチ
await controller.detachEdgeFunction('E1234567890ABCD');import { LambdaEdgeController } from 'lambda-edge-controller';
import { CloudFrontClient } from '@aws-sdk/client-cloudfront';
// カスタムCloudFrontクライアントを作成
const cloudfrontClient = new CloudFrontClient({
region: 'us-east-1',
credentials: {
accessKeyId: 'YOUR_ACCESS_KEY',
secretAccessKey: 'YOUR_SECRET_KEY'
}
});
// カスタムクライアントでコントローラーを作成
const controller = new LambdaEdgeController(
'arn:aws:lambda:us-east-1:123456789012:function:my-edge-function:1',
'viewer-request',
{ cloudfront: cloudfrontClient }
);
// デバッグログを有効化
controller.enableDebugger();
// エッジ関数をアタッチ
await controller.attachEdgeFunction('E1234567890ABCD');new LambdaEdgeController(
lambdaArn: string,
eventType?: EventType,
client?: ControllerClient
)パラメーター:
lambdaArn: Lambda@Edge関数のARNeventType: CloudFrontイベントタイプ(デフォルト: 'viewer-request')client: オプションのカスタムAWSクライアント
イベントタイプ:
viewer-request: CloudFrontがオリジンにリクエストを転送する前に実行viewer-response: CloudFrontがビューアーにレスポンスを返す前に実行origin-request: CloudFrontがオリジンにリクエストを転送する前に実行origin-response: CloudFrontがオリジンからレスポンスを受信した後に実行
指定されたCloudFrontディストリビューションにLambda@Edge関数をアタッチします。
指定されたCloudFrontディストリビューションからLambda@Edge関数を削除します。
デバッグ目的で詳細なログを有効化します。
詳細なログを無効化します。
このプロジェクトには、examples/ディレクトリに包括的な例とテストユーティリティが含まれています。
- 依存関係のインストール:
# プロジェクト依存関係のインストール
npm install
# 例の依存関係のインストール
cd examples
npm install- ライブラリのビルド:
# プロジェクトルートから
npm run build- 環境設定:
cd examples
npm run setup
# これでenv.exampleから.envファイルが作成されます- .envファイルの編集:
# 必須設定
LAMBDA_ARN=arn:aws:lambda:us-east-1:123456789012:function:my-edge-function:1
CLOUDFRONT_DISTRIBUTION_ID=E1234567890ABCD
# オプション設定
EVENT_TYPE=viewer-request
AWS_REGION=us-east-1
AWS_PROFILE=default
DEBUG=true# すべてのユニットテストを実行
npm test
# ウォッチモードでテストを実行
npm run test:watch
# カバレッジ付きでテストを実行
npm run test:dev# 包括的な統合テストを実行
cd examples
npm test
# または直接実行
node aws-test.js# 特定の機能をテスト
node -e "
const { LambdaEdgeController } = require('../dist/index.js');
const controller = new LambdaEdgeController('your-lambda-arn', 'viewer-request');
console.log('コントローラーが正常に作成されました');
"examplesディレクトリは以下を提供します:
- 基本テスト: コントローラーの作成と設定検証
- 高度なテスト: カスタムAWSクライアント設定
- 統合テスト: 実際のAWS環境でのテスト
- エラーハンドリング: 包括的なエラーシナリオ
- 設定検証: 環境セットアップの検証
- Node.js >= 14.0.0
- CloudFront権限を持つAWS認証情報
- TypeScriptの知識
# 依存関係のインストール
npm install
# リンターの実行
npm run lint
npm run lint --fix
# テストの実行
npm test
npm run test:watch
# ビルド
npm run build
# ドキュメントの生成
npm run doc{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudfront:GetDistribution",
"cloudfront:UpdateDistribution"
],
"Resource": "*"
}
]
}このライブラリは3つの主要コンポーネントで構成されています:
- LambdaEdgeController: エッジ関数を管理するメインコントローラークラス
- ConfigUpdator: CloudFront設定更新を処理
- Models: TypeScriptインターフェースとタイプ
LambdaEdgeController
├── CloudFrontClient (AWS SDK)
├── ConfigUpdator
└── Logger (Bunyan)
ConfigUpdator
├── Lambda ARN管理
├── イベントタイプ処理
└── ディストリビューション設定更新
- リポジトリをフォーク
- フィーチャーブランチを作成
- コミットメッセージの規則に従う(Conventional Commits)
- テストとリンターを実行
- プルリクエストを提出
git commit -m "<type>[optional scope]: <description>
[optional body]
[optional footer]"タイプ:
feat: 新機能fix: バグ修正docs: ドキュメント変更style: コードスタイル変更refactor: コードリファクタリングtest: テストの追加または更新chore: メンテナンスタスク
MITライセンス - 詳細はLICENSEファイルを参照してください。
- Issues: GitHub Issues
- ドキュメント: 生成されたドキュメント
- 例: 例ディレクトリ
English version: README.md