@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.
- package/README.md +245 -0
- package/bin/cli.js +3 -0
- package/dist/commands/delete.d.ts +7 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +23 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/deploy.d.ts +11 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +98 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/export.d.ts +12 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +50 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/info.d.ts +7 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +48 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +73 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/aws-cli.d.ts +35 -0
- package/dist/utils/aws-cli.d.ts.map +1 -0
- package/dist/utils/aws-cli.js +196 -0
- package/dist/utils/aws-cli.js.map +1 -0
- package/dist/utils/config.d.ts +41 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +119 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +42 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/script-generator.d.ts +19 -0
- package/dist/utils/script-generator.d.ts.map +1 -0
- package/dist/utils/script-generator.js +205 -0
- package/dist/utils/script-generator.js.map +1 -0
- package/dist/utils/zip.d.ts +9 -0
- package/dist/utils/zip.d.ts.map +1 -0
- package/dist/utils/zip.js +122 -0
- package/dist/utils/zip.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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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"}
|