@geek-fun/serverlessinsight 0.1.0 → 0.2.1
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/dist/package.json +3 -1
- package/dist/src/common/base64.js +5 -0
- package/dist/src/common/index.d.ts +1 -0
- package/dist/src/common/index.js +1 -0
- package/dist/src/parser/databaseParser.js +11 -5
- package/dist/src/parser/functionParser.js +1 -0
- package/dist/src/stack/rosStack/database.js +242 -6
- package/dist/src/stack/rosStack/event.js +12 -3
- package/dist/src/stack/rosStack/function.js +28 -1
- package/dist/src/stack/rosStack/index.js +1 -1
- package/dist/src/types/domains/database.js +0 -10
- package/dist/src/validator/databaseSchema.js +49 -7
- package/dist/src/validator/functionSchema.js +2 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -1
- package/samples/aliyun-poc-es.yml +30 -0
- package/samples/aliyun-poc-fc.yml +60 -0
- package/samples/aliyun-poc-rds.yml +24 -0
- package/samples/huawei-poc-fc.yml +60 -0
- package/dist/src/stack/rosStack/rosStack.js +0 -1
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geek-fun/serverlessinsight",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Full life cycle cross providers serverless application management for your fast-growing business.",
|
|
5
5
|
"homepage": "https://serverlessinsight.geekfun.club",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -58,6 +58,8 @@
|
|
|
58
58
|
"@alicloud/ros-cdk-oss": "^1.4.0",
|
|
59
59
|
"@alicloud/ros-cdk-ossdeployment": "^1.4.0",
|
|
60
60
|
"@alicloud/ros-cdk-ram": "^1.4.0",
|
|
61
|
+
"@alicloud/ros-cdk-rds": "^1.5.0",
|
|
62
|
+
"@alicloud/ros-cdk-sls": "^1.5.0",
|
|
61
63
|
"@alicloud/ros20190910": "^3.5.2",
|
|
62
64
|
"ajv": "^8.17.1",
|
|
63
65
|
"ali-oss": "^6.22.0",
|
package/dist/src/common/index.js
CHANGED
|
@@ -11,16 +11,22 @@ const parseDatabase = (databases) => {
|
|
|
11
11
|
name: database.name,
|
|
12
12
|
type: database.type,
|
|
13
13
|
version: database.version,
|
|
14
|
-
engineMode: database.engine_mode,
|
|
15
14
|
security: {
|
|
16
15
|
basicAuth: {
|
|
16
|
+
username: (0, lodash_1.get)(database, 'security.basic_auth.master_user'),
|
|
17
17
|
password: (0, lodash_1.get)(database, 'security.basic_auth.password'),
|
|
18
18
|
},
|
|
19
19
|
},
|
|
20
|
-
cu:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
cu: {
|
|
21
|
+
min: database.cu?.min ?? 0,
|
|
22
|
+
max: database.cu?.max ?? 6,
|
|
23
|
+
},
|
|
24
|
+
storage: {
|
|
25
|
+
min: database.storage?.min ?? 20,
|
|
26
|
+
},
|
|
27
|
+
network: {
|
|
28
|
+
type: database.network?.type ?? 'PRIVATE',
|
|
29
|
+
ingressRules: database.network?.ingress_rules ?? ['0.0.0.0/0'],
|
|
24
30
|
},
|
|
25
31
|
}));
|
|
26
32
|
};
|
|
@@ -34,19 +34,187 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.resolveDatabases = void 0;
|
|
37
|
+
const rds = __importStar(require("@alicloud/ros-cdk-rds"));
|
|
37
38
|
const common_1 = require("../../common");
|
|
38
|
-
const types_1 = require("../../types");
|
|
39
39
|
const lodash_1 = require("lodash");
|
|
40
40
|
const esServerless = __importStar(require("@alicloud/ros-cdk-elasticsearchserverless"));
|
|
41
|
+
const rdsEngineMap = new Map([
|
|
42
|
+
[
|
|
43
|
+
`${"RDS_MYSQL_SERVERLESS" /* DatabaseEnum.RDS_MYSQL_SERVERLESS */}-${"MYSQL_5.7" /* DatabaseVersionEnum['MYSQL_5.7'] */}`,
|
|
44
|
+
{
|
|
45
|
+
engine: 'MySQL',
|
|
46
|
+
version: '5.7',
|
|
47
|
+
category: 'serverless_basic',
|
|
48
|
+
dbInstanceClass: 'mysql.n2.serverless.1c',
|
|
49
|
+
quota: { minCapacity: 0.5, maxCapacity: 32, ha: false },
|
|
50
|
+
storage: { type: 'general_essd', bursting: true, optimizedWrites: true, encryption: false },
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
[
|
|
54
|
+
`${"RDS_MYSQL_SERVERLESS" /* DatabaseEnum.RDS_MYSQL_SERVERLESS */}-${"MYSQL_8.0" /* DatabaseVersionEnum['MYSQL_8.0'] */}`,
|
|
55
|
+
{
|
|
56
|
+
engine: 'MySQL',
|
|
57
|
+
version: '8.0',
|
|
58
|
+
category: 'serverless_basic',
|
|
59
|
+
dbInstanceClass: 'mysql.n2.serverless.1c',
|
|
60
|
+
quota: { minCapacity: 0.5, maxCapacity: 32, ha: false },
|
|
61
|
+
storage: { type: 'general_essd', bursting: true, optimizedWrites: true, encryption: false },
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
[
|
|
65
|
+
`${"RDS_MYSQL_SERVERLESS" /* DatabaseEnum.RDS_MYSQL_SERVERLESS */}-${"MYSQL_HA_5.7" /* DatabaseVersionEnum['MYSQL_HA_5.7'] */}`,
|
|
66
|
+
{
|
|
67
|
+
engine: 'MySQL',
|
|
68
|
+
version: '5.7',
|
|
69
|
+
category: 'serverless_standard',
|
|
70
|
+
dbInstanceClass: 'mysql.n2.serverless.2c',
|
|
71
|
+
quota: { minCapacity: 0.5, maxCapacity: 32, ha: true },
|
|
72
|
+
storage: { type: 'general_essd', bursting: true, optimizedWrites: true, encryption: true },
|
|
73
|
+
},
|
|
74
|
+
],
|
|
75
|
+
[
|
|
76
|
+
`${"RDS_MYSQL_SERVERLESS" /* DatabaseEnum.RDS_MYSQL_SERVERLESS */}-${"MYSQL_HA_8.0" /* DatabaseVersionEnum['MYSQL_HA_8.0'] */}`,
|
|
77
|
+
{
|
|
78
|
+
engine: 'MySQL',
|
|
79
|
+
version: '8.0',
|
|
80
|
+
category: 'serverless_standard',
|
|
81
|
+
dbInstanceClass: 'mysql.n2.serverless.2c',
|
|
82
|
+
quota: { minCapacity: 0.5, maxCapacity: 32, ha: true },
|
|
83
|
+
storage: { type: 'general_essd', bursting: true, optimizedWrites: true, encryption: true },
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
[
|
|
87
|
+
`${"RDS_PGSQL_SERVERLESS" /* DatabaseEnum.RDS_PGSQL_SERVERLESS */}-${"PGSQL_14" /* DatabaseVersionEnum['PGSQL_14'] */}`,
|
|
88
|
+
{
|
|
89
|
+
engine: 'PostgreSQL',
|
|
90
|
+
version: '14.0',
|
|
91
|
+
category: 'serverless_basic',
|
|
92
|
+
dbInstanceClass: 'pg.n2.serverless.1c',
|
|
93
|
+
quota: { minCapacity: 0.5, maxCapacity: 14, ha: false },
|
|
94
|
+
storage: { type: 'general_essd', bursting: true, optimizedWrites: false, encryption: false },
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
[
|
|
98
|
+
`${"RDS_PGSQL_SERVERLESS" /* DatabaseEnum.RDS_PGSQL_SERVERLESS */}-${"PGSQL_15" /* DatabaseVersionEnum['PGSQL_15'] */}`,
|
|
99
|
+
{
|
|
100
|
+
engine: 'PostgreSQL',
|
|
101
|
+
version: '15.0',
|
|
102
|
+
category: 'serverless_basic',
|
|
103
|
+
dbInstanceClass: 'pg.n2.serverless.1c',
|
|
104
|
+
quota: { minCapacity: 0.5, maxCapacity: 14, ha: false },
|
|
105
|
+
storage: { type: 'general_essd', bursting: true, optimizedWrites: false, encryption: false },
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
[
|
|
109
|
+
`${"RDS_PGSQL_SERVERLESS" /* DatabaseEnum.RDS_PGSQL_SERVERLESS */}-${"PGSQL_16" /* DatabaseVersionEnum['PGSQL_16'] */}`,
|
|
110
|
+
{
|
|
111
|
+
engine: 'PostgreSQL',
|
|
112
|
+
version: '16.0',
|
|
113
|
+
category: 'serverless_basic',
|
|
114
|
+
dbInstanceClass: 'pg.n2.serverless.1c',
|
|
115
|
+
quota: { minCapacity: 0.5, maxCapacity: 14, ha: false },
|
|
116
|
+
storage: { type: 'general_essd', bursting: true, optimizedWrites: false, encryption: false },
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
[
|
|
120
|
+
`${"RDS_PGSQL_SERVERLESS" /* DatabaseEnum.RDS_PGSQL_SERVERLESS */}-${"PGSQL_HA_14" /* DatabaseVersionEnum['PGSQL_HA_14'] */}`,
|
|
121
|
+
{
|
|
122
|
+
engine: 'PostgreSQL',
|
|
123
|
+
version: '14.0',
|
|
124
|
+
category: 'serverless_standard',
|
|
125
|
+
dbInstanceClass: 'pg.n2.serverless.2c',
|
|
126
|
+
quota: { minCapacity: 0.5, maxCapacity: 14, ha: true },
|
|
127
|
+
storage: { type: 'general_essd', bursting: true, optimizedWrites: false, encryption: false },
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
[
|
|
131
|
+
`${"RDS_PGSQL_SERVERLESS" /* DatabaseEnum.RDS_PGSQL_SERVERLESS */}-${"PGSQL_HA_15" /* DatabaseVersionEnum['PGSQL_HA_15'] */}`,
|
|
132
|
+
{
|
|
133
|
+
engine: 'PostgreSQL',
|
|
134
|
+
version: '15.0',
|
|
135
|
+
category: 'serverless_standard',
|
|
136
|
+
dbInstanceClass: 'pg.n2.serverless.2c',
|
|
137
|
+
quota: { minCapacity: 0.5, maxCapacity: 14, ha: true },
|
|
138
|
+
storage: { type: 'general_essd', bursting: true, optimizedWrites: false, encryption: false },
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
[
|
|
142
|
+
`${"RDS_PGSQL_SERVERLESS" /* DatabaseEnum.RDS_PGSQL_SERVERLESS */}-${"PGSQL_HA_16" /* DatabaseVersionEnum['PGSQL_HA_16'] */}`,
|
|
143
|
+
{
|
|
144
|
+
engine: 'PostgreSQL',
|
|
145
|
+
version: '16.0',
|
|
146
|
+
category: 'serverless_standard',
|
|
147
|
+
dbInstanceClass: 'pg.n2.serverless.2c',
|
|
148
|
+
quota: { minCapacity: 0.5, maxCapacity: 14, ha: true },
|
|
149
|
+
storage: { type: 'general_essd', bursting: true, optimizedWrites: false, encryption: false },
|
|
150
|
+
},
|
|
151
|
+
],
|
|
152
|
+
[
|
|
153
|
+
`${"RDS_MSSQL_SERVERLESS" /* DatabaseEnum.RDS_MSSQL_SERVERLESS */}-${"MSSQL_HA_2016" /* DatabaseVersionEnum['MSSQL_HA_2016'] */}`,
|
|
154
|
+
{
|
|
155
|
+
engine: 'SQLServer',
|
|
156
|
+
version: '2016_std_sl',
|
|
157
|
+
category: 'serverless_ha',
|
|
158
|
+
dbInstanceClass: 'mssql.mem2.serverless.s2',
|
|
159
|
+
quota: { minCapacity: 2, maxCapacity: 8, ha: true },
|
|
160
|
+
storage: { type: 'cloud_essd', bursting: false, optimizedWrites: false, encryption: false },
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
[
|
|
164
|
+
`${"RDS_MSSQL_SERVERLESS" /* DatabaseEnum.RDS_MSSQL_SERVERLESS */}-${"MSSQL_HA_2017" /* DatabaseVersionEnum['MSSQL_HA_2017'] */}`,
|
|
165
|
+
{
|
|
166
|
+
engine: 'SQLServer',
|
|
167
|
+
version: '2017_std_sl',
|
|
168
|
+
category: 'serverless_ha',
|
|
169
|
+
dbInstanceClass: 'mssql.mem2.serverless.s2',
|
|
170
|
+
quota: { minCapacity: 2, maxCapacity: 8, ha: true },
|
|
171
|
+
storage: { type: 'cloud_essd', bursting: false, optimizedWrites: false, encryption: false },
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
[
|
|
175
|
+
`${"RDS_MSSQL_SERVERLESS" /* DatabaseEnum.RDS_MSSQL_SERVERLESS */}-${"MSSQL_HA_2019" /* DatabaseVersionEnum['MSSQL_HA_2019'] */}`,
|
|
176
|
+
{
|
|
177
|
+
engine: 'SQLServer',
|
|
178
|
+
version: '2019_std_sl',
|
|
179
|
+
category: 'serverless_ha',
|
|
180
|
+
dbInstanceClass: 'mssql.mem2.serverless.s2',
|
|
181
|
+
quota: { minCapacity: 2, maxCapacity: 8, ha: true },
|
|
182
|
+
storage: { type: 'cloud_essd', bursting: false, optimizedWrites: false, encryption: false },
|
|
183
|
+
},
|
|
184
|
+
],
|
|
185
|
+
[
|
|
186
|
+
`${"ELASTICSEARCH_SERVERLESS" /* DatabaseEnum.ELASTICSEARCH_SERVERLESS */}-${"ES_SEARCH_7.10" /* DatabaseVersionEnum['ES_SEARCH_7.10'] */}`,
|
|
187
|
+
{
|
|
188
|
+
engine: 'Elasticsearch',
|
|
189
|
+
version: '7.10',
|
|
190
|
+
category: 'STANDARD',
|
|
191
|
+
dbInstanceClass: '',
|
|
192
|
+
quota: { minCapacity: 2, maxCapacity: 8, ha: false },
|
|
193
|
+
storage: { type: 'cloud_essd', bursting: false, optimizedWrites: false, encryption: false },
|
|
194
|
+
},
|
|
195
|
+
],
|
|
196
|
+
[
|
|
197
|
+
`${"ELASTICSEARCH_SERVERLESS" /* DatabaseEnum.ELASTICSEARCH_SERVERLESS */}-${"ES_TIME_SERIES_7.10" /* DatabaseVersionEnum['ES_TIME_SERIES_7.10'] */}`,
|
|
198
|
+
{
|
|
199
|
+
engine: 'Elasticsearch',
|
|
200
|
+
version: '7.10',
|
|
201
|
+
category: 'TRIAL',
|
|
202
|
+
dbInstanceClass: '',
|
|
203
|
+
quota: { minCapacity: 2, maxCapacity: 8, ha: false },
|
|
204
|
+
storage: { type: 'cloud_essd', bursting: false, optimizedWrites: false, encryption: false },
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
]);
|
|
41
208
|
const resolveDatabases = (scope, databases, context) => {
|
|
42
209
|
if ((0, lodash_1.isEmpty)(databases)) {
|
|
43
210
|
return undefined;
|
|
44
211
|
}
|
|
45
212
|
databases.forEach((db) => {
|
|
46
|
-
|
|
213
|
+
const { engine, version, category, dbInstanceClass, quota, storage } = rdsEngineMap.get(`${db.type}-${db.version}`) ?? {};
|
|
214
|
+
if (["ELASTICSEARCH_SERVERLESS" /* DatabaseEnum.ELASTICSEARCH_SERVERLESS */].includes(db.type)) {
|
|
47
215
|
new esServerless.App(scope, (0, common_1.replaceReference)(db.key, context), {
|
|
48
216
|
appName: (0, common_1.replaceReference)(db.name, context),
|
|
49
|
-
appVersion:
|
|
217
|
+
appVersion: version,
|
|
50
218
|
authentication: {
|
|
51
219
|
basicAuth: [
|
|
52
220
|
{
|
|
@@ -55,9 +223,9 @@ const resolveDatabases = (scope, databases, context) => {
|
|
|
55
223
|
],
|
|
56
224
|
},
|
|
57
225
|
quotaInfo: {
|
|
58
|
-
cu: db.cu,
|
|
59
|
-
storage: db.
|
|
60
|
-
appType:
|
|
226
|
+
cu: db.cu.min,
|
|
227
|
+
storage: db.storage.min,
|
|
228
|
+
appType: category,
|
|
61
229
|
},
|
|
62
230
|
// network: [
|
|
63
231
|
// {
|
|
@@ -73,6 +241,74 @@ const resolveDatabases = (scope, databases, context) => {
|
|
|
73
241
|
// ],
|
|
74
242
|
}, true);
|
|
75
243
|
}
|
|
244
|
+
if ([
|
|
245
|
+
"RDS_MYSQL_SERVERLESS" /* DatabaseEnum.RDS_MYSQL_SERVERLESS */,
|
|
246
|
+
"RDS_PGSQL_SERVERLESS" /* DatabaseEnum.RDS_PGSQL_SERVERLESS */,
|
|
247
|
+
"RDS_MSSQL_SERVERLESS" /* DatabaseEnum.RDS_MSSQL_SERVERLESS */,
|
|
248
|
+
].includes(db.type)) {
|
|
249
|
+
new rds.DBInstance(scope, (0, common_1.replaceReference)(db.key, context), {
|
|
250
|
+
engine: engine,
|
|
251
|
+
/**
|
|
252
|
+
* Serverless 实例
|
|
253
|
+
* MySQL:5.7、8.0 - MYSQL_HA_5.7, MYSQL_5.7, MYSQL_HA_8.0, MYSQL_8.0
|
|
254
|
+
* SQL Server:2016_std_sl、2017_std_sl、2019_std_sl - MSSQL_HA_2016, MSSQL_HA_2017, MSSQL_HA_2019
|
|
255
|
+
* PostgreSQL:14.0、15.0、16.0 - PGSQL_HA_14, PGSQL_14 PGSQL_HA_15, PGSQL_15, PGSQL_HA_16,PGSQL_16
|
|
256
|
+
*/
|
|
257
|
+
engineVersion: version,
|
|
258
|
+
dbInstanceStorage: (0, common_1.replaceReference)(db.storage.min, context),
|
|
259
|
+
/** Serverless 实例
|
|
260
|
+
* serverless_basic:Serverless 基础系列。(仅适用 MySQL 和 PostgreSQL)
|
|
261
|
+
* serverless_standard:Serverless 高可用系列。(仅适用 MySQL 和 PostgreSQL)
|
|
262
|
+
* serverless_ha:SQL Server Serverless 高可用系列。
|
|
263
|
+
*/
|
|
264
|
+
category,
|
|
265
|
+
/**
|
|
266
|
+
* MySQL:
|
|
267
|
+
* MySQL 基础系列:mysql.n2.serverless.1c
|
|
268
|
+
* MySQL 高可用系列:mysql.n2.serverless.2c
|
|
269
|
+
* SQL Server:
|
|
270
|
+
* mssql.mem2.serverless.s2
|
|
271
|
+
* PostgreSQL
|
|
272
|
+
* 基础系列:pg.n2.serverless.1c
|
|
273
|
+
* 高可用系列:pg.n2.serverless.2c
|
|
274
|
+
*/
|
|
275
|
+
dbInstanceClass: dbInstanceClass,
|
|
276
|
+
/**
|
|
277
|
+
* 实例存储类型,取值:
|
|
278
|
+
* cloud_essd:ESSD PL1 云盘。
|
|
279
|
+
* general_essd:通用云盘(推荐)。
|
|
280
|
+
*/
|
|
281
|
+
dbInstanceStorageType: storage.type,
|
|
282
|
+
burstingEnabled: storage.bursting,
|
|
283
|
+
payType: 'Serverless',
|
|
284
|
+
/**
|
|
285
|
+
* MaxCapacity:
|
|
286
|
+
* MySQL:1~32
|
|
287
|
+
* SQL Server:2~8
|
|
288
|
+
* PostgreSQL:1~14
|
|
289
|
+
* MinCapacity:
|
|
290
|
+
* MySQL:0.5~32
|
|
291
|
+
* SQL Server:2~8(仅支持整数)
|
|
292
|
+
* PostgreSQL:0.5~14
|
|
293
|
+
*/
|
|
294
|
+
serverlessConfig: {
|
|
295
|
+
// @TODO db.cu.min should get parameter value when it refer to a parameter
|
|
296
|
+
minCapacity: (0, common_1.replaceReference)(db.cu.min === 0 ? quota.minCapacity : db.cu.min + quota.minCapacity, context),
|
|
297
|
+
maxCapacity: (0, common_1.replaceReference)(db.cu.max + quota.minCapacity <= quota.maxCapacity
|
|
298
|
+
? db.cu.max + quota.minCapacity
|
|
299
|
+
: quota.maxCapacity, context),
|
|
300
|
+
autoPause: db.cu.min === 0,
|
|
301
|
+
switchForce: false,
|
|
302
|
+
},
|
|
303
|
+
masterUsername: (0, common_1.replaceReference)(db.security.basicAuth.username, context),
|
|
304
|
+
masterUserPassword: (0, common_1.replaceReference)(db.security.basicAuth.password, context),
|
|
305
|
+
masterUserType: 'Super',
|
|
306
|
+
multiAz: quota.ha,
|
|
307
|
+
securityIpList: (0, common_1.replaceReference)(db.network.ingressRules.join(','), context),
|
|
308
|
+
connectionStringType: db.network.type === 'PRIVATE' ? 'Inner' : 'Public',
|
|
309
|
+
dbInstanceNetType: db.network.type === 'PRIVATE' ? 'Intranet' : 'Internet',
|
|
310
|
+
}, true);
|
|
311
|
+
}
|
|
76
312
|
});
|
|
77
313
|
};
|
|
78
314
|
exports.resolveDatabases = resolveDatabases;
|
|
@@ -80,6 +80,7 @@ const resolveEvents = (scope, events, tags, context, service) => {
|
|
|
80
80
|
const apiGatewayGroup = new agw.RosGroup(scope, (0, common_1.replaceReference)(`${service}_apigroup`, context), {
|
|
81
81
|
groupName: (0, common_1.replaceReference)(`${service}_apigroup`, context),
|
|
82
82
|
tags: (0, common_1.replaceReference)(tags, context),
|
|
83
|
+
passthroughHeaders: 'host',
|
|
83
84
|
}, true);
|
|
84
85
|
// new agw.RosCustomDomain(
|
|
85
86
|
// this,
|
|
@@ -95,11 +96,12 @@ const resolveEvents = (scope, events, tags, context, service) => {
|
|
|
95
96
|
// );
|
|
96
97
|
apiGateway.forEach((event) => {
|
|
97
98
|
event.triggers.forEach((trigger) => {
|
|
98
|
-
const key = `${trigger.method}_${trigger.path}
|
|
99
|
-
const api = new agw.RosApi(scope,
|
|
99
|
+
const key = (0, common_1.encodeBase64)((0, common_1.replaceReference)(`${trigger.method}_${trigger.path}`, context)).replace(/=+$/, '');
|
|
100
|
+
const api = new agw.RosApi(scope, `${event.key}_api_${key}`, {
|
|
100
101
|
apiName: (0, common_1.replaceReference)(`${event.name}_api_${key}`, context),
|
|
101
102
|
groupId: apiGatewayGroup.attrGroupId,
|
|
102
103
|
visibility: 'PRIVATE',
|
|
104
|
+
authType: 'ANONYMOUS',
|
|
103
105
|
requestConfig: {
|
|
104
106
|
requestProtocol: 'HTTP',
|
|
105
107
|
requestHttpMethod: (0, common_1.replaceReference)(trigger.method, context),
|
|
@@ -113,13 +115,20 @@ const resolveEvents = (scope, events, tags, context, service) => {
|
|
|
113
115
|
functionName: (0, common_1.replaceReference)(trigger.backend, context),
|
|
114
116
|
roleArn: gatewayAccessRole.attrArn,
|
|
115
117
|
fcVersion: '3.0',
|
|
118
|
+
method: (0, common_1.replaceReference)(trigger.method, context),
|
|
116
119
|
},
|
|
117
120
|
},
|
|
118
121
|
resultSample: 'ServerlessInsight resultSample',
|
|
119
|
-
resultType: '
|
|
122
|
+
resultType: 'PASSTHROUGH',
|
|
120
123
|
tags: (0, common_1.replaceReference)(tags, context),
|
|
121
124
|
}, true);
|
|
122
125
|
api.addDependsOn(apiGatewayGroup);
|
|
126
|
+
new agw.Deployment(scope, `${service}_deployment`, {
|
|
127
|
+
apiId: api.attrApiId,
|
|
128
|
+
groupId: apiGatewayGroup.attrGroupId,
|
|
129
|
+
stageName: 'RELEASE',
|
|
130
|
+
description: `${service} Api Gateway deployment`,
|
|
131
|
+
});
|
|
123
132
|
});
|
|
124
133
|
});
|
|
125
134
|
}
|
|
@@ -39,10 +39,31 @@ const fc = __importStar(require("@alicloud/ros-cdk-fc3"));
|
|
|
39
39
|
const lodash_1 = require("lodash");
|
|
40
40
|
const ossDeployment = __importStar(require("@alicloud/ros-cdk-ossdeployment"));
|
|
41
41
|
const ros = __importStar(require("@alicloud/ros-cdk-core"));
|
|
42
|
-
const
|
|
42
|
+
const sls = __importStar(require("@alicloud/ros-cdk-sls"));
|
|
43
|
+
const resolveFunctions = (scope, functions, tags, context, service) => {
|
|
43
44
|
if ((0, lodash_1.isEmpty)(functions)) {
|
|
44
45
|
return undefined;
|
|
45
46
|
}
|
|
47
|
+
let logConfig = undefined;
|
|
48
|
+
const enableLog = functions?.some(({ log }) => log);
|
|
49
|
+
const slsService = new sls.Project(scope, `${service}_sls`, { name: `${service}-sls`, tags: (0, common_1.replaceReference)(tags, context) }, true);
|
|
50
|
+
const slsLogstore = new sls.Logstore(scope, `${service}_sls_logstore`, {
|
|
51
|
+
logstoreName: `${service}-sls-logstore`,
|
|
52
|
+
projectName: slsService.attrName,
|
|
53
|
+
ttl: 7,
|
|
54
|
+
}, true);
|
|
55
|
+
new sls.Index(scope, `${service}_sls_index`, {
|
|
56
|
+
projectName: slsService.attrName,
|
|
57
|
+
logstoreName: slsLogstore.attrLogstoreName,
|
|
58
|
+
fullTextIndex: { enable: true },
|
|
59
|
+
}, true);
|
|
60
|
+
if (enableLog) {
|
|
61
|
+
logConfig = {
|
|
62
|
+
project: slsLogstore.attrProjectName,
|
|
63
|
+
logstore: slsLogstore.attrLogstoreName,
|
|
64
|
+
enableRequestMetrics: true,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
46
67
|
const fileSources = functions
|
|
47
68
|
?.filter(({ code }) => (0, common_1.readCodeSize)(code) > common_1.CODE_ZIP_SIZE_LIMIT)
|
|
48
69
|
.map(({ code, name }) => {
|
|
@@ -79,7 +100,13 @@ const resolveFunctions = (scope, functions, context, service) => {
|
|
|
79
100
|
timeout: (0, common_1.replaceReference)(fnc.timeout, context),
|
|
80
101
|
environmentVariables: (0, common_1.replaceReference)(fnc.environment, context),
|
|
81
102
|
code,
|
|
103
|
+
logConfig,
|
|
82
104
|
}, true);
|
|
105
|
+
if (enableLog) {
|
|
106
|
+
fcn.addRosDependency(`${service}_sls`);
|
|
107
|
+
fcn.addRosDependency(`${service}_sls_logstore`);
|
|
108
|
+
fcn.addRosDependency(`${service}_sls_index`);
|
|
109
|
+
}
|
|
83
110
|
if (storeInBucket) {
|
|
84
111
|
fcn.addRosDependency(`${service}_artifacts_code_deployment`);
|
|
85
112
|
}
|
|
@@ -59,7 +59,7 @@ class RosStack extends ros.Stack {
|
|
|
59
59
|
// Define Mappings
|
|
60
60
|
(0, stage_1.resolveStages)(this, iac.stages, context);
|
|
61
61
|
// Define functions
|
|
62
|
-
(0, function_1.resolveFunctions)(this, iac.functions, context, this.service);
|
|
62
|
+
(0, function_1.resolveFunctions)(this, iac.functions, iac.tags, context, this.service);
|
|
63
63
|
// Define Events
|
|
64
64
|
(0, event_1.resolveEvents)(this, iac.events, iac.tags, context, this.service);
|
|
65
65
|
// Define Databases
|
|
@@ -1,12 +1,2 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DatabaseEnum = exports.DatabaseEngineMode = void 0;
|
|
4
|
-
var DatabaseEngineMode;
|
|
5
|
-
(function (DatabaseEngineMode) {
|
|
6
|
-
DatabaseEngineMode["SEARCH"] = "SEARCH";
|
|
7
|
-
DatabaseEngineMode["TIMESERIES"] = "TIMESERIES";
|
|
8
|
-
})(DatabaseEngineMode || (exports.DatabaseEngineMode = DatabaseEngineMode = {}));
|
|
9
|
-
var DatabaseEnum;
|
|
10
|
-
(function (DatabaseEnum) {
|
|
11
|
-
DatabaseEnum["ELASTICSEARCH_SERVERLESS"] = "ELASTICSEARCH_SERVERLESS";
|
|
12
|
-
})(DatabaseEnum || (exports.DatabaseEnum = DatabaseEnum = {}));
|
|
@@ -9,20 +9,57 @@ exports.databaseSchema = {
|
|
|
9
9
|
type: 'object',
|
|
10
10
|
properties: {
|
|
11
11
|
name: { type: 'string' },
|
|
12
|
-
type: {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
type: {
|
|
13
|
+
type: 'string',
|
|
14
|
+
enum: [
|
|
15
|
+
'ELASTICSEARCH_SERVERLESS',
|
|
16
|
+
'RDS_MYSQL_SERVERLESS',
|
|
17
|
+
'RDS_PGSQL_SERVERLESS',
|
|
18
|
+
'RDS_MSSQL_SERVERLESS',
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
version: {
|
|
22
|
+
type: 'string',
|
|
23
|
+
enum: [
|
|
24
|
+
'MYSQL_5.7',
|
|
25
|
+
'MYSQL_8.0',
|
|
26
|
+
'MYSQL_HA_5.7',
|
|
27
|
+
'MYSQL_HA_8.0',
|
|
28
|
+
'PGSQL_14',
|
|
29
|
+
'PGSQL_15',
|
|
30
|
+
'PGSQL_16',
|
|
31
|
+
'PGSQL_HA_14',
|
|
32
|
+
'PGSQL_HA_15',
|
|
33
|
+
'PGSQL_HA_16',
|
|
34
|
+
'MSSQL_HA_2016',
|
|
35
|
+
'MSSQL_HA_2017',
|
|
36
|
+
'MSSQL_HA_2019',
|
|
37
|
+
'ES_SEARCH_7.10',
|
|
38
|
+
'ES_TIME_SERIES_7.10',
|
|
39
|
+
],
|
|
40
|
+
},
|
|
41
|
+
cu: {
|
|
42
|
+
type: 'object',
|
|
43
|
+
properties: {
|
|
44
|
+
min: { type: 'integer', minimum: 0, maximum: 32 },
|
|
45
|
+
max: { type: 'integer', minimum: 1, maximum: 32 },
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
storage: {
|
|
49
|
+
type: 'object',
|
|
50
|
+
properties: { min: { type: 'integer', minimum: 20 } },
|
|
51
|
+
required: ['min'],
|
|
52
|
+
},
|
|
17
53
|
security: {
|
|
18
54
|
type: 'object',
|
|
19
55
|
properties: {
|
|
20
56
|
basic_auth: {
|
|
21
57
|
type: 'object',
|
|
22
58
|
properties: {
|
|
59
|
+
master_user: { type: 'string' },
|
|
23
60
|
password: { type: 'string' },
|
|
24
61
|
},
|
|
25
|
-
required: ['password'],
|
|
62
|
+
required: ['master_user', 'password'],
|
|
26
63
|
},
|
|
27
64
|
},
|
|
28
65
|
required: ['basic_auth'],
|
|
@@ -30,11 +67,16 @@ exports.databaseSchema = {
|
|
|
30
67
|
network: {
|
|
31
68
|
type: 'object',
|
|
32
69
|
properties: {
|
|
70
|
+
type: { type: 'string', enum: ['PUBLIC', 'PRIVATE'] },
|
|
71
|
+
ingress_rules: {
|
|
72
|
+
type: 'array',
|
|
73
|
+
items: { type: 'string' },
|
|
74
|
+
},
|
|
33
75
|
public: { type: 'boolean' },
|
|
34
76
|
},
|
|
35
77
|
},
|
|
36
78
|
},
|
|
37
|
-
required: ['name', 'type', 'version', 'security'
|
|
79
|
+
required: ['name', 'type', 'version', 'security'],
|
|
38
80
|
additionalProperties: false,
|
|
39
81
|
},
|
|
40
82
|
},
|
|
@@ -7,6 +7,7 @@ exports.functionSchema = {
|
|
|
7
7
|
patternProperties: {
|
|
8
8
|
'.*': {
|
|
9
9
|
type: 'object',
|
|
10
|
+
required: ['name', 'runtime', 'handler', 'code'],
|
|
10
11
|
properties: {
|
|
11
12
|
name: { type: 'string' },
|
|
12
13
|
runtime: {
|
|
@@ -32,6 +33,7 @@ exports.functionSchema = {
|
|
|
32
33
|
code: { type: 'string' },
|
|
33
34
|
memory: { type: 'number' },
|
|
34
35
|
timeout: { type: 'number' },
|
|
36
|
+
log: { type: 'boolean' },
|
|
35
37
|
environment: {
|
|
36
38
|
type: 'object',
|
|
37
39
|
additionalProperties: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/index.ts","../src/commands/deploy.ts","../src/commands/destroy.ts","../src/commands/index.ts","../src/commands/template.ts","../src/commands/validate.ts","../src/common/actionContext.ts","../src/common/constants.ts","../src/common/getVersion.ts","../src/common/iacHelper.ts","../src/common/imsClient.ts","../src/common/index.ts","../src/common/logger.ts","../src/common/providerEnum.ts","../src/common/rosClient.ts","../src/lang/index.ts","../src/parser/databaseParser.ts","../src/parser/eventParser.ts","../src/parser/functionParser.ts","../src/parser/index.ts","../src/parser/tagParser.ts","../src/stack/deploy.ts","../src/stack/index.ts","../src/stack/rfsStack/function.ts","../src/stack/rfsStack/index.ts","../src/stack/rosStack/bootstrap.ts","../src/stack/rosStack/database.ts","../src/stack/rosStack/event.ts","../src/stack/rosStack/function.ts","../src/stack/rosStack/index.ts","../src/stack/rosStack/
|
|
1
|
+
{"root":["../src/index.ts","../src/commands/deploy.ts","../src/commands/destroy.ts","../src/commands/index.ts","../src/commands/template.ts","../src/commands/validate.ts","../src/common/actionContext.ts","../src/common/base64.ts","../src/common/constants.ts","../src/common/getVersion.ts","../src/common/iacHelper.ts","../src/common/imsClient.ts","../src/common/index.ts","../src/common/logger.ts","../src/common/providerEnum.ts","../src/common/rosClient.ts","../src/lang/index.ts","../src/parser/databaseParser.ts","../src/parser/eventParser.ts","../src/parser/functionParser.ts","../src/parser/index.ts","../src/parser/tagParser.ts","../src/stack/deploy.ts","../src/stack/index.ts","../src/stack/rfsStack/function.ts","../src/stack/rfsStack/index.ts","../src/stack/rosStack/bootstrap.ts","../src/stack/rosStack/database.ts","../src/stack/rosStack/event.ts","../src/stack/rosStack/function.ts","../src/stack/rosStack/index.ts","../src/stack/rosStack/stage.ts","../src/stack/rosStack/tag.ts","../src/stack/rosStack/vars.ts","../src/types/assets.ts","../src/types/index.ts","../src/types/domains/context.ts","../src/types/domains/database.ts","../src/types/domains/event.ts","../src/types/domains/function.ts","../src/types/domains/provider.ts","../src/types/domains/tag.ts","../src/types/domains/vars.ts","../src/validator/databaseSchema.ts","../src/validator/eventSchema.ts","../src/validator/functionSchema.ts","../src/validator/iacSchema.ts","../src/validator/index.ts","../src/validator/rootSchema.ts"],"version":"5.7.2"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geek-fun/serverlessinsight",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Full life cycle cross providers serverless application management for your fast-growing business.",
|
|
5
5
|
"homepage": "https://serverlessinsight.geekfun.club",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -58,6 +58,8 @@
|
|
|
58
58
|
"@alicloud/ros-cdk-oss": "^1.4.0",
|
|
59
59
|
"@alicloud/ros-cdk-ossdeployment": "^1.4.0",
|
|
60
60
|
"@alicloud/ros-cdk-ram": "^1.4.0",
|
|
61
|
+
"@alicloud/ros-cdk-rds": "^1.5.0",
|
|
62
|
+
"@alicloud/ros-cdk-sls": "^1.5.0",
|
|
61
63
|
"@alicloud/ros20190910": "^3.5.2",
|
|
62
64
|
"ajv": "^8.17.1",
|
|
63
65
|
"ali-oss": "^6.22.0",
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
version: 0.0.1
|
|
2
|
+
|
|
3
|
+
provider:
|
|
4
|
+
name: aliyun
|
|
5
|
+
region: cn-chengdu
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
service: insight-db-poc
|
|
9
|
+
|
|
10
|
+
tags:
|
|
11
|
+
owner: geek-fun
|
|
12
|
+
|
|
13
|
+
databases:
|
|
14
|
+
# insight_es_db:
|
|
15
|
+
# name: insight-poc-es
|
|
16
|
+
# type: ELASTICSEARCH_SERVERLESS
|
|
17
|
+
# version: '7.10'
|
|
18
|
+
# engine_mode: SEARCH
|
|
19
|
+
# cu: 1
|
|
20
|
+
# storage_size: 20
|
|
21
|
+
# security:
|
|
22
|
+
# basic_auth:
|
|
23
|
+
# password: 'U34I6InQ8elseTgqTWT2t2oFXpoqFg'
|
|
24
|
+
insight_poc_db:
|
|
25
|
+
name: insight-poc-rds
|
|
26
|
+
type: RDS_PGSQL_SERVERLESS
|
|
27
|
+
version: PGSQL_16
|
|
28
|
+
security:
|
|
29
|
+
basic_auth:
|
|
30
|
+
password: 'U34I6InQ8elseTgqTWT2t2oFXpoqFg'
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
version: 0.0.1
|
|
2
|
+
provider:
|
|
3
|
+
name: aliyun
|
|
4
|
+
region: cn-chengdu
|
|
5
|
+
|
|
6
|
+
vars:
|
|
7
|
+
region: cn-hangzhou
|
|
8
|
+
testv: testVarValue
|
|
9
|
+
handler: index.handler
|
|
10
|
+
|
|
11
|
+
stages:
|
|
12
|
+
default:
|
|
13
|
+
region: ${vars.region}
|
|
14
|
+
node_env: default
|
|
15
|
+
dev:
|
|
16
|
+
region: ${vars.region}
|
|
17
|
+
node_env: development
|
|
18
|
+
prod:
|
|
19
|
+
region: cn-shanghai
|
|
20
|
+
|
|
21
|
+
service: insight-poc
|
|
22
|
+
|
|
23
|
+
tags:
|
|
24
|
+
owner: geek-fun
|
|
25
|
+
|
|
26
|
+
functions:
|
|
27
|
+
insight_poc_fn:
|
|
28
|
+
name: insight-poc-fn
|
|
29
|
+
runtime: nodejs18
|
|
30
|
+
handler: ${vars.handler}
|
|
31
|
+
code: tests/fixtures/artifacts/artifact.zip
|
|
32
|
+
memory: 512
|
|
33
|
+
timeout: 10
|
|
34
|
+
environment:
|
|
35
|
+
NODE_ENV: ${stages.node_env}
|
|
36
|
+
TEST_VAR: ${vars.testv}
|
|
37
|
+
TEST_VAR_EXTRA: abcds-${vars.testv}-andyou
|
|
38
|
+
|
|
39
|
+
databases:
|
|
40
|
+
insight_poc_db:
|
|
41
|
+
name: insight-poc-db
|
|
42
|
+
type: RDS_POSTGRESQL_SERVERLESS
|
|
43
|
+
version: '17.0'
|
|
44
|
+
security:
|
|
45
|
+
basic_auth:
|
|
46
|
+
password: 'U34I6InQ8elseTgqTWT2t2oFXpoqFg'
|
|
47
|
+
|
|
48
|
+
events:
|
|
49
|
+
gateway_event:
|
|
50
|
+
type: API_GATEWAY
|
|
51
|
+
name: insight-poc-gateway
|
|
52
|
+
triggers:
|
|
53
|
+
- method: GET
|
|
54
|
+
path: /api/hello
|
|
55
|
+
backend: ${functions.insight_poc_fn}
|
|
56
|
+
# custom_domain:
|
|
57
|
+
# domain_name: test.com
|
|
58
|
+
# certificate_name: test
|
|
59
|
+
# certificate_private_key: test
|
|
60
|
+
# certificate_body: test
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
version: 0.0.1
|
|
2
|
+
|
|
3
|
+
provider:
|
|
4
|
+
name: aliyun
|
|
5
|
+
region: cn-chengdu
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
service: insight-rds-poc
|
|
9
|
+
|
|
10
|
+
tags:
|
|
11
|
+
owner: geek-fun
|
|
12
|
+
|
|
13
|
+
databases:
|
|
14
|
+
insight_poc_db:
|
|
15
|
+
name: insight-poc-rds
|
|
16
|
+
type: RDS_PGSQL_SERVERLESS
|
|
17
|
+
version: PGSQL_16
|
|
18
|
+
security:
|
|
19
|
+
basic_auth:
|
|
20
|
+
master_user: 'db_root'
|
|
21
|
+
password: 'U34I6InQ8elseTgqTWT2t2oFXpoqFg'
|
|
22
|
+
network:
|
|
23
|
+
type: 'PRIVATE'
|
|
24
|
+
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
version: 0.0.1
|
|
2
|
+
provider:
|
|
3
|
+
name: huawei
|
|
4
|
+
region: cn-north-4
|
|
5
|
+
|
|
6
|
+
vars:
|
|
7
|
+
testv: testVarValue
|
|
8
|
+
handler: index.handler
|
|
9
|
+
|
|
10
|
+
stages:
|
|
11
|
+
default:
|
|
12
|
+
node_env: default
|
|
13
|
+
dev:
|
|
14
|
+
region: ${vars.region}
|
|
15
|
+
node_env: development
|
|
16
|
+
prod:
|
|
17
|
+
node_env: prod
|
|
18
|
+
service: insight-poc
|
|
19
|
+
|
|
20
|
+
tags:
|
|
21
|
+
owner: geek-fun
|
|
22
|
+
|
|
23
|
+
functions:
|
|
24
|
+
insight_poc_fn:
|
|
25
|
+
name: insight-poc-fn
|
|
26
|
+
runtime: nodejs18
|
|
27
|
+
handler: ${vars.handler}
|
|
28
|
+
code: tests/fixtures/artifacts/artifact.zip
|
|
29
|
+
memory: 512
|
|
30
|
+
timeout: 10
|
|
31
|
+
environment:
|
|
32
|
+
NODE_ENV: ${stages.node_env}
|
|
33
|
+
TEST_VAR: ${vars.testv}
|
|
34
|
+
TEST_VAR_EXTRA: abcds-${vars.testv}-andyou
|
|
35
|
+
|
|
36
|
+
#databases:
|
|
37
|
+
# insight_es_db:
|
|
38
|
+
# name: insight-poc-es
|
|
39
|
+
# type: ELASTICSEARCH_SERVERLESS
|
|
40
|
+
# version: 7.10
|
|
41
|
+
# engine_mode: SEARCH
|
|
42
|
+
# security:
|
|
43
|
+
# basic_auth:
|
|
44
|
+
# password: 123456
|
|
45
|
+
# cu: 1
|
|
46
|
+
# storage_size: 20
|
|
47
|
+
|
|
48
|
+
events:
|
|
49
|
+
gateway_event:
|
|
50
|
+
type: API_GATEWAY
|
|
51
|
+
name: insight-poc-gateway
|
|
52
|
+
triggers:
|
|
53
|
+
- method: GET
|
|
54
|
+
path: /api/hello
|
|
55
|
+
backend: ${functions.insight_poc_fn}
|
|
56
|
+
# custom_domain:
|
|
57
|
+
# domain_name: test.com
|
|
58
|
+
# certificate_name: test
|
|
59
|
+
# certificate_private_key: test
|
|
60
|
+
# certificate_body: test
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";
|