@geek-fun/serverlessinsight 0.3.1 → 0.3.2

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.
Files changed (35) hide show
  1. package/dist/package.json +40 -38
  2. package/dist/src/commands/deploy.js +1 -1
  3. package/dist/src/commands/destroy.js +1 -1
  4. package/dist/src/commands/index.js +22 -7
  5. package/dist/src/commands/local.js +35 -0
  6. package/dist/src/commands/template.js +2 -2
  7. package/dist/src/commands/validate.js +2 -2
  8. package/dist/src/common/constants.js +4 -2
  9. package/dist/src/common/context.js +12 -6
  10. package/dist/src/common/iacHelper.js +1 -1
  11. package/dist/src/common/rosAssets.js +1 -0
  12. package/dist/src/common/rosClient.js +1 -1
  13. package/dist/src/parser/index.js +2 -0
  14. package/dist/src/parser/tableParser.js +41 -0
  15. package/dist/src/stack/localStack/event.js +38 -0
  16. package/dist/src/stack/localStack/index.d.ts +2 -0
  17. package/dist/src/stack/localStack/index.js +23 -0
  18. package/dist/src/stack/rosStack/bootstrap.js +153 -5
  19. package/dist/src/stack/rosStack/bucket.js +1 -0
  20. package/dist/src/stack/rosStack/database.js +1 -2
  21. package/dist/src/stack/rosStack/function.js +1 -2
  22. package/dist/src/stack/rosStack/index.js +3 -0
  23. package/dist/src/stack/rosStack/table.js +95 -0
  24. package/dist/src/types/domains/table.js +16 -0
  25. package/dist/src/types/index.d.ts +5 -0
  26. package/dist/src/validator/iacSchema.js +2 -0
  27. package/dist/src/validator/rootSchema.js +3 -0
  28. package/dist/src/validator/tableschema.js +72 -0
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/layers/si-bootstrap-sdk/Dockerfile-aliyuncli +12 -0
  31. package/layers/si-bootstrap-sdk/README.md +1 -0
  32. package/layers/si-bootstrap-sdk/package-lock.json +875 -0
  33. package/layers/si-bootstrap-sdk/package.json +33 -0
  34. package/package.json +40 -38
  35. package/samples/aliyun-poc-table.yml +48 -0
@@ -39,7 +39,6 @@ const common_1 = require("../../common");
39
39
  const fc = __importStar(require("@alicloud/ros-cdk-fc3"));
40
40
  const lodash_1 = require("lodash");
41
41
  const ossDeployment = __importStar(require("@alicloud/ros-cdk-ossdeployment"));
42
- const ros = __importStar(require("@alicloud/ros-cdk-core"));
43
42
  const sls = __importStar(require("@alicloud/ros-cdk-sls"));
44
43
  const nas = __importStar(require("@alicloud/ros-cdk-nas"));
45
44
  const ecs = __importStar(require("@alicloud/ros-cdk-ecs"));
@@ -123,7 +122,7 @@ const resolveFunctions = (scope, functions, tags, context, service) => {
123
122
  const fcName = (0, common_1.calcRefs)(name, context);
124
123
  return { fcName, ...(0, common_1.getFileSource)(fcName, code.path) };
125
124
  });
126
- const destinationBucketName = ros.Fn.sub('si-bootstrap-artifacts-${ALIYUN::AccountId}-${ALIYUN::Region}');
125
+ const destinationBucketName = `${common_1.SI_BOOTSTRAP_BUCKET_PREFIX}-${context.accountId}-${context.region}`;
127
126
  const ossDeploymentId = 'si_auto_artifacts_code_deployment';
128
127
  if (!(0, lodash_1.isEmpty)(fileSources)) {
129
128
  new ossDeployment.BucketDeployment(scope, ossDeploymentId, {
@@ -46,6 +46,7 @@ const vars_1 = require("./vars");
46
46
  const database_1 = require("./database");
47
47
  const event_1 = require("./event");
48
48
  const bucket_1 = require("./bucket");
49
+ const table_1 = require("./table");
49
50
  __exportStar(require("./bootstrap"), exports);
50
51
  class RosStack extends ros.Stack {
51
52
  constructor(scope, iac, context) {
@@ -65,6 +66,8 @@ class RosStack extends ros.Stack {
65
66
  (0, event_1.resolveEvents)(this, iac.events, iac.tags, context, this.service);
66
67
  // Define Databases
67
68
  (0, database_1.resolveDatabases)(this, iac.databases, context);
69
+ // Define Tables
70
+ (0, table_1.resolveTables)(this, iac.tables, iac.tags, context);
68
71
  // Define Buckets
69
72
  (0, bucket_1.resolveBuckets)(this, iac.buckets, context);
70
73
  }
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.resolveTables = void 0;
37
+ const rosRos = __importStar(require("@alicloud/ros-cdk-ros"));
38
+ const lodash_1 = require("lodash");
39
+ const common_1 = require("../../common");
40
+ const tableEngineMap = new Map([
41
+ [
42
+ "TABLE_STORE_C" /* TableEnum.TABLE_STORE_C */,
43
+ {
44
+ clusterType: 'HYBRID',
45
+ },
46
+ ],
47
+ [
48
+ "TABLE_STORE_H" /* TableEnum.TABLE_STORE_H */,
49
+ {
50
+ clusterType: 'SSD',
51
+ },
52
+ ],
53
+ ]);
54
+ const resolveTables = (scope, tables, tags, context) => {
55
+ if ((0, lodash_1.isEmpty)(tables)) {
56
+ return undefined;
57
+ }
58
+ tables.forEach((tableDomain) => {
59
+ const { collection, throughput, attributes, keySchema, network } = tableDomain;
60
+ const primaryKey = keySchema.map((key) => {
61
+ const name = (0, common_1.calcRefs)(key.name, context);
62
+ const type = attributes.find((attribute) => (0, common_1.calcRefs)(attribute.name, context) === name)?.type ||
63
+ 'STRING';
64
+ return { name, type: (0, common_1.calcRefs)(type, context) };
65
+ });
66
+ const columns = attributes
67
+ ?.filter(({ name }) => !primaryKey.find((pk) => pk.name === (0, common_1.calcRefs)(name, context)))
68
+ .map((attribute) => ({
69
+ name: (0, common_1.calcRefs)(attribute.name, context),
70
+ type: (0, common_1.calcRefs)(attribute.type, context),
71
+ })) || [];
72
+ const clusterType = tableEngineMap.get((0, common_1.calcRefs)(tableDomain.type, context))?.clusterType;
73
+ new rosRos.RosCustomResource(scope, tableDomain.key, {
74
+ serviceToken: `acs:fc:${context.region}:${context.accountId}:functions/${common_1.SI_BOOTSTRAP_FC_PREFIX}-${context.accountId}-${context.region}`,
75
+ timeout: 600,
76
+ parameters: {
77
+ resource: (0, common_1.calcRefs)(tableDomain.type, context),
78
+ instanceName: (0, common_1.calcRefs)(collection, context),
79
+ tableName: (0, common_1.calcRefs)(tableDomain.name, context),
80
+ primaryKey,
81
+ columns,
82
+ clusterType,
83
+ network,
84
+ reservedThroughput: (0, common_1.calcRefs)(throughput?.reserved, context),
85
+ tags,
86
+ credentials: {
87
+ accessKeyId: context.accessKeyId,
88
+ accessKeySecret: context.accessKeySecret,
89
+ securityToken: context.securityToken,
90
+ },
91
+ },
92
+ }, true);
93
+ });
94
+ };
95
+ exports.resolveTables = resolveTables;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KeyTypeEnum = exports.AttributeTypeEnum = void 0;
4
+ var AttributeTypeEnum;
5
+ (function (AttributeTypeEnum) {
6
+ AttributeTypeEnum["STRING"] = "STRING";
7
+ AttributeTypeEnum["INTEGER"] = "INTEGER";
8
+ AttributeTypeEnum["DOUBLE"] = "DOUBLE";
9
+ AttributeTypeEnum["BOOLEAN"] = "BOOLEAN";
10
+ AttributeTypeEnum["BINARY"] = "BINARY";
11
+ })(AttributeTypeEnum || (exports.AttributeTypeEnum = AttributeTypeEnum = {}));
12
+ var KeyTypeEnum;
13
+ (function (KeyTypeEnum) {
14
+ KeyTypeEnum["HASH"] = "HASH";
15
+ KeyTypeEnum["RANGE"] = "RANGE";
16
+ })(KeyTypeEnum || (exports.KeyTypeEnum = KeyTypeEnum = {}));
@@ -5,6 +5,7 @@ import { DatabaseDomain, DatabaseRaw } from './domains/database';
5
5
  import { FunctionDomain, FunctionRaw } from './domains/function';
6
6
  import { Provider } from './domains/provider';
7
7
  import { BucketDomain, BucketRaw } from './domains/bucket';
8
+ import { TableDomain, TableRaw } from './domains/table';
8
9
  export * from './domains/database';
9
10
  export * from './domains/event';
10
11
  export * from './domains/function';
@@ -29,6 +30,9 @@ export type ServerlessIacRaw = {
29
30
  databases: {
30
31
  [key: string]: DatabaseRaw;
31
32
  };
33
+ tables: {
34
+ [key: string]: TableRaw;
35
+ };
32
36
  buckets: {
33
37
  [key: string]: BucketRaw;
34
38
  };
@@ -46,5 +50,6 @@ export type ServerlessIac = {
46
50
  functions?: Array<FunctionDomain>;
47
51
  events?: Array<EventDomain>;
48
52
  databases?: Array<DatabaseDomain>;
53
+ tables?: Array<TableDomain>;
49
54
  buckets?: Array<BucketDomain>;
50
55
  };
@@ -11,6 +11,7 @@ const databaseSchema_1 = require("./databaseSchema");
11
11
  const eventSchema_1 = require("./eventSchema");
12
12
  const functionSchema_1 = require("./functionSchema");
13
13
  const bucketSchema_1 = require("./bucketSchema");
14
+ const tableschema_1 = require("./tableschema");
14
15
  class IacSchemaErrors extends Error {
15
16
  constructor(errors) {
16
17
  super(`Invalid yaml`);
@@ -31,6 +32,7 @@ const validate = ajv
31
32
  .addSchema(functionSchema_1.functionSchema)
32
33
  .addSchema(eventSchema_1.eventSchema)
33
34
  .addSchema(databaseSchema_1.databaseSchema)
35
+ .addSchema(tableschema_1.tableSchema)
34
36
  .addSchema(bucketSchema_1.bucketSchema)
35
37
  .compile(rootSchema_1.rootSchema);
36
38
  const validateYaml = (iacJson) => {
@@ -49,6 +49,9 @@ exports.rootSchema = {
49
49
  buckets: {
50
50
  $ref: 'https://serverlessinsight.geekfun.club/schemas/bucketschema.json',
51
51
  },
52
+ tables: {
53
+ $ref: 'https://serverlessinsight.geekfun.club/schemas/tableschema.json',
54
+ },
52
55
  },
53
56
  required: ['version', 'provider', 'service'],
54
57
  additionalProperties: false,
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tableSchema = void 0;
4
+ exports.tableSchema = {
5
+ $id: 'https://serverlessinsight.geekfun.club/schemas/tableschema.json',
6
+ type: 'object',
7
+ patternProperties: {
8
+ '.*': {
9
+ type: 'object',
10
+ properties: {
11
+ collection: { type: 'string' },
12
+ name: { type: 'string' },
13
+ type: { type: 'string', enum: ['TABLE_STORE_C', 'TABLE_STORE_H'] },
14
+ desc: { type: 'string', maxLength: 256 },
15
+ network: {
16
+ type: 'object',
17
+ properties: {
18
+ type: { type: 'string', enum: ['PUBLIC', 'PRIVATE'] },
19
+ ingress_rules: {
20
+ type: 'array',
21
+ items: { type: 'string' },
22
+ },
23
+ },
24
+ required: ['type'],
25
+ },
26
+ throughput: {
27
+ type: 'object',
28
+ properties: {
29
+ reserved: {
30
+ type: 'object',
31
+ properties: {
32
+ read: { type: 'integer' },
33
+ write: { type: 'integer' },
34
+ },
35
+ },
36
+ on_demand: {
37
+ type: 'object',
38
+ properties: {
39
+ read: { type: 'integer' },
40
+ write: { type: 'integer' },
41
+ },
42
+ },
43
+ },
44
+ },
45
+ key_schema: {
46
+ type: 'array',
47
+ items: {
48
+ type: 'object',
49
+ properties: {
50
+ name: { type: 'string' },
51
+ type: { type: 'string', enum: ['HASH', 'RANGE'] },
52
+ },
53
+ required: ['name', 'type'],
54
+ },
55
+ },
56
+ attributes: {
57
+ type: 'array',
58
+ items: {
59
+ type: 'object',
60
+ properties: {
61
+ name: { type: 'string' },
62
+ type: { type: 'string', enum: ['STRING', 'INTEGER', 'DOUBLE', 'BOOLEAN', 'BINARY'] },
63
+ },
64
+ required: ['name', 'type'],
65
+ },
66
+ },
67
+ },
68
+ required: ['collection', 'name', 'type', 'key_schema', 'attributes'],
69
+ additionalProperties: false,
70
+ },
71
+ },
72
+ };
@@ -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/base64.ts","../src/common/constants.ts","../src/common/context.ts","../src/common/domainHelper.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/rosAssets.ts","../src/common/rosClient.ts","../src/lang/index.ts","../src/parser/bucketParser.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/bucket.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/bucket.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/bucketSchema.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.8.3"}
1
+ {"root":["../src/index.ts","../src/commands/deploy.ts","../src/commands/destroy.ts","../src/commands/index.ts","../src/commands/local.ts","../src/commands/template.ts","../src/commands/validate.ts","../src/common/base64.ts","../src/common/constants.ts","../src/common/context.ts","../src/common/domainHelper.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/rosAssets.ts","../src/common/rosClient.ts","../src/lang/index.ts","../src/parser/bucketParser.ts","../src/parser/databaseParser.ts","../src/parser/eventParser.ts","../src/parser/functionParser.ts","../src/parser/index.ts","../src/parser/tableParser.ts","../src/parser/tagParser.ts","../src/stack/deploy.ts","../src/stack/index.ts","../src/stack/localStack/event.ts","../src/stack/localStack/index.ts","../src/stack/rfsStack/function.ts","../src/stack/rfsStack/index.ts","../src/stack/rosStack/bootstrap.ts","../src/stack/rosStack/bucket.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/table.ts","../src/stack/rosStack/tag.ts","../src/stack/rosStack/vars.ts","../src/types/assets.ts","../src/types/index.ts","../src/types/domains/bucket.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/table.ts","../src/types/domains/tag.ts","../src/types/domains/vars.ts","../src/validator/bucketSchema.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","../src/validator/tableschema.ts"],"version":"5.9.2"}
@@ -0,0 +1,12 @@
1
+ FROM alpine:latest
2
+
3
+ RUN apk update && apk add --no-cache jq
4
+
5
+ # install aliyuncli
6
+ RUN wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
7
+ RUN tar -xvzf aliyun-cli-linux-latest-amd64.tgz
8
+ RUN rm aliyun-cli-linux-latest-amd64.tgz
9
+ RUN mv aliyun /usr/local/bin/
10
+
11
+ # 注意:alpine需要额外创建 lib64 的动态链接库软连接
12
+ RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2
@@ -0,0 +1 @@
1
+ # ServerlessInsight bootstrap SDK