@infodb/lctl 0.4.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 +216 -143
- 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 -7
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +4 -9
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/export.d.ts +1 -8
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +3 -6
- 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 -23
- package/dist/index.js.map +1 -1
- package/dist/utils/config.d.ts +9 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +11 -7
- 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,62 +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
|
-
- `--config <directory>`: 設定ファイルのディレクトリ (デフォルト: configs)
|
|
33
|
-
- `--function <directory>`: 関数ファイルのディレクトリ (デフォルト: functions)
|
|
67
|
+
- `--verbose`: 詳細なログを出力
|
|
34
68
|
|
|
35
69
|
**例:**
|
|
36
70
|
```bash
|
|
37
|
-
#
|
|
38
|
-
pnpx @infodb/lctl deploy my-function
|
|
39
|
-
|
|
40
|
-
# YAML設定ファイルを使用(推奨)
|
|
41
|
-
pnpx @infodb/lctl deploy my-function # configs/my-function.yaml から設定を読み込み
|
|
71
|
+
# 基本的な使用方法
|
|
72
|
+
pnpx @infodb/lctl deploy my-function
|
|
42
73
|
|
|
43
|
-
#
|
|
44
|
-
|
|
74
|
+
# 詳細ログ付き
|
|
75
|
+
pnpx @infodb/lctl deploy my-function --verbose
|
|
45
76
|
|
|
46
|
-
#
|
|
47
|
-
pnpx @infodb/lctl deploy my-function
|
|
48
|
-
|
|
49
|
-
# カスタム関数ディレクトリを使用
|
|
50
|
-
pnpx @infodb/lctl deploy my-function --function src
|
|
77
|
+
# 環境変数を使用
|
|
78
|
+
ENV_NAME=prod DB_HOST=prod.example.com pnpx @infodb/lctl deploy my-function
|
|
51
79
|
```
|
|
52
80
|
|
|
53
81
|
### 2. delete - Lambda関数の削除
|
|
54
82
|
```bash
|
|
55
|
-
pnpx @infodb/lctl delete <
|
|
83
|
+
pnpx @infodb/lctl delete <config-name> [オプション]
|
|
56
84
|
```
|
|
57
85
|
|
|
58
86
|
**必須引数:**
|
|
59
|
-
- `
|
|
87
|
+
- `config-name`: 設定ファイル名(.yaml拡張子は不要)
|
|
88
|
+
|
|
89
|
+
**オプション:**
|
|
90
|
+
- `--verbose`: 詳細なログを出力
|
|
60
91
|
|
|
61
92
|
**例:**
|
|
62
93
|
```bash
|
|
@@ -65,11 +96,14 @@ pnpx @infodb/lctl delete my-function
|
|
|
65
96
|
|
|
66
97
|
### 3. info - Lambda関数の詳細情報表示
|
|
67
98
|
```bash
|
|
68
|
-
pnpx @infodb/lctl info <
|
|
99
|
+
pnpx @infodb/lctl info <config-name> [オプション]
|
|
69
100
|
```
|
|
70
101
|
|
|
71
102
|
**必須引数:**
|
|
72
|
-
- `
|
|
103
|
+
- `config-name`: 設定ファイル名(.yaml拡張子は不要)
|
|
104
|
+
|
|
105
|
+
**オプション:**
|
|
106
|
+
- `--verbose`: 詳細なログを出力
|
|
73
107
|
|
|
74
108
|
**例:**
|
|
75
109
|
```bash
|
|
@@ -78,23 +112,14 @@ pnpx @infodb/lctl info my-function
|
|
|
78
112
|
|
|
79
113
|
### 4. export - デプロイメントスクリプトの出力
|
|
80
114
|
```bash
|
|
81
|
-
pnpx @infodb/lctl export <
|
|
115
|
+
pnpx @infodb/lctl export <config-name> [オプション]
|
|
82
116
|
```
|
|
83
117
|
|
|
84
|
-
デプロイ用のバッシュスクリプトを生成して保存します。
|
|
85
|
-
|
|
86
118
|
**必須引数:**
|
|
87
|
-
- `
|
|
119
|
+
- `config-name`: 設定ファイル名(.yaml拡張子は不要)
|
|
88
120
|
|
|
89
121
|
**オプション:**
|
|
90
|
-
- `--
|
|
91
|
-
- `--handler <handler>`: ハンドラー関数 (デフォルト: {function-name}.handler)
|
|
92
|
-
- `--role <role-arn>`: IAMロールARN (新規作成時に必須)
|
|
93
|
-
- `--config <directory>`: 設定ファイルのディレクトリ (デフォルト: configs)
|
|
94
|
-
- `--function <directory>`: 関数ファイルのディレクトリ (デフォルト: functions)
|
|
95
|
-
- `--output <file>`: 出力ファイルパス (デフォルト: deploy-{function-name}.sh)
|
|
96
|
-
- `--region <region>`: AWSリージョン
|
|
97
|
-
- `--profile <profile>`: AWSプロファイル
|
|
122
|
+
- `--output <file>`: 出力ファイルパス(デフォルト: deploy-{config-name}.sh)
|
|
98
123
|
- `--verbose`: 詳細なログを出力
|
|
99
124
|
|
|
100
125
|
**例:**
|
|
@@ -103,62 +128,35 @@ pnpx @infodb/lctl export <function-name> [オプション]
|
|
|
103
128
|
pnpx @infodb/lctl export my-function --output deploy-script.sh
|
|
104
129
|
|
|
105
130
|
# 環境変数を使用してスクリプト出力
|
|
106
|
-
|
|
131
|
+
ENV_NAME=prod DB_HOST=prod.example.com pnpx @infodb/lctl export my-function
|
|
107
132
|
```
|
|
108
133
|
|
|
109
|
-
##
|
|
110
|
-
- `--region <region>`: AWSリージョンを指定 (デフォルト: 環境変数またはAWS設定)
|
|
111
|
-
- `--profile <profile>`: AWSプロファイルを指定
|
|
112
|
-
- `--help, -h`: ヘルプを表示
|
|
113
|
-
- `--version, -v`: バージョンを表示
|
|
114
|
-
- `--verbose`: 詳細なログを出力
|
|
134
|
+
## YAML設定ファイル(必須)
|
|
115
135
|
|
|
116
|
-
|
|
117
|
-
- Node.js 16以上
|
|
118
|
-
- AWS CLI v2がインストールされていること
|
|
119
|
-
- 適切なAWS認証情報が設定されていること
|
|
120
|
-
|
|
121
|
-
## プロジェクト構成
|
|
122
|
-
|
|
123
|
-
推奨されるプロジェクト構成:
|
|
124
|
-
|
|
125
|
-
```
|
|
126
|
-
project/
|
|
127
|
-
├── configs/ # 設定ファイル
|
|
128
|
-
│ ├── my-function.yaml
|
|
129
|
-
│ └── other-function.yaml
|
|
130
|
-
├── functions/ # Lambda関数コード
|
|
131
|
-
│ ├── my-function.py
|
|
132
|
-
│ ├── requirements.txt
|
|
133
|
-
│ └── utils.py
|
|
134
|
-
└── other-files/
|
|
135
|
-
```
|
|
136
|
+
設定ファイルは `configs/` ディレクトリに配置し、`configs/<config-name>.yaml` 形式で命名します。
|
|
136
137
|
|
|
137
|
-
|
|
138
|
+
### 基本的な設定例
|
|
138
139
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
### ファイル名の規則
|
|
143
|
-
- `configs/<function-name>.yaml` (例: `configs/my-function.yaml`)
|
|
144
|
-
- `--config` オプションでディレクトリを変更可能
|
|
145
|
-
- `--function` オプションで関数ディレクトリを変更可能
|
|
140
|
+
```yaml
|
|
141
|
+
# configs/my-function.yaml
|
|
146
142
|
|
|
147
|
-
|
|
143
|
+
# 関数名設定(オプション)
|
|
144
|
+
function_name: ${ENV_NAME}_my_function # 環境変数を使用した動的命名
|
|
145
|
+
# function_name: my_function # 固定名
|
|
146
|
+
# 未設定の場合、設定ファイル名(my-function)を使用
|
|
148
147
|
|
|
149
|
-
|
|
150
|
-
# my-function.yaml
|
|
148
|
+
# 基本設定
|
|
151
149
|
runtime: python3.12
|
|
152
|
-
handler:
|
|
153
|
-
role:
|
|
150
|
+
handler: my_function.handler
|
|
151
|
+
role: arn:aws:iam::123456789012:role/lambda-execution-role
|
|
154
152
|
architecture: x86_64 # x86_64 または arm64
|
|
155
153
|
memory: 256
|
|
156
154
|
timeout: 30
|
|
157
155
|
description: "マイ Lambda 関数"
|
|
158
156
|
|
|
159
|
-
#
|
|
157
|
+
# デプロイするファイル(functionsディレクトリ内の相対パス)
|
|
160
158
|
files:
|
|
161
|
-
-
|
|
159
|
+
- my_function.py
|
|
162
160
|
- requirements.txt
|
|
163
161
|
- utils.py
|
|
164
162
|
- "lib/**/*.py" # glob パターンも使用可能
|
|
@@ -168,10 +166,19 @@ environment:
|
|
|
168
166
|
DB_HOST: ${DB_HOST}
|
|
169
167
|
DB_PORT: ${DB_PORT}
|
|
170
168
|
API_KEY: ${API_KEY}
|
|
171
|
-
ENV: ${
|
|
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"
|
|
172
179
|
|
|
173
180
|
# ログ設定
|
|
174
|
-
log_retention_days:
|
|
181
|
+
log_retention_days: 14 # ログ保持期間(日)
|
|
175
182
|
auto_create_log_group: true # ロググループ自動作成
|
|
176
183
|
|
|
177
184
|
# ZIP除外設定
|
|
@@ -179,16 +186,22 @@ zip_excludes: # ZIP化時の除外パターン
|
|
|
179
186
|
- "*.git*"
|
|
180
187
|
- "node_modules/*"
|
|
181
188
|
- "*.zip"
|
|
182
|
-
- "
|
|
183
|
-
- "
|
|
189
|
+
- "*.pyc"
|
|
190
|
+
- "__pycache__/*"
|
|
184
191
|
|
|
185
|
-
#
|
|
186
|
-
|
|
192
|
+
# タグ
|
|
193
|
+
tags:
|
|
194
|
+
Environment: ${ENV_NAME}
|
|
195
|
+
Team: backend
|
|
196
|
+
Project: my-project
|
|
197
|
+
```
|
|
187
198
|
|
|
188
|
-
|
|
189
|
-
provisioned_concurrency: 10
|
|
199
|
+
### 高度な設定例
|
|
190
200
|
|
|
191
|
-
|
|
201
|
+
```yaml
|
|
202
|
+
# 高度な設定
|
|
203
|
+
reserved_concurrency: 100
|
|
204
|
+
provisioned_concurrency: 10
|
|
192
205
|
ephemeral_storage: 1024 # MB (512-10240)
|
|
193
206
|
|
|
194
207
|
# レイヤー
|
|
@@ -207,58 +220,118 @@ vpc:
|
|
|
207
220
|
# デッドレターキュー
|
|
208
221
|
dead_letter_queue:
|
|
209
222
|
target_arn: arn:aws:sqs:us-east-1:123456789012:my-dlq
|
|
223
|
+
```
|
|
210
224
|
|
|
211
|
-
|
|
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}
|
|
212
286
|
tags:
|
|
213
|
-
Environment:
|
|
214
|
-
|
|
215
|
-
|
|
287
|
+
Environment: ${ENV_NAME}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
実行時に環境変数を設定:
|
|
291
|
+
```bash
|
|
292
|
+
ENV_NAME=prod DB_HOST=prod.example.com pnpx @infodb/lctl deploy my-function
|
|
293
|
+
```
|
|
294
|
+
|
|
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
|
|
216
309
|
```
|
|
217
310
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
| 項目 | 型 | 説明 | 例 |
|
|
221
|
-
|------|----|----|-----|
|
|
222
|
-
| `runtime` | string | ランタイム環境 | `python3.12`, `nodejs18.x` |
|
|
223
|
-
| `handler` | string | ハンドラー関数 | `my-function.handler`, `app.lambda_handler` |
|
|
224
|
-
| `role` | string | IAMロールARN | `arn:aws:iam::123456789012:role/...` |
|
|
225
|
-
| `architecture` | string | アーキテクチャ | `x86_64`, `arm64` |
|
|
226
|
-
| `memory` | number | メモリサイズ(MB) | `128`, `256`, `512` |
|
|
227
|
-
| `timeout` | number | タイムアウト時間(秒) | `3`, `30`, `900` |
|
|
228
|
-
| `description` | string | 関数の説明 | `"マイ Lambda 関数"` |
|
|
229
|
-
| `reserved_concurrency` | number | リザーブド同時実行数 | `100`, `1000` |
|
|
230
|
-
| `provisioned_concurrency` | number | プロビジョンド同時実行 | `10`, `50` |
|
|
231
|
-
| `ephemeral_storage` | number | エフェメラルストレージ(MB) | `512`, `1024`, `10240` |
|
|
232
|
-
| `files` | array | 含めるファイル・ディレクトリ | `["src/", "*.py"]` |
|
|
233
|
-
| `environment` | object | 環境変数 | `{DB_HOST: "localhost"}` |
|
|
234
|
-
| `log_retention_days` | number | ログ保持期間(日) | `7`, `14`, `30` |
|
|
235
|
-
| `auto_create_log_group` | boolean | ロググループ自動作成 | `true`, `false` |
|
|
236
|
-
| `zip_excludes` | array | ZIP化時の除外パターン | `["*.git*", "node_modules/*"]` |
|
|
237
|
-
| `layers` | array | レイヤーARN | `["arn:aws:lambda:..."]` |
|
|
238
|
-
| `vpc` | object | VPC設定 | `{subnets: [...], security_groups: [...]}` |
|
|
239
|
-
| `dead_letter_queue` | object | DLQ設定 | `{target_arn: "arn:aws:sqs:..."}` |
|
|
240
|
-
| `tags` | object | タグ | `{Environment: "prod"}` |
|
|
241
|
-
|
|
242
|
-
### ファイル処理の仕組み
|
|
243
|
-
|
|
244
|
-
1. YAMLファイルの `files` に指定されたファイル・ディレクトリを自動的にZIP化
|
|
245
|
-
2. YAMLファイルがない場合は、カレントディレクトリの全ファイルをZIP化
|
|
246
|
-
3. glob パターンをサポート(`**/*.py`, `src/**/*` など)
|
|
247
|
-
4. 一時的なZIPファイルを作成してデプロイ後に削除
|
|
248
|
-
|
|
249
|
-
### 変数の展開
|
|
250
|
-
|
|
251
|
-
**環境変数の展開:**
|
|
252
|
-
- `${VAR_NAME}` 形式で現在の環境変数を参照可能
|
|
253
|
-
- 存在しない環境変数を参照した場合はエラー
|
|
254
|
-
|
|
255
|
-
**環境変数を使用した環境管理:**
|
|
311
|
+
2. 環境変数による設定:
|
|
256
312
|
```bash
|
|
257
|
-
|
|
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
|
|
258
316
|
```
|
|
259
317
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
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,11 +1,4 @@
|
|
|
1
1
|
export interface DeployOptions {
|
|
2
|
-
runtime?: string;
|
|
3
|
-
handler?: string;
|
|
4
|
-
role?: string;
|
|
5
|
-
config?: string;
|
|
6
|
-
function?: string;
|
|
7
|
-
region?: string;
|
|
8
|
-
profile?: string;
|
|
9
2
|
verbose?: boolean;
|
|
10
3
|
}
|
|
11
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
|
@@ -15,27 +15,22 @@ async function deployCommand(functionName, options) {
|
|
|
15
15
|
logger.info(`Deploying Lambda function: ${chalk_1.default.cyan(functionName)}`);
|
|
16
16
|
// Load configuration
|
|
17
17
|
const configManager = new config_1.ConfigManager(functionName, logger);
|
|
18
|
-
const config = await configManager.loadConfig({
|
|
19
|
-
runtime: options.runtime,
|
|
20
|
-
handler: options.handler,
|
|
21
|
-
role: options.role,
|
|
22
|
-
}, options.config, options.function);
|
|
18
|
+
const config = await configManager.loadConfig({});
|
|
23
19
|
logger.verbose('Configuration loaded:', config);
|
|
24
20
|
// Generate and execute deployment script
|
|
25
21
|
const scriptGenerator = new script_generator_1.ScriptGenerator(logger);
|
|
26
|
-
const
|
|
22
|
+
const actualFunctionName = config.function_name || functionName;
|
|
23
|
+
const script = scriptGenerator.generateDeployScript(actualFunctionName, config);
|
|
27
24
|
const scriptPath = await scriptGenerator.saveScript(functionName, script);
|
|
28
25
|
try {
|
|
29
26
|
// Set environment variables for the script
|
|
30
27
|
const env = {
|
|
31
28
|
...process.env,
|
|
32
|
-
AWS_PROFILE: options.profile || process.env.AWS_PROFILE || 'default',
|
|
33
|
-
AWS_REGION: options.region || process.env.AWS_REGION || 'ap-northeast-1',
|
|
34
29
|
};
|
|
35
30
|
// Execute the script
|
|
36
31
|
logger.info('Executing deployment script...');
|
|
37
32
|
await executeScript(scriptPath, env, logger);
|
|
38
|
-
logger.success(`✅ Lambda function ${chalk_1.default.cyan(
|
|
33
|
+
logger.success(`✅ Lambda function ${chalk_1.default.cyan(actualFunctionName)} deployed successfully!`);
|
|
39
34
|
}
|
|
40
35
|
finally {
|
|
41
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,13 +1,6 @@
|
|
|
1
1
|
export interface ExportOptions {
|
|
2
|
-
runtime?: string;
|
|
3
|
-
handler?: string;
|
|
4
|
-
role?: string;
|
|
5
|
-
config?: string;
|
|
6
|
-
function?: string;
|
|
7
|
-
region?: string;
|
|
8
|
-
profile?: string;
|
|
9
|
-
verbose?: boolean;
|
|
10
2
|
output?: string;
|
|
3
|
+
verbose?: boolean;
|
|
11
4
|
}
|
|
12
5
|
export declare function exportCommand(functionName: string, options: ExportOptions): Promise<void>;
|
|
13
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
|
@@ -14,15 +14,12 @@ async function exportCommand(functionName, options) {
|
|
|
14
14
|
logger.info(`Exporting deploy script for Lambda function: ${chalk_1.default.cyan(functionName)}`);
|
|
15
15
|
// Load configuration
|
|
16
16
|
const configManager = new config_1.ConfigManager(functionName, logger);
|
|
17
|
-
const config = await configManager.loadConfig({
|
|
18
|
-
runtime: options.runtime,
|
|
19
|
-
handler: options.handler,
|
|
20
|
-
role: options.role,
|
|
21
|
-
}, options.config, options.function);
|
|
17
|
+
const config = await configManager.loadConfig({});
|
|
22
18
|
logger.verbose('Configuration loaded:', config);
|
|
23
19
|
// Generate script
|
|
24
20
|
const scriptGenerator = new script_generator_1.ScriptGenerator(logger);
|
|
25
|
-
const
|
|
21
|
+
const actualFunctionName = config.function_name || functionName;
|
|
22
|
+
const script = scriptGenerator.generateDeployScript(actualFunctionName, config);
|
|
26
23
|
// Save script
|
|
27
24
|
const outputPath = options.output || `deploy-${functionName}.sh`;
|
|
28
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,52 +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('--config <directory>', 'Config directory path', 'configs')
|
|
27
|
-
.option('--function <directory>', 'Functions directory path', 'functions')
|
|
28
|
-
.option('--region <region>', 'AWS region')
|
|
29
|
-
.option('--profile <profile>', 'AWS profile')
|
|
22
|
+
.argument('<function-name>', 'Configuration file name (without .yaml extension)')
|
|
30
23
|
.option('--verbose', 'Verbose output')
|
|
31
24
|
.action(deploy_1.deployCommand);
|
|
32
25
|
// Delete command
|
|
33
26
|
program
|
|
34
27
|
.command('delete')
|
|
35
28
|
.description('Delete Lambda function')
|
|
36
|
-
.argument('<function-name>', '
|
|
37
|
-
.option('--region <region>', 'AWS region')
|
|
38
|
-
.option('--profile <profile>', 'AWS profile')
|
|
29
|
+
.argument('<function-name>', 'Configuration file name (without .yaml extension)')
|
|
39
30
|
.option('--verbose', 'Verbose output')
|
|
40
31
|
.action(delete_1.deleteCommand);
|
|
41
32
|
// Info command
|
|
42
33
|
program
|
|
43
34
|
.command('info')
|
|
44
35
|
.description('Show Lambda function information')
|
|
45
|
-
.argument('<function-name>', '
|
|
46
|
-
.option('--region <region>', 'AWS region')
|
|
47
|
-
.option('--profile <profile>', 'AWS profile')
|
|
36
|
+
.argument('<function-name>', 'Configuration file name (without .yaml extension)')
|
|
48
37
|
.option('--verbose', 'Verbose output')
|
|
49
38
|
.action(info_1.infoCommand);
|
|
50
39
|
// Export command
|
|
51
40
|
program
|
|
52
41
|
.command('export')
|
|
53
42
|
.description('Export deployment script')
|
|
54
|
-
.argument('<function-name>', '
|
|
55
|
-
.option('--runtime <runtime>', 'Runtime environment', 'python3.12')
|
|
56
|
-
.option('--handler <handler>', 'Handler function')
|
|
57
|
-
.option('--role <role-arn>', 'IAM role ARN (required for new functions)')
|
|
58
|
-
.option('--config <directory>', 'Config directory path', 'configs')
|
|
59
|
-
.option('--function <directory>', 'Functions directory path', 'functions')
|
|
43
|
+
.argument('<function-name>', 'Configuration file name (without .yaml extension)')
|
|
60
44
|
.option('--output <file>', 'Output script file path')
|
|
61
|
-
.option('--region <region>', 'AWS region')
|
|
62
|
-
.option('--profile <profile>', 'AWS profile')
|
|
63
45
|
.option('--verbose', 'Verbose output')
|
|
64
46
|
.action(export_1.exportCommand);
|
|
65
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[];
|
|
@@ -35,7 +43,7 @@ export declare class ConfigManager {
|
|
|
35
43
|
private functionName;
|
|
36
44
|
private logger;
|
|
37
45
|
constructor(functionName: string, logger: Logger);
|
|
38
|
-
loadConfig(overrides: DeployConfig
|
|
46
|
+
loadConfig(overrides: DeployConfig): Promise<LambdaConfig>;
|
|
39
47
|
private substituteVariables;
|
|
40
48
|
}
|
|
41
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;gBADN,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM;IAGlB,UAAU,CAAC,SAAS,EAAE,YAAY,
|
|
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
|
@@ -42,12 +42,12 @@ class ConfigManager {
|
|
|
42
42
|
this.functionName = functionName;
|
|
43
43
|
this.logger = logger;
|
|
44
44
|
}
|
|
45
|
-
async loadConfig(overrides
|
|
46
|
-
const configDirectory =
|
|
47
|
-
const functionsDirectory =
|
|
48
|
-
const yamlPath = path.
|
|
45
|
+
async loadConfig(overrides) {
|
|
46
|
+
const configDirectory = 'configs';
|
|
47
|
+
const functionsDirectory = 'functions';
|
|
48
|
+
const yamlPath = path.resolve(configDirectory, `${this.functionName}.yaml`);
|
|
49
49
|
let yamlConfig = {};
|
|
50
|
-
//
|
|
50
|
+
// YAML config is now required
|
|
51
51
|
try {
|
|
52
52
|
const yamlContent = await fs.readFile(yamlPath, 'utf-8');
|
|
53
53
|
const parsedYaml = yaml.parse(yamlContent);
|
|
@@ -58,17 +58,20 @@ class ConfigManager {
|
|
|
58
58
|
}
|
|
59
59
|
catch (error) {
|
|
60
60
|
if (error instanceof Error) {
|
|
61
|
-
|
|
61
|
+
if (error.code === 'ENOENT') {
|
|
62
|
+
throw new Error(`YAML config file is required but not found: ${yamlPath}`);
|
|
63
|
+
}
|
|
62
64
|
// 変数展開エラーの場合、エラーを再スローしてユーザーに通知
|
|
63
65
|
throw error;
|
|
64
66
|
}
|
|
65
67
|
else {
|
|
66
|
-
|
|
68
|
+
throw new Error(`Failed to load YAML config from: ${yamlPath}`);
|
|
67
69
|
}
|
|
68
70
|
}
|
|
69
71
|
// Set defaults
|
|
70
72
|
const defaultHandler = `${this.functionName}.handler`;
|
|
71
73
|
const config = {
|
|
74
|
+
function_name: yamlConfig.function_name || this.functionName,
|
|
72
75
|
runtime: overrides.runtime || yamlConfig.runtime || 'python3.12',
|
|
73
76
|
handler: overrides.handler || yamlConfig.handler || defaultHandler,
|
|
74
77
|
role: overrides.role || yamlConfig.role || '',
|
|
@@ -85,6 +88,7 @@ class ConfigManager {
|
|
|
85
88
|
vpc: yamlConfig.vpc,
|
|
86
89
|
dead_letter_queue: yamlConfig.dead_letter_queue,
|
|
87
90
|
tags: yamlConfig.tags || {},
|
|
91
|
+
permissions: yamlConfig.permissions || [],
|
|
88
92
|
log_retention_days: yamlConfig.log_retention_days || 7,
|
|
89
93
|
auto_create_log_group: yamlConfig.auto_create_log_group !== false,
|
|
90
94
|
zip_excludes: yamlConfig.zip_excludes || ['*.git*', 'node_modules/*', '*.zip', 'dist/*', '.DS_Store'],
|
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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"}
|