@infodb/lctl 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +245 -0
  2. package/bin/cli.js +3 -0
  3. package/dist/commands/delete.d.ts +7 -0
  4. package/dist/commands/delete.d.ts.map +1 -0
  5. package/dist/commands/delete.js +23 -0
  6. package/dist/commands/delete.js.map +1 -0
  7. package/dist/commands/deploy.d.ts +11 -0
  8. package/dist/commands/deploy.d.ts.map +1 -0
  9. package/dist/commands/deploy.js +98 -0
  10. package/dist/commands/deploy.js.map +1 -0
  11. package/dist/commands/export.d.ts +12 -0
  12. package/dist/commands/export.d.ts.map +1 -0
  13. package/dist/commands/export.js +50 -0
  14. package/dist/commands/export.js.map +1 -0
  15. package/dist/commands/info.d.ts +7 -0
  16. package/dist/commands/info.d.ts.map +1 -0
  17. package/dist/commands/info.js +48 -0
  18. package/dist/commands/info.js.map +1 -0
  19. package/dist/index.d.ts +3 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +73 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/utils/aws-cli.d.ts +35 -0
  24. package/dist/utils/aws-cli.d.ts.map +1 -0
  25. package/dist/utils/aws-cli.js +196 -0
  26. package/dist/utils/aws-cli.js.map +1 -0
  27. package/dist/utils/config.d.ts +41 -0
  28. package/dist/utils/config.d.ts.map +1 -0
  29. package/dist/utils/config.js +119 -0
  30. package/dist/utils/config.js.map +1 -0
  31. package/dist/utils/logger.d.ts +11 -0
  32. package/dist/utils/logger.d.ts.map +1 -0
  33. package/dist/utils/logger.js +42 -0
  34. package/dist/utils/logger.js.map +1 -0
  35. package/dist/utils/script-generator.d.ts +19 -0
  36. package/dist/utils/script-generator.d.ts.map +1 -0
  37. package/dist/utils/script-generator.js +205 -0
  38. package/dist/utils/script-generator.js.map +1 -0
  39. package/dist/utils/zip.d.ts +9 -0
  40. package/dist/utils/zip.d.ts.map +1 -0
  41. package/dist/utils/zip.js +122 -0
  42. package/dist/utils/zip.js.map +1 -0
  43. package/package.json +42 -0
package/README.md ADDED
@@ -0,0 +1,245 @@
1
+ # lctl - Lambda Control Tool
2
+
3
+ ## 概要
4
+ AWS Lambda関数を簡単に管理するためのCLIツール。内部的にAWS CLIを呼び出してLambda関数の作成、更新、削除を行う。
5
+
6
+ ## インストール・実行方法
7
+ ```bash
8
+ pnpx @infodb/lctl [コマンド] [関数名] [オプション]
9
+ ```
10
+
11
+ ## コマンド一覧
12
+
13
+ ### 1. deploy - Lambda関数のデプロイ(作成・更新)
14
+ ```bash
15
+ pnpx @infodb/lctl deploy <function-name> [オプション]
16
+ ```
17
+
18
+ 関数が存在しない場合は作成し、存在する場合は更新します。
19
+
20
+ **設定の優先順位:**
21
+ 1. コマンドラインオプション (最優先)
22
+ 2. `<function-name>.yaml` 設定ファイル
23
+ 3. デフォルト値
24
+
25
+ **必須引数:**
26
+ - `function-name`: デプロイするLambda関数名
27
+
28
+ **オプション:**
29
+ - `--runtime <runtime>`: ランタイム環境 (デフォルト: python3.12)
30
+ - `--handler <handler>`: ハンドラー関数 (デフォルト: {function-name}.handler)
31
+ - `--role <role-arn>`: IAMロールARN (新規作成時に必須)
32
+ - `--params <key=value>`: YAML内の変数を置換 (複数指定可能)
33
+
34
+ **例:**
35
+ ```bash
36
+ # 最もシンプルな使用方法(カレントディレクトリのファイルを自動ZIP化)
37
+ pnpx @infodb/lctl deploy my-function --role arn:aws:iam::123456789012:role/lambda-role
38
+
39
+ # YAML設定ファイルを使用(推奨)
40
+ pnpx @infodb/lctl deploy my-function # my-function.yaml から設定を読み込み
41
+
42
+ # パラメータを使ってフレキシブルなデプロイ
43
+ pnpx @infodb/lctl deploy my-function --params env=prod --params db_host=db.prod.example.com
44
+
45
+ # 開発環境向け
46
+ pnpx @infodb/lctl deploy my-function --params env=dev --params db_host=localhost --params db_port=5432
47
+ ```
48
+
49
+ ### 2. delete - Lambda関数の削除
50
+ ```bash
51
+ pnpx @infodb/lctl delete <function-name>
52
+ ```
53
+
54
+ **必須引数:**
55
+ - `function-name`: 削除するLambda関数名
56
+
57
+ **例:**
58
+ ```bash
59
+ pnpx @infodb/lctl delete my-function
60
+ ```
61
+
62
+ ### 3. info - Lambda関数の詳細情報表示
63
+ ```bash
64
+ pnpx @infodb/lctl info <function-name>
65
+ ```
66
+
67
+ **必須引数:**
68
+ - `function-name`: 情報を表示するLambda関数名
69
+
70
+ **例:**
71
+ ```bash
72
+ pnpx @infodb/lctl info my-function
73
+ ```
74
+
75
+ ### 4. export - デプロイメントスクリプトの出力
76
+ ```bash
77
+ pnpx @infodb/lctl export <function-name> [オプション]
78
+ ```
79
+
80
+ デプロイ用のバッシュスクリプトを生成して保存します。
81
+
82
+ **必須引数:**
83
+ - `function-name`: Lambda関数名
84
+
85
+ **オプション:**
86
+ - `--runtime <runtime>`: ランタイム環境 (デフォルト: python3.12)
87
+ - `--handler <handler>`: ハンドラー関数 (デフォルト: {function-name}.handler)
88
+ - `--role <role-arn>`: IAMロールARN (新規作成時に必須)
89
+ - `--params <key=value>`: YAML内の変数を置換 (複数指定可能)
90
+ - `--output <file>`: 出力ファイルパス (デフォルト: deploy-{function-name}.sh)
91
+ - `--region <region>`: AWSリージョン
92
+ - `--profile <profile>`: AWSプロファイル
93
+ - `--verbose`: 詳細なログを出力
94
+
95
+ **例:**
96
+ ```bash
97
+ # スクリプト出力
98
+ pnpx @infodb/lctl export my-function --output deploy-script.sh
99
+
100
+ # パラメータ付きでスクリプト出力
101
+ pnpx @infodb/lctl export my-function --params env=prod --params db_host=prod.example.com
102
+ ```
103
+
104
+ ## グローバルオプション
105
+ - `--region <region>`: AWSリージョンを指定 (デフォルト: 環境変数またはAWS設定)
106
+ - `--profile <profile>`: AWSプロファイルを指定
107
+ - `--help, -h`: ヘルプを表示
108
+ - `--version, -v`: バージョンを表示
109
+ - `--verbose`: 詳細なログを出力
110
+
111
+ ## 環境要件
112
+ - Node.js 16以上
113
+ - AWS CLI v2がインストールされていること
114
+ - 適切なAWS認証情報が設定されていること
115
+
116
+ ## YAML設定ファイル
117
+
118
+ 関数名と同じ名前の `.yaml` ファイルがある場合、その設定を自動的に読み込みます。
119
+
120
+ ### ファイル名の規則
121
+ - `<function-name>.yaml` (例: `my-function.yaml`)
122
+
123
+ ### YAML設定例
124
+
125
+ ```yaml
126
+ # my-function.yaml
127
+ runtime: python3.12
128
+ handler: my-function.handler
129
+ role: arn:aws:iam::123456789012:role/lambda-execution-role-$env
130
+ architecture: x86_64 # x86_64 または arm64
131
+ memory: 256
132
+ timeout: 30
133
+ description: "マイ Lambda 関数"
134
+
135
+ # 依存ファイルの指定(自動ZIP化)
136
+ files:
137
+ - src/
138
+ - requirements.txt
139
+ - config.json
140
+ - "lib/**/*.py" # glob パターンも使用可能
141
+
142
+ # 環境変数
143
+ environment:
144
+ DB_HOST: $db_host
145
+ DB_PORT: $db_port
146
+ API_KEY: ${API_KEY} # 環境変数から取得
147
+ ENV: $env
148
+
149
+ # ログ設定
150
+ log_retention_days: 7 # ログ保持期間(日)
151
+ auto_create_log_group: true # ロググループ自動作成
152
+
153
+ # ZIP除外設定
154
+ zip_excludes: # ZIP化時の除外パターン
155
+ - "*.git*"
156
+ - "node_modules/*"
157
+ - "*.zip"
158
+ - "dist/*"
159
+ - ".DS_Store"
160
+
161
+ # リザーブド同時実行数
162
+ reserved_concurrency: 100
163
+
164
+ # プロビジョンド同時実行設定
165
+ provisioned_concurrency: 10
166
+
167
+ # エフェメラルストレージ
168
+ ephemeral_storage: 1024 # MB (512-10240)
169
+
170
+ # レイヤー
171
+ layers:
172
+ - arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1
173
+ - arn:aws:lambda:us-east-1:580247275435:layer:LambdaInsightsExtension:14
174
+
175
+ # VPC設定
176
+ vpc:
177
+ subnets:
178
+ - subnet-12345678
179
+ - subnet-87654321
180
+ security_groups:
181
+ - sg-12345678
182
+
183
+ # デッドレターキュー
184
+ dead_letter_queue:
185
+ target_arn: arn:aws:sqs:us-east-1:123456789012:my-dlq
186
+
187
+ # タグ
188
+ tags:
189
+ Environment: production
190
+ Team: backend
191
+ Project: my-project
192
+ ```
193
+
194
+ ### YAML設定項目
195
+
196
+ | 項目 | 型 | 説明 | 例 |
197
+ |------|----|----|-----|
198
+ | `runtime` | string | ランタイム環境 | `python3.12`, `nodejs18.x` |
199
+ | `handler` | string | ハンドラー関数 | `my-function.handler`, `app.lambda_handler` |
200
+ | `role` | string | IAMロールARN | `arn:aws:iam::123456789012:role/...` |
201
+ | `architecture` | string | アーキテクチャ | `x86_64`, `arm64` |
202
+ | `memory` | number | メモリサイズ(MB) | `128`, `256`, `512` |
203
+ | `timeout` | number | タイムアウト時間(秒) | `3`, `30`, `900` |
204
+ | `description` | string | 関数の説明 | `"マイ Lambda 関数"` |
205
+ | `reserved_concurrency` | number | リザーブド同時実行数 | `100`, `1000` |
206
+ | `provisioned_concurrency` | number | プロビジョンド同時実行 | `10`, `50` |
207
+ | `ephemeral_storage` | number | エフェメラルストレージ(MB) | `512`, `1024`, `10240` |
208
+ | `files` | array | 含めるファイル・ディレクトリ | `["src/", "*.py"]` |
209
+ | `environment` | object | 環境変数 | `{DB_HOST: "localhost"}` |
210
+ | `log_retention_days` | number | ログ保持期間(日) | `7`, `14`, `30` |
211
+ | `auto_create_log_group` | boolean | ロググループ自動作成 | `true`, `false` |
212
+ | `zip_excludes` | array | ZIP化時の除外パターン | `["*.git*", "node_modules/*"]` |
213
+ | `layers` | array | レイヤーARN | `["arn:aws:lambda:..."]` |
214
+ | `vpc` | object | VPC設定 | `{subnets: [...], security_groups: [...]}` |
215
+ | `dead_letter_queue` | object | DLQ設定 | `{target_arn: "arn:aws:sqs:..."}` |
216
+ | `tags` | object | タグ | `{Environment: "prod"}` |
217
+
218
+ ### ファイル処理の仕組み
219
+
220
+ 1. YAMLファイルの `files` に指定されたファイル・ディレクトリを自動的にZIP化
221
+ 2. YAMLファイルがない場合は、カレントディレクトリの全ファイルをZIP化
222
+ 3. glob パターンをサポート(`**/*.py`, `src/**/*` など)
223
+ 4. 一時的なZIPファイルを作成してデプロイ後に削除
224
+
225
+ ### 変数の展開
226
+
227
+ **環境変数の展開:**
228
+ - `${VAR_NAME}` 形式で現在の環境変数を参照可能
229
+ - 存在しない環境変数を参照した場合はエラー
230
+
231
+ **パラメータ変数の展開:**
232
+ - `$key` 形式で `--params` オプションで指定した値を参照可能
233
+ - `--params env=prod --params db_host=db.example.com` のように複数指定可能
234
+ - YAML内の `$env` は `prod`、`$db_host` は `db.example.com` に置換される
235
+
236
+ **変数の優先順位:**
237
+ 1. `--params` で指定したパラメータ変数 (`$key`)
238
+ 2. 環境変数 (`${VAR_NAME}`)
239
+ 3. 存在しない変数の場合はエラー
240
+
241
+ ## エラーハンドリング
242
+ - AWS CLIコマンドが失敗した場合、適切なエラーメッセージを表示
243
+ - 必須パラメータが不足している場合、使用方法を表示
244
+ - 存在しない関数に対する操作の場合、エラーメッセージを表示
245
+ - YAML設定ファイルの構文エラーがある場合、詳細なエラーメッセージを表示
package/bin/cli.js ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+
3
+ require('../dist/index.js');
@@ -0,0 +1,7 @@
1
+ export interface DeleteOptions {
2
+ region?: string;
3
+ profile?: string;
4
+ verbose?: boolean;
5
+ }
6
+ export declare function deleteCommand(functionName: string, options: DeleteOptions): Promise<void>;
7
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAe/F"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.deleteCommand = deleteCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const aws_cli_1 = require("../utils/aws-cli");
9
+ const logger_1 = require("../utils/logger");
10
+ async function deleteCommand(functionName, options) {
11
+ const logger = new logger_1.Logger(options.verbose || false);
12
+ try {
13
+ logger.info(`Deleting Lambda function: ${chalk_1.default.cyan(functionName)}`);
14
+ const awsCliManager = new aws_cli_1.AwsCliManager(options.region, options.profile, logger);
15
+ await awsCliManager.deleteFunction(functionName);
16
+ logger.success(`✅ Lambda function ${chalk_1.default.cyan(functionName)} deleted successfully!`);
17
+ }
18
+ catch (error) {
19
+ logger.error(`❌ Failed to delete Lambda function: ${error instanceof Error ? error.message : error}`);
20
+ process.exit(1);
21
+ }
22
+ }
23
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":";;;;;AAUA,sCAeC;AAzBD,kDAA0B;AAC1B,8CAAiD;AACjD,4CAAyC;AAQlC,KAAK,UAAU,aAAa,CAAC,YAAoB,EAAE,OAAsB;IAC9E,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,6BAA6B,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAErE,MAAM,aAAa,GAAG,IAAI,uBAAa,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACjF,MAAM,aAAa,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QAEjD,MAAM,CAAC,OAAO,CAAC,qBAAqB,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC;IAExF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,uCAAuC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACtG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface DeployOptions {
2
+ runtime?: string;
3
+ handler?: string;
4
+ role?: string;
5
+ params?: string[];
6
+ region?: string;
7
+ profile?: string;
8
+ verbose?: boolean;
9
+ }
10
+ export declare function deployCommand(functionName: string, options: DeployOptions): Promise<void>;
11
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAyD/F"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.deployCommand = deployCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const child_process_1 = require("child_process");
9
+ const config_1 = require("../utils/config");
10
+ const script_generator_1 = require("../utils/script-generator");
11
+ const logger_1 = require("../utils/logger");
12
+ async function deployCommand(functionName, options) {
13
+ const logger = new logger_1.Logger(options.verbose || false);
14
+ try {
15
+ logger.info(`Deploying Lambda function: ${chalk_1.default.cyan(functionName)}`);
16
+ // Parse parameters
17
+ const params = {};
18
+ if (options.params) {
19
+ for (const param of options.params) {
20
+ const [key, value] = param.split('=');
21
+ if (key && value) {
22
+ params[key] = value;
23
+ }
24
+ else {
25
+ throw new Error(`Invalid parameter format: ${param}. Use key=value format.`);
26
+ }
27
+ }
28
+ }
29
+ // Load configuration
30
+ const configManager = new config_1.ConfigManager(functionName, params, logger);
31
+ const config = await configManager.loadConfig({
32
+ runtime: options.runtime,
33
+ handler: options.handler,
34
+ role: options.role,
35
+ });
36
+ logger.verbose('Configuration loaded:', config);
37
+ // Generate and execute deployment script
38
+ const scriptGenerator = new script_generator_1.ScriptGenerator(logger);
39
+ const script = scriptGenerator.generateDeployScript(functionName, config);
40
+ const scriptPath = await scriptGenerator.saveScript(functionName, script);
41
+ try {
42
+ // Set environment variables for the script
43
+ const env = {
44
+ ...process.env,
45
+ AWS_PROFILE: options.profile || process.env.AWS_PROFILE || 'default',
46
+ AWS_REGION: options.region || process.env.AWS_REGION || 'ap-northeast-1',
47
+ };
48
+ // Execute the script
49
+ logger.info('Executing deployment script...');
50
+ await executeScript(scriptPath, env, logger);
51
+ logger.success(`✅ Lambda function ${chalk_1.default.cyan(functionName)} deployed successfully!`);
52
+ }
53
+ finally {
54
+ // Clean up script file
55
+ await scriptGenerator.cleanupScript(scriptPath);
56
+ }
57
+ }
58
+ catch (error) {
59
+ logger.error(`❌ Failed to deploy Lambda function: ${error instanceof Error ? error.message : error}`);
60
+ process.exit(1);
61
+ }
62
+ }
63
+ function executeScript(scriptPath, env, logger) {
64
+ return new Promise((resolve, reject) => {
65
+ const child = (0, child_process_1.spawn)('bash', [scriptPath], {
66
+ stdio: ['inherit', 'pipe', 'pipe'],
67
+ env,
68
+ });
69
+ let stdout = '';
70
+ let stderr = '';
71
+ child.stdout?.on('data', (data) => {
72
+ const output = data.toString();
73
+ stdout += output;
74
+ if (logger) {
75
+ process.stdout.write(output);
76
+ }
77
+ });
78
+ child.stderr?.on('data', (data) => {
79
+ const output = data.toString();
80
+ stderr += output;
81
+ if (logger) {
82
+ process.stderr.write(chalk_1.default.yellow(output));
83
+ }
84
+ });
85
+ child.on('close', (code) => {
86
+ if (code === 0) {
87
+ resolve();
88
+ }
89
+ else {
90
+ reject(new Error(`Deployment script failed (exit code ${code}): ${stderr || 'Unknown error'}`));
91
+ }
92
+ });
93
+ child.on('error', (error) => {
94
+ reject(new Error(`Failed to execute deployment script: ${error.message}`));
95
+ });
96
+ });
97
+ }
98
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface ExportOptions {
2
+ runtime?: string;
3
+ handler?: string;
4
+ role?: string;
5
+ params?: string[];
6
+ region?: string;
7
+ profile?: string;
8
+ verbose?: boolean;
9
+ output?: string;
10
+ }
11
+ export declare function exportCommand(functionName: string, options: ExportOptions): Promise<void>;
12
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA4C/F"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.exportCommand = exportCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const config_1 = require("../utils/config");
9
+ const script_generator_1 = require("../utils/script-generator");
10
+ const logger_1 = require("../utils/logger");
11
+ async function exportCommand(functionName, options) {
12
+ const logger = new logger_1.Logger(options.verbose || false);
13
+ try {
14
+ logger.info(`Exporting deploy script for Lambda function: ${chalk_1.default.cyan(functionName)}`);
15
+ // Parse parameters
16
+ const params = {};
17
+ if (options.params) {
18
+ for (const param of options.params) {
19
+ const [key, value] = param.split('=');
20
+ if (key && value) {
21
+ params[key] = value;
22
+ }
23
+ else {
24
+ throw new Error(`Invalid parameter format: ${param}. Use key=value format.`);
25
+ }
26
+ }
27
+ }
28
+ // Load configuration
29
+ const configManager = new config_1.ConfigManager(functionName, params, logger);
30
+ const config = await configManager.loadConfig({
31
+ runtime: options.runtime,
32
+ handler: options.handler,
33
+ role: options.role,
34
+ });
35
+ logger.verbose('Configuration loaded:', config);
36
+ // Generate script
37
+ const scriptGenerator = new script_generator_1.ScriptGenerator(logger);
38
+ const script = scriptGenerator.generateDeployScript(functionName, config);
39
+ // Save script
40
+ const outputPath = options.output || `deploy-${functionName}.sh`;
41
+ const scriptPath = await scriptGenerator.saveScript(outputPath, script);
42
+ logger.success(`✅ Deploy script exported successfully: ${chalk_1.default.cyan(scriptPath)}`);
43
+ logger.info(`Run with: ${chalk_1.default.yellow(`bash ${scriptPath}`)}`);
44
+ }
45
+ catch (error) {
46
+ logger.error(`❌ Failed to export deploy script: ${error instanceof Error ? error.message : error}`);
47
+ process.exit(1);
48
+ }
49
+ }
50
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":";;;;;AAgBA,sCA4CC;AA5DD,kDAA0B;AAC1B,4CAAgD;AAChD,gEAA4D;AAC5D,4CAAyC;AAalC,KAAK,UAAU,aAAa,CAAC,YAAoB,EAAE,OAAsB;IAC9E,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,gDAAgD,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAExF,mBAAmB;QACnB,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtC,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;oBACjB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACtB,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,yBAAyB,CAAC,CAAC;gBAC/E,CAAC;YACH,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,MAAM,aAAa,GAAG,IAAI,sBAAa,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC;YAC5C,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;QAEhD,kBAAkB;QAClB,MAAM,eAAe,GAAG,IAAI,kCAAe,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,eAAe,CAAC,oBAAoB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAE1E,cAAc;QACd,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,YAAY,KAAK,CAAC;QACjE,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAExE,MAAM,CAAC,OAAO,CAAC,0CAA0C,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACnF,MAAM,CAAC,IAAI,CAAC,aAAa,eAAK,CAAC,MAAM,CAAC,QAAQ,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;IAEjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,qCAAqC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACpG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface InfoOptions {
2
+ region?: string;
3
+ profile?: string;
4
+ verbose?: boolean;
5
+ }
6
+ export declare function infoCommand(functionName: string, options: InfoOptions): Promise<void>;
7
+ //# sourceMappingURL=info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA2C3F"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.infoCommand = infoCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const aws_cli_1 = require("../utils/aws-cli");
9
+ const logger_1 = require("../utils/logger");
10
+ async function infoCommand(functionName, options) {
11
+ const logger = new logger_1.Logger(options.verbose || false);
12
+ try {
13
+ logger.info(`Getting information for Lambda function: ${chalk_1.default.cyan(functionName)}`);
14
+ const awsCliManager = new aws_cli_1.AwsCliManager(options.region, options.profile, logger);
15
+ const functionInfo = await awsCliManager.getFunctionInfo(functionName);
16
+ // Display function information in a readable format
17
+ console.log(chalk_1.default.green('\n📋 Lambda Function Information:'));
18
+ console.log(chalk_1.default.cyan('Function Name:'), functionInfo.FunctionName);
19
+ console.log(chalk_1.default.cyan('Runtime:'), functionInfo.Runtime);
20
+ console.log(chalk_1.default.cyan('Handler:'), functionInfo.Handler);
21
+ console.log(chalk_1.default.cyan('Memory Size:'), `${functionInfo.MemorySize} MB`);
22
+ console.log(chalk_1.default.cyan('Timeout:'), `${functionInfo.Timeout} seconds`);
23
+ console.log(chalk_1.default.cyan('Last Modified:'), functionInfo.LastModified);
24
+ console.log(chalk_1.default.cyan('Code Size:'), `${functionInfo.CodeSize} bytes`);
25
+ console.log(chalk_1.default.cyan('State:'), functionInfo.State);
26
+ console.log(chalk_1.default.cyan('Architecture:'), functionInfo.Architectures?.join(', ') || 'x86_64');
27
+ if (functionInfo.Description) {
28
+ console.log(chalk_1.default.cyan('Description:'), functionInfo.Description);
29
+ }
30
+ if (functionInfo.Environment?.Variables && Object.keys(functionInfo.Environment.Variables).length > 0) {
31
+ console.log(chalk_1.default.cyan('\n🔧 Environment Variables:'));
32
+ Object.entries(functionInfo.Environment.Variables).forEach(([key, value]) => {
33
+ console.log(` ${chalk_1.default.yellow(key)}: ${value}`);
34
+ });
35
+ }
36
+ if (functionInfo.Layers && functionInfo.Layers.length > 0) {
37
+ console.log(chalk_1.default.cyan('\n📦 Layers:'));
38
+ functionInfo.Layers.forEach((layer, index) => {
39
+ console.log(` ${index + 1}. ${layer.Arn}`);
40
+ });
41
+ }
42
+ }
43
+ catch (error) {
44
+ logger.error(`❌ Failed to get Lambda function information: ${error instanceof Error ? error.message : error}`);
45
+ process.exit(1);
46
+ }
47
+ }
48
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const deploy_1 = require("./commands/deploy");
10
+ const delete_1 = require("./commands/delete");
11
+ const info_1 = require("./commands/info");
12
+ const export_1 = require("./commands/export");
13
+ const program = new commander_1.Command();
14
+ program
15
+ .name('lctl')
16
+ .description('AWS Lambda Control Tool - Simple CLI for managing Lambda functions')
17
+ .version('0.1.0');
18
+ // Deploy command
19
+ program
20
+ .command('deploy')
21
+ .description('Deploy Lambda function (create or update)')
22
+ .argument('<function-name>', 'Lambda function name')
23
+ .option('--runtime <runtime>', 'Runtime environment', 'python3.12')
24
+ .option('--handler <handler>', 'Handler function')
25
+ .option('--role <role-arn>', 'IAM role ARN (required for new functions)')
26
+ .option('--params <key=value>', 'Parameters for YAML variable substitution', [])
27
+ .option('--region <region>', 'AWS region')
28
+ .option('--profile <profile>', 'AWS profile')
29
+ .option('--verbose', 'Verbose output')
30
+ .action(deploy_1.deployCommand);
31
+ // Delete command
32
+ program
33
+ .command('delete')
34
+ .description('Delete Lambda function')
35
+ .argument('<function-name>', 'Lambda function name')
36
+ .option('--region <region>', 'AWS region')
37
+ .option('--profile <profile>', 'AWS profile')
38
+ .option('--verbose', 'Verbose output')
39
+ .action(delete_1.deleteCommand);
40
+ // Info command
41
+ program
42
+ .command('info')
43
+ .description('Show Lambda function information')
44
+ .argument('<function-name>', 'Lambda function name')
45
+ .option('--region <region>', 'AWS region')
46
+ .option('--profile <profile>', 'AWS profile')
47
+ .option('--verbose', 'Verbose output')
48
+ .action(info_1.infoCommand);
49
+ // Export command
50
+ program
51
+ .command('export')
52
+ .description('Export deployment script')
53
+ .argument('<function-name>', 'Lambda function name')
54
+ .option('--runtime <runtime>', 'Runtime environment', 'python3.12')
55
+ .option('--handler <handler>', 'Handler function')
56
+ .option('--role <role-arn>', 'IAM role ARN (required for new functions)')
57
+ .option('--params <key=value>', 'Parameters for YAML variable substitution', [])
58
+ .option('--output <file>', 'Output script file path')
59
+ .option('--region <region>', 'AWS region')
60
+ .option('--profile <profile>', 'AWS profile')
61
+ .option('--verbose', 'Verbose output')
62
+ .action(export_1.exportCommand);
63
+ program.parse();
64
+ // Handle unhandled errors
65
+ process.on('unhandledRejection', (error) => {
66
+ console.error(chalk_1.default.red('Unhandled error:'), error);
67
+ process.exit(1);
68
+ });
69
+ process.on('uncaughtException', (error) => {
70
+ console.error(chalk_1.default.red('Uncaught exception:'), error);
71
+ process.exit(1);
72
+ });
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}