@geek-fun/serverlessinsight
Version:
Full life cycle cross providers serverless application management for your fast-growing business.
314 lines (313 loc) • 14.4 kB
JavaScript
;
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;