UNPKG

@geek-fun/serverlessinsight

Version:

Full life cycle cross providers serverless application management for your fast-growing business.

314 lines (313 loc) 14.4 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.resolveDatabases = void 0; const rds = __importStar(require("@alicloud/ros-cdk-rds")); const common_1 = require("../../common"); const lodash_1 = require("lodash"); const esServerless = __importStar(require("@alicloud/ros-cdk-elasticsearchserverless")); const rdsEngineMap = new Map([ [ `${"RDS_MYSQL_SERVERLESS" /* DatabaseEnum.RDS_MYSQL_SERVERLESS */}-${"MYSQL_5.7" /* DatabaseVersionEnum['MYSQL_5.7'] */}`, { engine: 'MySQL', version: '5.7', category: 'serverless_basic', dbInstanceClass: 'mysql.n2.serverless.1c', quota: { minCapacity: 0.5, maxCapacity: 32, ha: false }, storage: { type: 'general_essd', bursting: true, optimizedWrites: true, encryption: false }, }, ], [ `${"RDS_MYSQL_SERVERLESS" /* DatabaseEnum.RDS_MYSQL_SERVERLESS */}-${"MYSQL_8.0" /* DatabaseVersionEnum['MYSQL_8.0'] */}`, { engine: 'MySQL', version: '8.0', category: 'serverless_basic', dbInstanceClass: 'mysql.n2.serverless.1c', quota: { minCapacity: 0.5, maxCapacity: 32, ha: false }, storage: { type: 'general_essd', bursting: true, optimizedWrites: true, encryption: false }, }, ], [ `${"RDS_MYSQL_SERVERLESS" /* DatabaseEnum.RDS_MYSQL_SERVERLESS */}-${"MYSQL_HA_5.7" /* DatabaseVersionEnum['MYSQL_HA_5.7'] */}`, { engine: 'MySQL', version: '5.7', category: 'serverless_standard', dbInstanceClass: 'mysql.n2.serverless.2c', quota: { minCapacity: 0.5, maxCapacity: 32, ha: true }, storage: { type: 'general_essd', bursting: true, optimizedWrites: true, encryption: true }, }, ], [ `${"RDS_MYSQL_SERVERLESS" /* DatabaseEnum.RDS_MYSQL_SERVERLESS */}-${"MYSQL_HA_8.0" /* DatabaseVersionEnum['MYSQL_HA_8.0'] */}`, { engine: 'MySQL', version: '8.0', category: 'serverless_standard', dbInstanceClass: 'mysql.n2.serverless.2c', quota: { minCapacity: 0.5, maxCapacity: 32, ha: true }, storage: { type: 'general_essd', bursting: true, optimizedWrites: true, encryption: true }, }, ], [ `${"RDS_PGSQL_SERVERLESS" /* DatabaseEnum.RDS_PGSQL_SERVERLESS */}-${"PGSQL_14" /* DatabaseVersionEnum['PGSQL_14'] */}`, { engine: 'PostgreSQL', version: '14.0', category: 'serverless_basic', dbInstanceClass: 'pg.n2.serverless.1c', quota: { minCapacity: 0.5, maxCapacity: 14, ha: false }, storage: { type: 'general_essd', bursting: true, optimizedWrites: false, encryption: false }, }, ], [ `${"RDS_PGSQL_SERVERLESS" /* DatabaseEnum.RDS_PGSQL_SERVERLESS */}-${"PGSQL_15" /* DatabaseVersionEnum['PGSQL_15'] */}`, { engine: 'PostgreSQL', version: '15.0', category: 'serverless_basic', dbInstanceClass: 'pg.n2.serverless.1c', quota: { minCapacity: 0.5, maxCapacity: 14, ha: false }, storage: { type: 'general_essd', bursting: true, optimizedWrites: false, encryption: false }, }, ], [ `${"RDS_PGSQL_SERVERLESS" /* DatabaseEnum.RDS_PGSQL_SERVERLESS */}-${"PGSQL_16" /* DatabaseVersionEnum['PGSQL_16'] */}`, { engine: 'PostgreSQL', version: '16.0', category: 'serverless_basic', dbInstanceClass: 'pg.n2.serverless.1c', quota: { minCapacity: 0.5, maxCapacity: 14, ha: false }, storage: { type: 'general_essd', bursting: true, optimizedWrites: false, encryption: false }, }, ], [ `${"RDS_PGSQL_SERVERLESS" /* DatabaseEnum.RDS_PGSQL_SERVERLESS */}-${"PGSQL_HA_14" /* DatabaseVersionEnum['PGSQL_HA_14'] */}`, { engine: 'PostgreSQL', version: '14.0', category: 'serverless_standard', dbInstanceClass: 'pg.n2.serverless.2c', quota: { minCapacity: 0.5, maxCapacity: 14, ha: true }, storage: { type: 'general_essd', bursting: true, optimizedWrites: false, encryption: false }, }, ], [ `${"RDS_PGSQL_SERVERLESS" /* DatabaseEnum.RDS_PGSQL_SERVERLESS */}-${"PGSQL_HA_15" /* DatabaseVersionEnum['PGSQL_HA_15'] */}`, { engine: 'PostgreSQL', version: '15.0', category: 'serverless_standard', dbInstanceClass: 'pg.n2.serverless.2c', quota: { minCapacity: 0.5, maxCapacity: 14, ha: true }, storage: { type: 'general_essd', bursting: true, optimizedWrites: false, encryption: false }, }, ], [ `${"RDS_PGSQL_SERVERLESS" /* DatabaseEnum.RDS_PGSQL_SERVERLESS */}-${"PGSQL_HA_16" /* DatabaseVersionEnum['PGSQL_HA_16'] */}`, { engine: 'PostgreSQL', version: '16.0', category: 'serverless_standard', dbInstanceClass: 'pg.n2.serverless.2c', quota: { minCapacity: 0.5, maxCapacity: 14, ha: true }, storage: { type: 'general_essd', bursting: true, optimizedWrites: false, encryption: false }, }, ], [ `${"RDS_MSSQL_SERVERLESS" /* DatabaseEnum.RDS_MSSQL_SERVERLESS */}-${"MSSQL_HA_2016" /* DatabaseVersionEnum['MSSQL_HA_2016'] */}`, { engine: 'SQLServer', version: '2016_std_sl', category: 'serverless_ha', dbInstanceClass: 'mssql.mem2.serverless.s2', quota: { minCapacity: 2, maxCapacity: 8, ha: true }, storage: { type: 'cloud_essd', bursting: false, optimizedWrites: false, encryption: false }, }, ], [ `${"RDS_MSSQL_SERVERLESS" /* DatabaseEnum.RDS_MSSQL_SERVERLESS */}-${"MSSQL_HA_2017" /* DatabaseVersionEnum['MSSQL_HA_2017'] */}`, { engine: 'SQLServer', version: '2017_std_sl', category: 'serverless_ha', dbInstanceClass: 'mssql.mem2.serverless.s2', quota: { minCapacity: 2, maxCapacity: 8, ha: true }, storage: { type: 'cloud_essd', bursting: false, optimizedWrites: false, encryption: false }, }, ], [ `${"RDS_MSSQL_SERVERLESS" /* DatabaseEnum.RDS_MSSQL_SERVERLESS */}-${"MSSQL_HA_2019" /* DatabaseVersionEnum['MSSQL_HA_2019'] */}`, { engine: 'SQLServer', version: '2019_std_sl', category: 'serverless_ha', dbInstanceClass: 'mssql.mem2.serverless.s2', quota: { minCapacity: 2, maxCapacity: 8, ha: true }, storage: { type: 'cloud_essd', bursting: false, optimizedWrites: false, encryption: false }, }, ], [ `${"ELASTICSEARCH_SERVERLESS" /* DatabaseEnum.ELASTICSEARCH_SERVERLESS */}-${"ES_SEARCH_7.10" /* DatabaseVersionEnum['ES_SEARCH_7.10'] */}`, { engine: 'Elasticsearch', version: '7.10', category: 'STANDARD', dbInstanceClass: '', quota: { minCapacity: 2, maxCapacity: 8, ha: false }, storage: { type: 'cloud_essd', bursting: false, optimizedWrites: false, encryption: false }, }, ], [ `${"ELASTICSEARCH_SERVERLESS" /* DatabaseEnum.ELASTICSEARCH_SERVERLESS */}-${"ES_TIME_SERIES_7.10" /* DatabaseVersionEnum['ES_TIME_SERIES_7.10'] */}`, { engine: 'Elasticsearch', version: '7.10', category: 'TRIAL', dbInstanceClass: '', quota: { minCapacity: 2, maxCapacity: 8, ha: false }, storage: { type: 'cloud_essd', bursting: false, optimizedWrites: false, encryption: false }, }, ], ]); const resolveDatabases = (scope, databases, context) => { if ((0, lodash_1.isEmpty)(databases)) { return undefined; } databases.forEach((db) => { const { engine, version, category, dbInstanceClass, quota, storage } = rdsEngineMap.get(`${db.type}-${db.version}`) ?? {}; if (["ELASTICSEARCH_SERVERLESS" /* DatabaseEnum.ELASTICSEARCH_SERVERLESS */].includes(db.type)) { new esServerless.App(scope, db.key, { appName: (0, common_1.calcRefs)(db.name, context), appVersion: version, authentication: { basicAuth: [ { password: (0, common_1.calcRefs)(db.security.basicAuth.password, context), }, ], }, quotaInfo: { minCu: db.cu.min, appType: category, }, // network: [ // { // type: 'PUBLIC_KIBANA', // enabled: true, // whiteIpGroup: [{ groupName: 'default', ips: ['0.0.0.0/24'] }], // }, // { // type: 'PUBLIC_ES', // enabled: true, // whiteIpGroup: [{ groupName: 'default', ips: ['0.0.0.0/24'] }], // }, // ], }, true); } if ([ "RDS_MYSQL_SERVERLESS" /* DatabaseEnum.RDS_MYSQL_SERVERLESS */, "RDS_PGSQL_SERVERLESS" /* DatabaseEnum.RDS_PGSQL_SERVERLESS */, "RDS_MSSQL_SERVERLESS" /* DatabaseEnum.RDS_MSSQL_SERVERLESS */, ].includes(db.type)) { new rds.DBInstance(scope, db.key, { engine: engine, /** * Serverless 实例 * MySQL:5.7、8.0 - MYSQL_HA_5.7, MYSQL_5.7, MYSQL_HA_8.0, MYSQL_8.0 * SQL Server:2016_std_sl、2017_std_sl、2019_std_sl - MSSQL_HA_2016, MSSQL_HA_2017, MSSQL_HA_2019 * PostgreSQL:14.0、15.0、16.0 - PGSQL_HA_14, PGSQL_14 PGSQL_HA_15, PGSQL_15, PGSQL_HA_16,PGSQL_16 */ engineVersion: version, dbInstanceStorage: (0, common_1.calcRefs)(db.storage.min, context), /** Serverless 实例 * serverless_basic:Serverless 基础系列。(仅适用 MySQL 和 PostgreSQL) * serverless_standard:Serverless 高可用系列。(仅适用 MySQL 和 PostgreSQL) * serverless_ha:SQL Server Serverless 高可用系列。 */ category, /** * MySQL: * MySQL 基础系列:mysql.n2.serverless.1c * MySQL 高可用系列:mysql.n2.serverless.2c * SQL Server: * mssql.mem2.serverless.s2 * PostgreSQL * 基础系列:pg.n2.serverless.1c * 高可用系列:pg.n2.serverless.2c */ dbInstanceClass: dbInstanceClass, /** * 实例存储类型,取值: * cloud_essd:ESSD PL1 云盘。 * general_essd:通用云盘(推荐)。 */ dbInstanceStorageType: storage.type, burstingEnabled: storage.bursting, payType: 'Serverless', /** * MaxCapacity: * MySQL:1~32 * SQL Server:2~8 * PostgreSQL:1~14 * MinCapacity: * MySQL:0.5~32 * SQL Server:2~8(仅支持整数) * PostgreSQL:0.5~14 */ serverlessConfig: { // @TODO db.cu.min should get parameter value when it refer to a parameter minCapacity: (0, common_1.calcRefs)(db.cu.min === 0 ? quota.minCapacity : db.cu.min + quota.minCapacity, context), maxCapacity: (0, common_1.calcRefs)(db.cu.max + quota.minCapacity <= quota.maxCapacity ? db.cu.max + quota.minCapacity : quota.maxCapacity, context), autoPause: db.cu.min === 0, switchForce: false, }, masterUsername: (0, common_1.calcRefs)(db.security.basicAuth.username, context), masterUserPassword: (0, common_1.calcRefs)(db.security.basicAuth.password, context), masterUserType: 'Super', multiAz: quota.ha, securityIpList: (0, common_1.calcRefs)(db.network.ingressRules.join(','), context), connectionStringType: db.network.type === 'PRIVATE' ? 'Inner' : 'Public', dbInstanceNetType: db.network.type === 'PRIVATE' ? 'Intranet' : 'Internet', }, true); } }); }; exports.resolveDatabases = resolveDatabases;