|
| 1 | +const { LambdaEdgeController } = require('../dist/index.js'); |
| 2 | +const { CloudFrontClient } = require('@aws-sdk/client-cloudfront'); |
| 3 | +const config = require('./config'); |
| 4 | + |
| 5 | +// 統合されたLambda@Edge Controller テストスクリプト |
| 6 | +async function runAllTests() { |
| 7 | + try { |
| 8 | + console.log('🚀 Lambda@Edge Controller の統合テストを開始します...\n'); |
| 9 | + |
| 10 | + // 設定の検証 |
| 11 | + try { |
| 12 | + config.validate(); |
| 13 | + console.log('✅ 設定の検証が完了しました:'); |
| 14 | + console.log(` Lambda ARN: ${config.lambdaArn}`); |
| 15 | + console.log(` CloudFront Distribution ID: ${config.distributionId}`); |
| 16 | + console.log(` イベントタイプ: ${config.eventType}\n`); |
| 17 | + } catch (error) { |
| 18 | + console.error('❌ 設定エラー:', error.message); |
| 19 | + console.log('\n💡 .envファイルの設定を確認してください'); |
| 20 | + console.log(' 例: cp env.example .env で.envファイルを作成し、実際の値を設定してください'); |
| 21 | + return; |
| 22 | + } |
| 23 | + |
| 24 | + // ===== 1. 基本テスト ===== |
| 25 | + console.log('📋 1. 基本テスト - コントローラーの作成と設定確認'); |
| 26 | + console.log('-'.repeat(50)); |
| 27 | + |
| 28 | + // 各イベントタイプでコントローラーを作成 |
| 29 | + const eventTypes = ['viewer-request', 'viewer-response', 'origin-request', 'origin-response']; |
| 30 | + const controllers = {}; |
| 31 | + |
| 32 | + for (const eventType of eventTypes) { |
| 33 | + console.log(`\n 📝 ${eventType} イベントタイプでコントローラーを作成中...`); |
| 34 | + |
| 35 | + const lambdaArn = `${config.lambdaArn.replace(/:\d+$/, '')}:${eventType === 'viewer-request' ? '1' : '2'}`; |
| 36 | + const controller = new LambdaEdgeController(lambdaArn, eventType); |
| 37 | + |
| 38 | + // デバッグ設定に応じてログを有効化 |
| 39 | + if (config.debug && eventType === 'viewer-request') { |
| 40 | + controller.enableDebugger(); |
| 41 | + console.log(` 🔍 デバッグログが有効化されました`); |
| 42 | + } |
| 43 | + |
| 44 | + controllers[eventType] = controller; |
| 45 | + console.log(` ✅ コントローラーが作成されました`); |
| 46 | + console.log(` Lambda ARN: ${lambdaArn}`); |
| 47 | + console.log(` イベントタイプ: ${controller.getTargetEventType()}`); |
| 48 | + } |
| 49 | + |
| 50 | + // ===== 2. 高度なテスト ===== |
| 51 | + console.log('\n📋 2. 高度なテスト - カスタムCloudFrontクライアントの設定'); |
| 52 | + console.log('-'.repeat(50)); |
| 53 | + |
| 54 | + try { |
| 55 | + // カスタム設定でCloudFrontクライアントを作成 |
| 56 | + const cloudfrontClient = new CloudFrontClient(config.getAwsConfig()); |
| 57 | + console.log(' ✅ カスタムCloudFrontクライアントが作成されました'); |
| 58 | + console.log(` AWS設定: ${JSON.stringify(config.getAwsConfig(), null, 2)}`); |
| 59 | + } catch (error) { |
| 60 | + console.error(' ❌ CloudFrontクライアントの作成に失敗しました:', error.message); |
| 61 | + } |
| 62 | + |
| 63 | + // ===== 3. AWS環境テスト ===== |
| 64 | + console.log('\n📋 3. AWS環境テスト - 実際のCloudFrontディストリビューションでの動作確認'); |
| 65 | + console.log('-'.repeat(50)); |
| 66 | + |
| 67 | + // メインのコントローラーを作成 |
| 68 | + const mainController = new LambdaEdgeController(config.lambdaArn, config.eventType); |
| 69 | + |
| 70 | + // デバッグ設定に応じてログを有効化 |
| 71 | + if (config.debug) { |
| 72 | + mainController.enableDebugger(); |
| 73 | + console.log(' 🔍 デバッグログが有効化されました'); |
| 74 | + } |
| 75 | + |
| 76 | + console.log(' 📋 メインコントローラーが作成されました\n'); |
| 77 | + |
| 78 | + // 実際のCloudFrontディストリビューションでテスト |
| 79 | + console.log(' 🧪 実際のAWS環境でテストを開始します...\n'); |
| 80 | + |
| 81 | + // 現在の設定を確認(アタッチ前) |
| 82 | + console.log(' 1️⃣ 現在の設定を確認中...'); |
| 83 | + try { |
| 84 | + // 注意: 実際のCloudFrontディストリビューションにアクセスします |
| 85 | + console.log(' ⚠️ 実際のCloudFrontディストリビューションにアクセスします'); |
| 86 | + console.log(' ⚠️ 適切なIAM権限があることを確認してください\n'); |
| 87 | + |
| 88 | + /**/ |
| 89 | + // 実際のテストを実行する場合は以下のコメントを外してください |
| 90 | + |
| 91 | + // Lambda@Edge関数をアタッチ |
| 92 | + console.log(' 2️⃣ Lambda@Edge関数をアタッチ中...'); |
| 93 | + const attachResult = await mainController.attachEdgeFunction(config.distributionId); |
| 94 | + console.log(' ✅ アタッチ完了'); |
| 95 | + console.log(' 📊 結果:', JSON.stringify(attachResult, null, 2)); |
| 96 | + |
| 97 | + // 少し待機(CloudFrontの更新には時間がかかります) |
| 98 | + console.log('\n 3️⃣ CloudFrontの更新完了を待機中...(数分かかる場合があります)'); |
| 99 | + await new Promise(resolve => setTimeout(resolve, 30000)); // 30秒待機 |
| 100 | + |
| 101 | + // Lambda@Edge関数をデタッチ |
| 102 | + console.log('\n 4️⃣ Lambda@Edge関数をデタッチ中...'); |
| 103 | + const detachResult = await mainController.detachEdgeFunction(config.distributionId); |
| 104 | + console.log(' ✅ デタッチ完了'); |
| 105 | + console.log(' 📊 結果:', JSON.stringify(detachResult, null, 2)); |
| 106 | + /**/ |
| 107 | + |
| 108 | + console.log(' 📝 実際のテストを実行するには、上記のコメントアウトされたコードを有効化してください'); |
| 109 | + |
| 110 | + } catch (error) { |
| 111 | + console.error(' ❌ テスト実行中にエラーが発生しました:', error.message); |
| 112 | + console.error(' 💡 考えられる原因:'); |
| 113 | + console.error(' - IAM権限が不足している'); |
| 114 | + console.error(' - CloudFrontディストリビューションIDが無効'); |
| 115 | + console.error(' - Lambda関数ARNが無効'); |
| 116 | + console.error(' - AWS認証情報が設定されていない'); |
| 117 | + } |
| 118 | + |
| 119 | + console.log('\n🎉 すべてのテストが完了しました!'); |
| 120 | + |
| 121 | + } catch (error) { |
| 122 | + console.error('❌ エラーが発生しました:', error.message); |
| 123 | + console.error('\n💡 .envファイルの設定を確認してください'); |
| 124 | + console.error(' 例: cp env.example .env で.envファイルを作成し、実際の値を設定してください'); |
| 125 | + } |
| 126 | +} |
| 127 | + |
| 128 | +// 環境変数の設定状況を確認 |
| 129 | +function checkEnvironment() { |
| 130 | + console.log('🔍 設定状況を確認中...\n'); |
| 131 | + |
| 132 | + // 設定クラスの表示メソッドを使用 |
| 133 | + config.display(); |
| 134 | +} |
| 135 | + |
| 136 | +// スクリプトを実行 |
| 137 | +if (require.main === module) { |
| 138 | + checkEnvironment(); |
| 139 | + console.log('\n' + '='.repeat(60) + '\n'); |
| 140 | + runAllTests(); |
| 141 | +} |
| 142 | + |
| 143 | +module.exports = { runAllTests, checkEnvironment }; |
0 commit comments