@infodb/lctl 0.3.0 → 0.5.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 +223 -160
- package/dist/commands/delete.d.ts +0 -2
- package/dist/commands/delete.d.ts.map +1 -1
- package/dist/commands/delete.js +8 -3
- package/dist/commands/delete.js.map +1 -1
- package/dist/commands/deploy.d.ts +0 -8
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +5 -23
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/export.d.ts +1 -9
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +4 -20
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/info.d.ts +0 -2
- package/dist/commands/info.d.ts.map +1 -1
- package/dist/commands/info.js +7 -2
- package/dist/commands/info.js.map +1 -1
- package/dist/index.js +5 -25
- package/dist/index.js.map +1 -1
- package/dist/utils/config.d.ts +10 -3
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +17 -15
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/script-generator.d.ts +2 -1
- package/dist/utils/script-generator.d.ts.map +1 -1
- package/dist/utils/script-generator.js +70 -19
- package/dist/utils/script-generator.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,66 +1,93 @@
|
|
|
1
1
|
# lctl - Lambda Control Tool
|
|
2
2
|
|
|
3
3
|
## 概要
|
|
4
|
-
AWS Lambda関数を簡単に管理するためのCLI
|
|
4
|
+
AWS Lambda関数を簡単に管理するためのCLIツール。YAML設定ファイルによる設定管理と、内部的なAWS CLIを使用したLambda関数の作成、更新、削除を行います。
|
|
5
5
|
|
|
6
6
|
## インストール・実行方法
|
|
7
7
|
```bash
|
|
8
|
-
pnpx @infodb/lctl [コマンド] [
|
|
8
|
+
pnpx @infodb/lctl [コマンド] [設定ファイル名] [オプション]
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## 基本的な使用方法
|
|
12
12
|
|
|
13
|
-
### 1.
|
|
13
|
+
### 1. プロジェクト構成を作成
|
|
14
|
+
```
|
|
15
|
+
project/
|
|
16
|
+
├── configs/ # 設定ファイル(必須)
|
|
17
|
+
│ ├── my-function.yaml
|
|
18
|
+
│ └── other-function.yaml
|
|
19
|
+
├── functions/ # Lambda関数コード(必須)
|
|
20
|
+
│ ├── my-function.py
|
|
21
|
+
│ ├── requirements.txt
|
|
22
|
+
│ └── utils.py
|
|
23
|
+
└── other-files/
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 2. YAML設定ファイルを作成
|
|
27
|
+
`configs/my-function.yaml`:
|
|
28
|
+
```yaml
|
|
29
|
+
# 基本設定
|
|
30
|
+
function_name: my_function # 実際のLambda関数名
|
|
31
|
+
runtime: python3.12
|
|
32
|
+
handler: my_function.handler
|
|
33
|
+
role: arn:aws:iam::123456789012:role/lambda-execution-role
|
|
34
|
+
|
|
35
|
+
# ファイル設定
|
|
36
|
+
files:
|
|
37
|
+
- my_function.py
|
|
38
|
+
- requirements.txt
|
|
39
|
+
|
|
40
|
+
# 環境変数
|
|
41
|
+
environment:
|
|
42
|
+
ENV: production
|
|
43
|
+
|
|
44
|
+
# 権限設定
|
|
45
|
+
permissions:
|
|
46
|
+
- service: apigateway
|
|
47
|
+
source_arn: "arn:aws:execute-api:us-east-1:123456789012:*"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 3. デプロイ実行
|
|
14
51
|
```bash
|
|
15
|
-
|
|
52
|
+
# AWS認証情報を設定してデプロイ
|
|
53
|
+
pnpx @infodb/lctl deploy my-function
|
|
16
54
|
```
|
|
17
55
|
|
|
18
|
-
|
|
56
|
+
## コマンド一覧
|
|
19
57
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
58
|
+
### 1. deploy - Lambda関数のデプロイ(作成・更新)
|
|
59
|
+
```bash
|
|
60
|
+
pnpx @infodb/lctl deploy <config-name> [オプション]
|
|
61
|
+
```
|
|
24
62
|
|
|
25
63
|
**必須引数:**
|
|
26
|
-
- `
|
|
64
|
+
- `config-name`: 設定ファイル名(.yaml拡張子は不要)
|
|
27
65
|
|
|
28
66
|
**オプション:**
|
|
29
|
-
- `--
|
|
30
|
-
- `--handler <handler>`: ハンドラー関数 (デフォルト: {function-name}.handler)
|
|
31
|
-
- `--role <role-arn>`: IAMロールARN (新規作成時に必須)
|
|
32
|
-
- `--params <key=value>`: YAML内の変数を置換 (複数指定可能)
|
|
33
|
-
- `--config <directory>`: 設定ファイルのディレクトリ (デフォルト: configs)
|
|
34
|
-
- `--function <directory>`: 関数ファイルのディレクトリ (デフォルト: functions)
|
|
67
|
+
- `--verbose`: 詳細なログを出力
|
|
35
68
|
|
|
36
69
|
**例:**
|
|
37
70
|
```bash
|
|
38
|
-
#
|
|
39
|
-
pnpx @infodb/lctl deploy my-function
|
|
71
|
+
# 基本的な使用方法
|
|
72
|
+
pnpx @infodb/lctl deploy my-function
|
|
40
73
|
|
|
41
|
-
#
|
|
42
|
-
pnpx @infodb/lctl deploy my-function
|
|
74
|
+
# 詳細ログ付き
|
|
75
|
+
pnpx @infodb/lctl deploy my-function --verbose
|
|
43
76
|
|
|
44
|
-
#
|
|
45
|
-
pnpx @infodb/lctl deploy my-function
|
|
46
|
-
|
|
47
|
-
# 開発環境向け
|
|
48
|
-
pnpx @infodb/lctl deploy my-function --params env=dev --params db_host=localhost --params db_port=5432
|
|
49
|
-
|
|
50
|
-
# カスタム設定ディレクトリを使用
|
|
51
|
-
pnpx @infodb/lctl deploy my-function --config environments/prod
|
|
52
|
-
|
|
53
|
-
# カスタム関数ディレクトリを使用
|
|
54
|
-
pnpx @infodb/lctl deploy my-function --function src
|
|
77
|
+
# 環境変数を使用
|
|
78
|
+
ENV_NAME=prod DB_HOST=prod.example.com pnpx @infodb/lctl deploy my-function
|
|
55
79
|
```
|
|
56
80
|
|
|
57
81
|
### 2. delete - Lambda関数の削除
|
|
58
82
|
```bash
|
|
59
|
-
pnpx @infodb/lctl delete <
|
|
83
|
+
pnpx @infodb/lctl delete <config-name> [オプション]
|
|
60
84
|
```
|
|
61
85
|
|
|
62
86
|
**必須引数:**
|
|
63
|
-
- `
|
|
87
|
+
- `config-name`: 設定ファイル名(.yaml拡張子は不要)
|
|
88
|
+
|
|
89
|
+
**オプション:**
|
|
90
|
+
- `--verbose`: 詳細なログを出力
|
|
64
91
|
|
|
65
92
|
**例:**
|
|
66
93
|
```bash
|
|
@@ -69,11 +96,14 @@ pnpx @infodb/lctl delete my-function
|
|
|
69
96
|
|
|
70
97
|
### 3. info - Lambda関数の詳細情報表示
|
|
71
98
|
```bash
|
|
72
|
-
pnpx @infodb/lctl info <
|
|
99
|
+
pnpx @infodb/lctl info <config-name> [オプション]
|
|
73
100
|
```
|
|
74
101
|
|
|
75
102
|
**必須引数:**
|
|
76
|
-
- `
|
|
103
|
+
- `config-name`: 設定ファイル名(.yaml拡張子は不要)
|
|
104
|
+
|
|
105
|
+
**オプション:**
|
|
106
|
+
- `--verbose`: 詳細なログを出力
|
|
77
107
|
|
|
78
108
|
**例:**
|
|
79
109
|
```bash
|
|
@@ -82,24 +112,14 @@ pnpx @infodb/lctl info my-function
|
|
|
82
112
|
|
|
83
113
|
### 4. export - デプロイメントスクリプトの出力
|
|
84
114
|
```bash
|
|
85
|
-
pnpx @infodb/lctl export <
|
|
115
|
+
pnpx @infodb/lctl export <config-name> [オプション]
|
|
86
116
|
```
|
|
87
117
|
|
|
88
|
-
デプロイ用のバッシュスクリプトを生成して保存します。
|
|
89
|
-
|
|
90
118
|
**必須引数:**
|
|
91
|
-
- `
|
|
119
|
+
- `config-name`: 設定ファイル名(.yaml拡張子は不要)
|
|
92
120
|
|
|
93
121
|
**オプション:**
|
|
94
|
-
- `--
|
|
95
|
-
- `--handler <handler>`: ハンドラー関数 (デフォルト: {function-name}.handler)
|
|
96
|
-
- `--role <role-arn>`: IAMロールARN (新規作成時に必須)
|
|
97
|
-
- `--params <key=value>`: YAML内の変数を置換 (複数指定可能)
|
|
98
|
-
- `--config <directory>`: 設定ファイルのディレクトリ (デフォルト: configs)
|
|
99
|
-
- `--function <directory>`: 関数ファイルのディレクトリ (デフォルト: functions)
|
|
100
|
-
- `--output <file>`: 出力ファイルパス (デフォルト: deploy-{function-name}.sh)
|
|
101
|
-
- `--region <region>`: AWSリージョン
|
|
102
|
-
- `--profile <profile>`: AWSプロファイル
|
|
122
|
+
- `--output <file>`: 出力ファイルパス(デフォルト: deploy-{config-name}.sh)
|
|
103
123
|
- `--verbose`: 詳細なログを出力
|
|
104
124
|
|
|
105
125
|
**例:**
|
|
@@ -107,76 +127,58 @@ pnpx @infodb/lctl export <function-name> [オプション]
|
|
|
107
127
|
# スクリプト出力
|
|
108
128
|
pnpx @infodb/lctl export my-function --output deploy-script.sh
|
|
109
129
|
|
|
110
|
-
#
|
|
111
|
-
pnpx @infodb/lctl export my-function
|
|
130
|
+
# 環境変数を使用してスクリプト出力
|
|
131
|
+
ENV_NAME=prod DB_HOST=prod.example.com pnpx @infodb/lctl export my-function
|
|
112
132
|
```
|
|
113
133
|
|
|
114
|
-
##
|
|
115
|
-
- `--region <region>`: AWSリージョンを指定 (デフォルト: 環境変数またはAWS設定)
|
|
116
|
-
- `--profile <profile>`: AWSプロファイルを指定
|
|
117
|
-
- `--help, -h`: ヘルプを表示
|
|
118
|
-
- `--version, -v`: バージョンを表示
|
|
119
|
-
- `--verbose`: 詳細なログを出力
|
|
134
|
+
## YAML設定ファイル(必須)
|
|
120
135
|
|
|
121
|
-
|
|
122
|
-
- Node.js 16以上
|
|
123
|
-
- AWS CLI v2がインストールされていること
|
|
124
|
-
- 適切なAWS認証情報が設定されていること
|
|
125
|
-
|
|
126
|
-
## プロジェクト構成
|
|
127
|
-
|
|
128
|
-
推奨されるプロジェクト構成:
|
|
129
|
-
|
|
130
|
-
```
|
|
131
|
-
project/
|
|
132
|
-
├── configs/ # 設定ファイル
|
|
133
|
-
│ ├── my-function.yaml
|
|
134
|
-
│ └── other-function.yaml
|
|
135
|
-
├── functions/ # Lambda関数コード
|
|
136
|
-
│ ├── my-function.py
|
|
137
|
-
│ ├── requirements.txt
|
|
138
|
-
│ └── utils.py
|
|
139
|
-
└── other-files/
|
|
140
|
-
```
|
|
136
|
+
設定ファイルは `configs/` ディレクトリに配置し、`configs/<config-name>.yaml` 形式で命名します。
|
|
141
137
|
|
|
142
|
-
|
|
138
|
+
### 基本的な設定例
|
|
143
139
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
### ファイル名の規則
|
|
148
|
-
- `configs/<function-name>.yaml` (例: `configs/my-function.yaml`)
|
|
149
|
-
- `--config` オプションでディレクトリを変更可能
|
|
150
|
-
- `--function` オプションで関数ディレクトリを変更可能
|
|
140
|
+
```yaml
|
|
141
|
+
# configs/my-function.yaml
|
|
151
142
|
|
|
152
|
-
|
|
143
|
+
# 関数名設定(オプション)
|
|
144
|
+
function_name: ${ENV_NAME}_my_function # 環境変数を使用した動的命名
|
|
145
|
+
# function_name: my_function # 固定名
|
|
146
|
+
# 未設定の場合、設定ファイル名(my-function)を使用
|
|
153
147
|
|
|
154
|
-
|
|
155
|
-
# my-function.yaml
|
|
148
|
+
# 基本設定
|
|
156
149
|
runtime: python3.12
|
|
157
|
-
handler:
|
|
158
|
-
role: arn:aws:iam::123456789012:role/lambda-execution-role
|
|
150
|
+
handler: my_function.handler
|
|
151
|
+
role: arn:aws:iam::123456789012:role/lambda-execution-role
|
|
159
152
|
architecture: x86_64 # x86_64 または arm64
|
|
160
153
|
memory: 256
|
|
161
154
|
timeout: 30
|
|
162
155
|
description: "マイ Lambda 関数"
|
|
163
156
|
|
|
164
|
-
#
|
|
157
|
+
# デプロイするファイル(functionsディレクトリ内の相対パス)
|
|
165
158
|
files:
|
|
166
|
-
-
|
|
159
|
+
- my_function.py
|
|
167
160
|
- requirements.txt
|
|
168
161
|
- utils.py
|
|
169
162
|
- "lib/**/*.py" # glob パターンも使用可能
|
|
170
163
|
|
|
171
164
|
# 環境変数
|
|
172
165
|
environment:
|
|
173
|
-
DB_HOST: $
|
|
174
|
-
DB_PORT: $
|
|
175
|
-
API_KEY: ${API_KEY}
|
|
176
|
-
ENV: $
|
|
166
|
+
DB_HOST: ${DB_HOST}
|
|
167
|
+
DB_PORT: ${DB_PORT}
|
|
168
|
+
API_KEY: ${API_KEY}
|
|
169
|
+
ENV: ${ENV_NAME}
|
|
170
|
+
|
|
171
|
+
# 権限設定(外部サービスからの呼び出し許可)
|
|
172
|
+
permissions:
|
|
173
|
+
- service: apigateway
|
|
174
|
+
source_arn: "arn:aws:execute-api:us-east-1:123456789012:*"
|
|
175
|
+
statement_id: "api-gateway-invoke"
|
|
176
|
+
- service: events
|
|
177
|
+
source_arn: "arn:aws:events:us-east-1:123456789012:rule/my-rule"
|
|
178
|
+
statement_id: "eventbridge-invoke"
|
|
177
179
|
|
|
178
180
|
# ログ設定
|
|
179
|
-
log_retention_days:
|
|
181
|
+
log_retention_days: 14 # ログ保持期間(日)
|
|
180
182
|
auto_create_log_group: true # ロググループ自動作成
|
|
181
183
|
|
|
182
184
|
# ZIP除外設定
|
|
@@ -184,16 +186,22 @@ zip_excludes: # ZIP化時の除外パターン
|
|
|
184
186
|
- "*.git*"
|
|
185
187
|
- "node_modules/*"
|
|
186
188
|
- "*.zip"
|
|
187
|
-
- "
|
|
188
|
-
- "
|
|
189
|
+
- "*.pyc"
|
|
190
|
+
- "__pycache__/*"
|
|
189
191
|
|
|
190
|
-
#
|
|
191
|
-
|
|
192
|
+
# タグ
|
|
193
|
+
tags:
|
|
194
|
+
Environment: ${ENV_NAME}
|
|
195
|
+
Team: backend
|
|
196
|
+
Project: my-project
|
|
197
|
+
```
|
|
192
198
|
|
|
193
|
-
|
|
194
|
-
provisioned_concurrency: 10
|
|
199
|
+
### 高度な設定例
|
|
195
200
|
|
|
196
|
-
|
|
201
|
+
```yaml
|
|
202
|
+
# 高度な設定
|
|
203
|
+
reserved_concurrency: 100
|
|
204
|
+
provisioned_concurrency: 10
|
|
197
205
|
ephemeral_storage: 1024 # MB (512-10240)
|
|
198
206
|
|
|
199
207
|
# レイヤー
|
|
@@ -212,63 +220,118 @@ vpc:
|
|
|
212
220
|
# デッドレターキュー
|
|
213
221
|
dead_letter_queue:
|
|
214
222
|
target_arn: arn:aws:sqs:us-east-1:123456789012:my-dlq
|
|
223
|
+
```
|
|
215
224
|
|
|
216
|
-
|
|
225
|
+
### 権限設定(permissions)
|
|
226
|
+
|
|
227
|
+
外部サービスやIAMユーザー・ロールからLambda関数を呼び出すための権限を自動設定します。
|
|
228
|
+
|
|
229
|
+
#### サービス別の権限設定
|
|
230
|
+
```yaml
|
|
231
|
+
permissions:
|
|
232
|
+
- service: apigateway # API Gateway
|
|
233
|
+
source_arn: "arn:aws:execute-api:region:account:api-id/*"
|
|
234
|
+
- service: events # EventBridge
|
|
235
|
+
source_arn: "arn:aws:events:region:account:rule/rule-name"
|
|
236
|
+
- service: sns # SNS
|
|
237
|
+
source_arn: "arn:aws:sns:region:account:topic-name"
|
|
238
|
+
- service: s3 # S3
|
|
239
|
+
source_arn: "arn:aws:s3:::bucket-name"
|
|
240
|
+
- service: elasticloadbalancing # ALB
|
|
241
|
+
source_arn: "arn:aws:elasticloadbalancing:region:account:targetgroup/name"
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
#### IAMユーザー・ロールの直接指定
|
|
245
|
+
```yaml
|
|
246
|
+
permissions:
|
|
247
|
+
- principal: "arn:aws:iam::123456789012:user/MyUser"
|
|
248
|
+
statement_id: "allow-my-user"
|
|
249
|
+
action: "lambda:InvokeFunction"
|
|
250
|
+
- principal: "arn:aws:iam::123456789012:role/MyRole"
|
|
251
|
+
statement_id: "allow-my-role"
|
|
252
|
+
- principal: "123456789012" # AWS Account ID
|
|
253
|
+
statement_id: "allow-account"
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
#### 混合設定例
|
|
257
|
+
```yaml
|
|
258
|
+
permissions:
|
|
259
|
+
# サービス別設定(principalは自動設定)
|
|
260
|
+
- service: apigateway
|
|
261
|
+
source_arn: "arn:aws:execute-api:region:account:api-id/*"
|
|
262
|
+
statement_id: "api-gateway-invoke"
|
|
263
|
+
|
|
264
|
+
# IAMユーザー直接指定
|
|
265
|
+
- principal: "arn:aws:iam::123456789012:user/DeployUser"
|
|
266
|
+
statement_id: "deploy-user-invoke"
|
|
267
|
+
action: "lambda:InvokeFunction"
|
|
268
|
+
|
|
269
|
+
# IAMロール直接指定
|
|
270
|
+
- principal: "arn:aws:iam::123456789012:role/CrossAccountRole"
|
|
271
|
+
statement_id: "cross-account-invoke"
|
|
272
|
+
source_arn: "arn:aws:iam::123456789012:role/CrossAccountRole"
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**注意**: `service` または `principal` のどちらか一方を必ず指定してください。両方指定した場合は `principal` が優先されます。
|
|
276
|
+
|
|
277
|
+
### 環境変数による動的設定
|
|
278
|
+
|
|
279
|
+
```yaml
|
|
280
|
+
# 環境変数を使用した設定
|
|
281
|
+
function_name: ${ENV_NAME}_my_function
|
|
282
|
+
role: arn:aws:iam::123456789012:role/lambda-role-${ENV_NAME}
|
|
283
|
+
environment:
|
|
284
|
+
DB_HOST: ${DB_HOST}
|
|
285
|
+
ENV: ${ENV_NAME}
|
|
217
286
|
tags:
|
|
218
|
-
Environment:
|
|
219
|
-
|
|
220
|
-
|
|
287
|
+
Environment: ${ENV_NAME}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
実行時に環境変数を設定:
|
|
291
|
+
```bash
|
|
292
|
+
ENV_NAME=prod DB_HOST=prod.example.com pnpx @infodb/lctl deploy my-function
|
|
221
293
|
```
|
|
222
294
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
1. `--params` で指定したパラメータ変数 (`$key`)
|
|
267
|
-
2. 環境変数 (`${VAR_NAME}`)
|
|
268
|
-
3. 存在しない変数の場合はエラー
|
|
269
|
-
|
|
270
|
-
## エラーハンドリング
|
|
271
|
-
- AWS CLIコマンドが失敗した場合、適切なエラーメッセージを表示
|
|
272
|
-
- 必須パラメータが不足している場合、使用方法を表示
|
|
273
|
-
- 存在しない関数に対する操作の場合、エラーメッセージを表示
|
|
274
|
-
- YAML設定ファイルの構文エラーがある場合、詳細なエラーメッセージを表示
|
|
295
|
+
## 環境要件
|
|
296
|
+
|
|
297
|
+
- Node.js 16以上
|
|
298
|
+
- AWS CLI v2がインストールされていること
|
|
299
|
+
- 適切なAWS認証情報が設定されていること
|
|
300
|
+
- `configs/` と `functions/` ディレクトリが存在すること
|
|
301
|
+
|
|
302
|
+
## AWS認証情報の設定
|
|
303
|
+
|
|
304
|
+
以下のいずれかの方法でAWS認証情報を設定してください:
|
|
305
|
+
|
|
306
|
+
1. AWS CLIによる設定:
|
|
307
|
+
```bash
|
|
308
|
+
aws configure
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
2. 環境変数による設定:
|
|
312
|
+
```bash
|
|
313
|
+
export AWS_ACCESS_KEY_ID=your-access-key
|
|
314
|
+
export AWS_SECRET_ACCESS_KEY=your-secret-key
|
|
315
|
+
export AWS_DEFAULT_REGION=us-east-1
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
3. IAMロールの使用(EC2、Lambda等)
|
|
319
|
+
|
|
320
|
+
## トラブルシューティング
|
|
321
|
+
|
|
322
|
+
### よくある問題
|
|
323
|
+
1. **AWS CLI not found**: AWS CLI v2がインストールされていることを確認
|
|
324
|
+
2. **権限エラー**: 適切なIAMロールとポリシーが設定されていることを確認
|
|
325
|
+
3. **YAML設定ファイルが見つからない**: `configs/<config-name>.yaml` が存在することを確認
|
|
326
|
+
4. **YAML構文エラー**: YAML ファイルの構文を確認
|
|
327
|
+
5. **環境変数が見つからない**: `${VAR_NAME}` で参照する環境変数が設定されていることを確認
|
|
328
|
+
|
|
329
|
+
### デバッグ
|
|
330
|
+
```bash
|
|
331
|
+
# 詳細ログ出力
|
|
332
|
+
pnpx @infodb/lctl deploy my-function --verbose
|
|
333
|
+
|
|
334
|
+
# スクリプト出力してデバッグ
|
|
335
|
+
pnpx @infodb/lctl export my-function --output debug-script.sh
|
|
336
|
+
bash debug-script.sh
|
|
337
|
+
```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB/F"}
|
package/dist/commands/delete.js
CHANGED
|
@@ -6,14 +6,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.deleteCommand = deleteCommand;
|
|
7
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
8
8
|
const aws_cli_1 = require("../utils/aws-cli");
|
|
9
|
+
const config_1 = require("../utils/config");
|
|
9
10
|
const logger_1 = require("../utils/logger");
|
|
10
11
|
async function deleteCommand(functionName, options) {
|
|
11
12
|
const logger = new logger_1.Logger(options.verbose || false);
|
|
12
13
|
try {
|
|
13
14
|
logger.info(`Deleting Lambda function: ${chalk_1.default.cyan(functionName)}`);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
// Load configuration to get actual function name
|
|
16
|
+
const configManager = new config_1.ConfigManager(functionName, logger);
|
|
17
|
+
const config = await configManager.loadConfig({});
|
|
18
|
+
const actualFunctionName = config.function_name || functionName;
|
|
19
|
+
const awsCliManager = new aws_cli_1.AwsCliManager(undefined, undefined, logger);
|
|
20
|
+
await awsCliManager.deleteFunction(actualFunctionName);
|
|
21
|
+
logger.success(`✅ Lambda function ${chalk_1.default.cyan(actualFunctionName)} deleted successfully!`);
|
|
17
22
|
}
|
|
18
23
|
catch (error) {
|
|
19
24
|
logger.error(`❌ Failed to delete Lambda function: ${error instanceof Error ? error.message : error}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":";;;;;AASA,sCAoBC;AA7BD,kDAA0B;AAC1B,8CAAiD;AACjD,4CAAgD;AAChD,4CAAyC;AAMlC,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,iDAAiD;QACjD,MAAM,aAAa,GAAG,IAAI,sBAAa,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAClD,MAAM,kBAAkB,GAAG,MAAM,CAAC,aAAa,IAAI,YAAY,CAAC;QAEhE,MAAM,aAAa,GAAG,IAAI,uBAAa,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACtE,MAAM,aAAa,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;QAEvD,MAAM,CAAC,OAAO,CAAC,qBAAqB,eAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,CAAC;IAE9F,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"}
|
|
@@ -1,12 +1,4 @@
|
|
|
1
1
|
export interface DeployOptions {
|
|
2
|
-
runtime?: string;
|
|
3
|
-
handler?: string;
|
|
4
|
-
role?: string;
|
|
5
|
-
params?: string[];
|
|
6
|
-
config?: string;
|
|
7
|
-
function?: string;
|
|
8
|
-
region?: string;
|
|
9
|
-
profile?: string;
|
|
10
2
|
verbose?: boolean;
|
|
11
3
|
}
|
|
12
4
|
export declare function deployCommand(functionName: string, options: DeployOptions): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuC/F"}
|
package/dist/commands/deploy.js
CHANGED
|
@@ -13,42 +13,24 @@ async function deployCommand(functionName, options) {
|
|
|
13
13
|
const logger = new logger_1.Logger(options.verbose || false);
|
|
14
14
|
try {
|
|
15
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
16
|
// Load configuration
|
|
30
|
-
const configManager = new config_1.ConfigManager(functionName,
|
|
31
|
-
const config = await configManager.loadConfig({
|
|
32
|
-
runtime: options.runtime,
|
|
33
|
-
handler: options.handler,
|
|
34
|
-
role: options.role,
|
|
35
|
-
}, options.config, options.function);
|
|
17
|
+
const configManager = new config_1.ConfigManager(functionName, logger);
|
|
18
|
+
const config = await configManager.loadConfig({});
|
|
36
19
|
logger.verbose('Configuration loaded:', config);
|
|
37
20
|
// Generate and execute deployment script
|
|
38
21
|
const scriptGenerator = new script_generator_1.ScriptGenerator(logger);
|
|
39
|
-
const
|
|
22
|
+
const actualFunctionName = config.function_name || functionName;
|
|
23
|
+
const script = scriptGenerator.generateDeployScript(actualFunctionName, config);
|
|
40
24
|
const scriptPath = await scriptGenerator.saveScript(functionName, script);
|
|
41
25
|
try {
|
|
42
26
|
// Set environment variables for the script
|
|
43
27
|
const env = {
|
|
44
28
|
...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
29
|
};
|
|
48
30
|
// Execute the script
|
|
49
31
|
logger.info('Executing deployment script...');
|
|
50
32
|
await executeScript(scriptPath, env, logger);
|
|
51
|
-
logger.success(`✅ Lambda function ${chalk_1.default.cyan(
|
|
33
|
+
logger.success(`✅ Lambda function ${chalk_1.default.cyan(actualFunctionName)} deployed successfully!`);
|
|
52
34
|
}
|
|
53
35
|
finally {
|
|
54
36
|
// Clean up script file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
export interface ExportOptions {
|
|
2
|
-
runtime?: string;
|
|
3
|
-
handler?: string;
|
|
4
|
-
role?: string;
|
|
5
|
-
params?: string[];
|
|
6
|
-
config?: string;
|
|
7
|
-
function?: string;
|
|
8
|
-
region?: string;
|
|
9
|
-
profile?: string;
|
|
10
|
-
verbose?: boolean;
|
|
11
2
|
output?: string;
|
|
3
|
+
verbose?: boolean;
|
|
12
4
|
}
|
|
13
5
|
export declare function exportCommand(functionName: string, options: ExportOptions): Promise<void>;
|
|
14
6
|
//# sourceMappingURL=export.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B/F"}
|
package/dist/commands/export.js
CHANGED
|
@@ -12,30 +12,14 @@ async function exportCommand(functionName, options) {
|
|
|
12
12
|
const logger = new logger_1.Logger(options.verbose || false);
|
|
13
13
|
try {
|
|
14
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
15
|
// Load configuration
|
|
29
|
-
const configManager = new config_1.ConfigManager(functionName,
|
|
30
|
-
const config = await configManager.loadConfig({
|
|
31
|
-
runtime: options.runtime,
|
|
32
|
-
handler: options.handler,
|
|
33
|
-
role: options.role,
|
|
34
|
-
}, options.config, options.function);
|
|
16
|
+
const configManager = new config_1.ConfigManager(functionName, logger);
|
|
17
|
+
const config = await configManager.loadConfig({});
|
|
35
18
|
logger.verbose('Configuration loaded:', config);
|
|
36
19
|
// Generate script
|
|
37
20
|
const scriptGenerator = new script_generator_1.ScriptGenerator(logger);
|
|
38
|
-
const
|
|
21
|
+
const actualFunctionName = config.function_name || functionName;
|
|
22
|
+
const script = scriptGenerator.generateDeployScript(actualFunctionName, config);
|
|
39
23
|
// Save script
|
|
40
24
|
const outputPath = options.output || `deploy-${functionName}.sh`;
|
|
41
25
|
const scriptPath = await scriptGenerator.saveScript(outputPath, script);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":";;;;;AAUA,sCA4BC;AAtCD,kDAA0B;AAC1B,4CAAgD;AAChD,gEAA4D;AAC5D,4CAAyC;AAOlC,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,qBAAqB;QACrB,MAAM,aAAa,GAAG,IAAI,sBAAa,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAElD,MAAM,CAAC,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;QAEhD,kBAAkB;QAClB,MAAM,eAAe,GAAG,IAAI,kCAAe,CAAC,MAAM,CAAC,CAAC;QACpD,MAAM,kBAAkB,GAAG,MAAM,CAAC,aAAa,IAAI,YAAY,CAAC;QAChE,MAAM,MAAM,GAAG,eAAe,CAAC,oBAAoB,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;QAEhF,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"}
|
package/dist/commands/info.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgD3F"}
|
package/dist/commands/info.js
CHANGED
|
@@ -6,13 +6,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.infoCommand = infoCommand;
|
|
7
7
|
const chalk_1 = __importDefault(require("chalk"));
|
|
8
8
|
const aws_cli_1 = require("../utils/aws-cli");
|
|
9
|
+
const config_1 = require("../utils/config");
|
|
9
10
|
const logger_1 = require("../utils/logger");
|
|
10
11
|
async function infoCommand(functionName, options) {
|
|
11
12
|
const logger = new logger_1.Logger(options.verbose || false);
|
|
12
13
|
try {
|
|
13
14
|
logger.info(`Getting information for Lambda function: ${chalk_1.default.cyan(functionName)}`);
|
|
14
|
-
|
|
15
|
-
const
|
|
15
|
+
// Load configuration to get actual function name
|
|
16
|
+
const configManager = new config_1.ConfigManager(functionName, logger);
|
|
17
|
+
const config = await configManager.loadConfig({});
|
|
18
|
+
const actualFunctionName = config.function_name || functionName;
|
|
19
|
+
const awsCliManager = new aws_cli_1.AwsCliManager(undefined, undefined, logger);
|
|
20
|
+
const functionInfo = await awsCliManager.getFunctionInfo(actualFunctionName);
|
|
16
21
|
// Display function information in a readable format
|
|
17
22
|
console.log(chalk_1.default.green('\n📋 Lambda Function Information:'));
|
|
18
23
|
console.log(chalk_1.default.cyan('Function Name:'), functionInfo.FunctionName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -14,54 +14,34 @@ const program = new commander_1.Command();
|
|
|
14
14
|
program
|
|
15
15
|
.name('lctl')
|
|
16
16
|
.description('AWS Lambda Control Tool - Simple CLI for managing Lambda functions')
|
|
17
|
-
.version('0.
|
|
17
|
+
.version('0.5.0');
|
|
18
18
|
// Deploy command
|
|
19
19
|
program
|
|
20
20
|
.command('deploy')
|
|
21
21
|
.description('Deploy Lambda function (create or update)')
|
|
22
|
-
.argument('<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('--config <directory>', 'Config directory path', 'configs')
|
|
28
|
-
.option('--function <directory>', 'Functions directory path', 'functions')
|
|
29
|
-
.option('--region <region>', 'AWS region')
|
|
30
|
-
.option('--profile <profile>', 'AWS profile')
|
|
22
|
+
.argument('<function-name>', 'Configuration file name (without .yaml extension)')
|
|
31
23
|
.option('--verbose', 'Verbose output')
|
|
32
24
|
.action(deploy_1.deployCommand);
|
|
33
25
|
// Delete command
|
|
34
26
|
program
|
|
35
27
|
.command('delete')
|
|
36
28
|
.description('Delete Lambda function')
|
|
37
|
-
.argument('<function-name>', '
|
|
38
|
-
.option('--region <region>', 'AWS region')
|
|
39
|
-
.option('--profile <profile>', 'AWS profile')
|
|
29
|
+
.argument('<function-name>', 'Configuration file name (without .yaml extension)')
|
|
40
30
|
.option('--verbose', 'Verbose output')
|
|
41
31
|
.action(delete_1.deleteCommand);
|
|
42
32
|
// Info command
|
|
43
33
|
program
|
|
44
34
|
.command('info')
|
|
45
35
|
.description('Show Lambda function information')
|
|
46
|
-
.argument('<function-name>', '
|
|
47
|
-
.option('--region <region>', 'AWS region')
|
|
48
|
-
.option('--profile <profile>', 'AWS profile')
|
|
36
|
+
.argument('<function-name>', 'Configuration file name (without .yaml extension)')
|
|
49
37
|
.option('--verbose', 'Verbose output')
|
|
50
38
|
.action(info_1.infoCommand);
|
|
51
39
|
// Export command
|
|
52
40
|
program
|
|
53
41
|
.command('export')
|
|
54
42
|
.description('Export deployment script')
|
|
55
|
-
.argument('<function-name>', '
|
|
56
|
-
.option('--runtime <runtime>', 'Runtime environment', 'python3.12')
|
|
57
|
-
.option('--handler <handler>', 'Handler function')
|
|
58
|
-
.option('--role <role-arn>', 'IAM role ARN (required for new functions)')
|
|
59
|
-
.option('--params <key=value>', 'Parameters for YAML variable substitution', [])
|
|
60
|
-
.option('--config <directory>', 'Config directory path', 'configs')
|
|
61
|
-
.option('--function <directory>', 'Functions directory path', 'functions')
|
|
43
|
+
.argument('<function-name>', 'Configuration file name (without .yaml extension)')
|
|
62
44
|
.option('--output <file>', 'Output script file path')
|
|
63
|
-
.option('--region <region>', 'AWS region')
|
|
64
|
-
.option('--profile <profile>', 'AWS profile')
|
|
65
45
|
.option('--verbose', 'Verbose output')
|
|
66
46
|
.action(export_1.exportCommand);
|
|
67
47
|
program.parse();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAkD;AAClD,8CAAkD;AAClD,0CAA8C;AAC9C,8CAAkD;AAElD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,oEAAoE,CAAC;KACjF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2CAA2C,CAAC;KACxD,QAAQ,CAAC,iBAAiB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,8CAAkD;AAClD,8CAAkD;AAClD,0CAA8C;AAC9C,8CAAkD;AAElD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,oEAAoE,CAAC;KACjF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2CAA2C,CAAC;KACxD,QAAQ,CAAC,iBAAiB,EAAE,mDAAmD,CAAC;KAChF,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC;KACrC,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,wBAAwB,CAAC;KACrC,QAAQ,CAAC,iBAAiB,EAAE,mDAAmD,CAAC;KAChF,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC;KACrC,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,eAAe;AACf,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,kCAAkC,CAAC;KAC/C,QAAQ,CAAC,iBAAiB,EAAE,mDAAmD,CAAC;KAChF,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC;KACrC,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,0BAA0B,CAAC;KACvC,QAAQ,CAAC,iBAAiB,EAAE,mDAAmD,CAAC;KAChF,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;KACpD,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC;KACrC,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,OAAO,CAAC,KAAK,EAAE,CAAC;AAEhB,0BAA0B;AAC1B,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,KAAK,EAAE,EAAE;IACzC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,KAAK,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/utils/config.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Logger } from './logger';
|
|
2
2
|
export interface LambdaConfig {
|
|
3
|
+
function_name?: string;
|
|
3
4
|
runtime: string;
|
|
4
5
|
handler: string;
|
|
5
6
|
role: string;
|
|
@@ -21,6 +22,13 @@ export interface LambdaConfig {
|
|
|
21
22
|
target_arn: string;
|
|
22
23
|
};
|
|
23
24
|
tags?: Record<string, string>;
|
|
25
|
+
permissions?: Array<{
|
|
26
|
+
service?: string;
|
|
27
|
+
principal?: string;
|
|
28
|
+
source_arn?: string;
|
|
29
|
+
statement_id?: string;
|
|
30
|
+
action?: string;
|
|
31
|
+
}>;
|
|
24
32
|
log_retention_days?: number;
|
|
25
33
|
auto_create_log_group?: boolean;
|
|
26
34
|
zip_excludes?: string[];
|
|
@@ -33,10 +41,9 @@ export interface DeployConfig {
|
|
|
33
41
|
}
|
|
34
42
|
export declare class ConfigManager {
|
|
35
43
|
private functionName;
|
|
36
|
-
private params;
|
|
37
44
|
private logger;
|
|
38
|
-
constructor(functionName: string,
|
|
39
|
-
loadConfig(overrides: DeployConfig
|
|
45
|
+
constructor(functionName: string, logger: Logger);
|
|
46
|
+
loadConfig(overrides: DeployConfig): Promise<LambdaConfig>;
|
|
40
47
|
private substituteVariables;
|
|
41
48
|
}
|
|
42
49
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE;QACJ,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;IACF,iBAAiB,CAAC,EAAE;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAG9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAGxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,aAAa;IAEtB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE;QACJ,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;IACF,iBAAiB,CAAC,EAAE;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAG9B,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IAGH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAGxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,aAAa;IAEtB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;gBADN,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM;IAGlB,UAAU,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IA6DhE,OAAO,CAAC,mBAAmB;CA4B5B"}
|
package/dist/utils/config.js
CHANGED
|
@@ -38,34 +38,40 @@ const fs = __importStar(require("fs/promises"));
|
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
39
|
const yaml = __importStar(require("yaml"));
|
|
40
40
|
class ConfigManager {
|
|
41
|
-
constructor(functionName,
|
|
41
|
+
constructor(functionName, logger) {
|
|
42
42
|
this.functionName = functionName;
|
|
43
|
-
this.params = params;
|
|
44
43
|
this.logger = logger;
|
|
45
44
|
}
|
|
46
|
-
async loadConfig(overrides
|
|
47
|
-
const configDirectory =
|
|
48
|
-
const functionsDirectory =
|
|
49
|
-
const yamlPath = path.
|
|
45
|
+
async loadConfig(overrides) {
|
|
46
|
+
const configDirectory = 'configs';
|
|
47
|
+
const functionsDirectory = 'functions';
|
|
48
|
+
const yamlPath = path.resolve(configDirectory, `${this.functionName}.yaml`);
|
|
50
49
|
let yamlConfig = {};
|
|
51
|
-
//
|
|
50
|
+
// YAML config is now required
|
|
52
51
|
try {
|
|
53
52
|
const yamlContent = await fs.readFile(yamlPath, 'utf-8');
|
|
54
53
|
const parsedYaml = yaml.parse(yamlContent);
|
|
54
|
+
this.logger.verbose(`Parsed YAML before substitution:`, parsedYaml);
|
|
55
55
|
yamlConfig = this.substituteVariables(parsedYaml);
|
|
56
56
|
this.logger.verbose(`Loaded YAML config from: ${yamlPath}`);
|
|
57
|
+
this.logger.verbose(`YAML config after substitution:`, yamlConfig);
|
|
57
58
|
}
|
|
58
59
|
catch (error) {
|
|
59
60
|
if (error instanceof Error) {
|
|
60
|
-
|
|
61
|
+
if (error.code === 'ENOENT') {
|
|
62
|
+
throw new Error(`YAML config file is required but not found: ${yamlPath}`);
|
|
63
|
+
}
|
|
64
|
+
// 変数展開エラーの場合、エラーを再スローしてユーザーに通知
|
|
65
|
+
throw error;
|
|
61
66
|
}
|
|
62
67
|
else {
|
|
63
|
-
|
|
68
|
+
throw new Error(`Failed to load YAML config from: ${yamlPath}`);
|
|
64
69
|
}
|
|
65
70
|
}
|
|
66
71
|
// Set defaults
|
|
67
72
|
const defaultHandler = `${this.functionName}.handler`;
|
|
68
73
|
const config = {
|
|
74
|
+
function_name: yamlConfig.function_name || this.functionName,
|
|
69
75
|
runtime: overrides.runtime || yamlConfig.runtime || 'python3.12',
|
|
70
76
|
handler: overrides.handler || yamlConfig.handler || defaultHandler,
|
|
71
77
|
role: overrides.role || yamlConfig.role || '',
|
|
@@ -82,6 +88,7 @@ class ConfigManager {
|
|
|
82
88
|
vpc: yamlConfig.vpc,
|
|
83
89
|
dead_letter_queue: yamlConfig.dead_letter_queue,
|
|
84
90
|
tags: yamlConfig.tags || {},
|
|
91
|
+
permissions: yamlConfig.permissions || [],
|
|
85
92
|
log_retention_days: yamlConfig.log_retention_days || 7,
|
|
86
93
|
auto_create_log_group: yamlConfig.auto_create_log_group !== false,
|
|
87
94
|
zip_excludes: yamlConfig.zip_excludes || ['*.git*', 'node_modules/*', '*.zip', 'dist/*', '.DS_Store'],
|
|
@@ -95,13 +102,8 @@ class ConfigManager {
|
|
|
95
102
|
}
|
|
96
103
|
substituteVariables(obj) {
|
|
97
104
|
if (typeof obj === 'string') {
|
|
98
|
-
// Replace $key with params
|
|
99
|
-
let result = obj;
|
|
100
|
-
for (const [key, value] of Object.entries(this.params)) {
|
|
101
|
-
result = result.replace(new RegExp(`\\$${key}\\b`, 'g'), value);
|
|
102
|
-
}
|
|
103
105
|
// Replace ${ENV_VAR} with environment variables
|
|
104
|
-
result =
|
|
106
|
+
const result = obj.replace(/\$\{([^}]+)\}/g, (_, envVar) => {
|
|
105
107
|
const envValue = process.env[envVar];
|
|
106
108
|
if (envValue === undefined) {
|
|
107
109
|
throw new Error(`Environment variable ${envVar} is not defined`);
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAC7B,2CAA6B;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ export declare class ScriptGenerator {
|
|
|
4
4
|
private logger;
|
|
5
5
|
constructor(logger: Logger);
|
|
6
6
|
generateDeployScript(functionName: string, config: LambdaConfig): string;
|
|
7
|
-
private generateEnvironmentSection;
|
|
8
7
|
private generateZipSection;
|
|
9
8
|
private generateEnvironmentVariablesSection;
|
|
10
9
|
private generateLayersSection;
|
|
@@ -12,6 +11,8 @@ export declare class ScriptGenerator {
|
|
|
12
11
|
private generateLayersFlag;
|
|
13
12
|
private generateDescriptionFlag;
|
|
14
13
|
private generateAdditionalConfigurationCommands;
|
|
14
|
+
private generatePermissionsSection;
|
|
15
|
+
private getPrincipalForService;
|
|
15
16
|
private generateLogGroupSection;
|
|
16
17
|
saveScript(outputPath: string, script: string): Promise<string>;
|
|
17
18
|
cleanupScript(scriptPath: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script-generator.d.ts","sourceRoot":"","sources":["../../src/utils/script-generator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,qBAAa,eAAe;IACd,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAElC,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"script-generator.d.ts","sourceRoot":"","sources":["../../src/utils/script-generator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,qBAAa,eAAe;IACd,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAElC,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM;IAiDxE,OAAO,CAAC,kBAAkB;IAoC1B,OAAO,CAAC,mCAAmC;IAqB3C,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,gCAAgC;IAOxC,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,uCAAuC;IA0C/C,OAAO,CAAC,0BAA0B;IAqClC,OAAO,CAAC,sBAAsB;IA0B9B,OAAO,CAAC,uBAAuB;IAuBzB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO/D,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQvD"}
|
|
@@ -18,7 +18,7 @@ set -eu
|
|
|
18
18
|
# Function: ${functionName}
|
|
19
19
|
# Generated at: ${new Date().toISOString()}
|
|
20
20
|
|
|
21
|
-
${this.
|
|
21
|
+
${this.generateZipSection(config)}${this.generateEnvironmentVariablesSection(config)}${this.generateLayersSection(config)}# Lambda関数の存在を確認
|
|
22
22
|
if aws lambda get-function --function-name ${functionName} &> /dev/null; then
|
|
23
23
|
echo "Updating existing Lambda function: ${functionName}"
|
|
24
24
|
aws lambda update-function-code --function-name ${functionName} --zip-file fileb://lambda.zip | jq .
|
|
@@ -31,25 +31,23 @@ if aws lambda get-function --function-name ${functionName} &> /dev/null; then
|
|
|
31
31
|
--timeout ${config.timeout || 3} \\
|
|
32
32
|
--memory-size ${config.memory || 128} \\
|
|
33
33
|
--architectures ${config.architecture || 'x86_64'}${this.generateEnvironmentVariablesFlag(config)}${this.generateLayersFlag(config)} | jq .
|
|
34
|
-
|
|
35
|
-
${
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
else
|
|
35
|
+
echo "Creating new Lambda function: ${functionName}"
|
|
36
|
+
aws lambda create-function --function-name ${functionName} \\
|
|
37
|
+
--zip-file fileb://lambda.zip \\
|
|
38
|
+
--handler ${config.handler} \\
|
|
39
|
+
--runtime ${config.runtime} \\
|
|
40
|
+
--architectures ${config.architecture || 'x86_64'} \\
|
|
41
|
+
--timeout ${config.timeout || 3} \\
|
|
42
|
+
--memory-size ${config.memory || 128} \\
|
|
43
|
+
--role ${config.role}${this.generateEnvironmentVariablesFlag(config)}${this.generateLayersFlag(config)}${this.generateDescriptionFlag(config)} | jq .
|
|
39
44
|
fi
|
|
40
45
|
|
|
41
|
-
|
|
42
|
-
aws lambda create-function --function-name ${functionName} \\
|
|
43
|
-
--zip-file fileb://lambda.zip \\
|
|
44
|
-
--handler ${config.handler} \\
|
|
45
|
-
--runtime ${config.runtime} \\
|
|
46
|
-
--architectures ${config.architecture || 'x86_64'} \\
|
|
47
|
-
--timeout ${config.timeout || 3} \\
|
|
48
|
-
--memory-size ${config.memory || 128} \\
|
|
49
|
-
--role ${config.role}${this.generateEnvironmentVariablesFlag(config)}${this.generateLayersFlag(config)}${this.generateDescriptionFlag(config)} | jq .
|
|
50
|
-
|
|
46
|
+
# 共通の追加設定
|
|
51
47
|
${this.generateAdditionalConfigurationCommands(functionName, config)}
|
|
52
48
|
|
|
49
|
+
${this.generatePermissionsSection(functionName, config)}
|
|
50
|
+
|
|
53
51
|
${this.generateLogGroupSection(functionName, config)}
|
|
54
52
|
|
|
55
53
|
rm lambda.zip
|
|
@@ -58,9 +56,6 @@ echo "✅ Lambda function ${functionName} deployed successfully!"
|
|
|
58
56
|
`;
|
|
59
57
|
return script;
|
|
60
58
|
}
|
|
61
|
-
generateEnvironmentSection(config) {
|
|
62
|
-
return '';
|
|
63
|
-
}
|
|
64
59
|
generateZipSection(config) {
|
|
65
60
|
let section = '# Create deployment package\n';
|
|
66
61
|
const functionsDir = config.functionsDirectory || 'functions';
|
|
@@ -171,6 +166,62 @@ echo "✅ Lambda function ${functionName} deployed successfully!"
|
|
|
171
166
|
}
|
|
172
167
|
return commands;
|
|
173
168
|
}
|
|
169
|
+
generatePermissionsSection(functionName, config) {
|
|
170
|
+
if (!config.permissions || config.permissions.length === 0) {
|
|
171
|
+
return '';
|
|
172
|
+
}
|
|
173
|
+
let section = '\n# Add permissions\n';
|
|
174
|
+
config.permissions.forEach((permission, index) => {
|
|
175
|
+
const statementId = permission.statement_id || `${permission.service || 'custom'}-${index}`;
|
|
176
|
+
const action = permission.action || 'lambda:InvokeFunction';
|
|
177
|
+
// Use explicit principal if provided, otherwise derive from service
|
|
178
|
+
let principal;
|
|
179
|
+
if (permission.principal) {
|
|
180
|
+
principal = permission.principal;
|
|
181
|
+
}
|
|
182
|
+
else if (permission.service) {
|
|
183
|
+
principal = this.getPrincipalForService(permission.service);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
throw new Error(`Permission at index ${index} must specify either 'principal' or 'service'`);
|
|
187
|
+
}
|
|
188
|
+
section += `aws lambda add-permission \\
|
|
189
|
+
--function-name ${functionName} \\
|
|
190
|
+
--statement-id ${statementId} \\
|
|
191
|
+
--action ${action} \\
|
|
192
|
+
--principal ${principal}`;
|
|
193
|
+
if (permission.source_arn) {
|
|
194
|
+
section += ` \\
|
|
195
|
+
--source-arn ${permission.source_arn}`;
|
|
196
|
+
}
|
|
197
|
+
section += ' | jq .\n';
|
|
198
|
+
});
|
|
199
|
+
return section;
|
|
200
|
+
}
|
|
201
|
+
getPrincipalForService(service) {
|
|
202
|
+
const servicePrincipals = {
|
|
203
|
+
'apigateway': 'apigateway.amazonaws.com',
|
|
204
|
+
'events': 'events.amazonaws.com',
|
|
205
|
+
'sns': 'sns.amazonaws.com',
|
|
206
|
+
'sqs': 'sqs.amazonaws.com',
|
|
207
|
+
's3': 's3.amazonaws.com',
|
|
208
|
+
'cloudwatch': 'events.amazonaws.com',
|
|
209
|
+
'iot': 'iot.amazonaws.com',
|
|
210
|
+
'logs': 'logs.amazonaws.com',
|
|
211
|
+
'elasticloadbalancing': 'elasticloadbalancing.amazonaws.com',
|
|
212
|
+
'cognito': 'cognito-idp.amazonaws.com',
|
|
213
|
+
'alexa': 'alexa-appkit.amazon.com',
|
|
214
|
+
'lex': 'lex.amazonaws.com',
|
|
215
|
+
'config': 'config.amazonaws.com',
|
|
216
|
+
'cloudformation': 'cloudformation.amazonaws.com',
|
|
217
|
+
'kinesis': 'kinesis.amazonaws.com',
|
|
218
|
+
'dynamodb': 'dynamodb.amazonaws.com',
|
|
219
|
+
'codecommit': 'codecommit.amazonaws.com',
|
|
220
|
+
'codebuild': 'codebuild.amazonaws.com',
|
|
221
|
+
'codepipeline': 'codepipeline.amazonaws.com',
|
|
222
|
+
};
|
|
223
|
+
return servicePrincipals[service] || service;
|
|
224
|
+
}
|
|
174
225
|
generateLogGroupSection(functionName, config) {
|
|
175
226
|
let section = '';
|
|
176
227
|
// Only create log group if auto_create_log_group is true (default)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script-generator.js","sourceRoot":"","sources":["../../src/utils/script-generator.ts"],"names":[],"mappings":";;;;;;AAAA,2BAAoC;AACpC,gDAAwB;AAIxB,MAAa,eAAe;IAC1B,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAEtC,oBAAoB,CAAC,YAAoB,EAAE,MAAoB;QAC7D,MAAM,MAAM,GAAG;;;;cAIL,YAAY;kBACR,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;;EAExC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"script-generator.js","sourceRoot":"","sources":["../../src/utils/script-generator.ts"],"names":[],"mappings":"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"}
|