@geek-fun/serverlessinsight 0.0.6 → 0.1.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.
Files changed (59) hide show
  1. package/dist/package.json +22 -14
  2. package/dist/src/commands/deploy.js +2 -1
  3. package/dist/src/commands/destroy.js +10 -0
  4. package/dist/src/commands/index.js +28 -13
  5. package/dist/src/commands/template.js +26 -0
  6. package/dist/src/commands/validate.js +4 -5
  7. package/dist/src/common/actionContext.js +13 -7
  8. package/dist/src/common/constants.js +4 -0
  9. package/dist/src/common/iacHelper.js +48 -12
  10. package/dist/src/common/imsClient.js +52 -0
  11. package/dist/src/common/index.d.ts +3 -1
  12. package/dist/src/common/index.js +3 -1
  13. package/dist/src/common/providerEnum.js +11 -0
  14. package/dist/src/common/rosClient.js +92 -9
  15. package/dist/src/parser/databaseParser.js +27 -0
  16. package/dist/src/parser/eventParser.js +15 -0
  17. package/dist/src/parser/functionParser.js +20 -0
  18. package/dist/src/parser/index.d.ts +2 -0
  19. package/dist/src/parser/index.js +36 -0
  20. package/dist/src/parser/tagParser.js +10 -0
  21. package/dist/src/stack/deploy.js +57 -13
  22. package/dist/src/stack/index.d.ts +0 -2
  23. package/dist/src/stack/index.js +0 -16
  24. package/dist/src/stack/rfsStack/function.js +32 -0
  25. package/dist/src/stack/rfsStack/index.d.ts +9 -0
  26. package/dist/src/stack/rfsStack/index.js +39 -0
  27. package/dist/src/stack/rosStack/bootstrap.js +40 -0
  28. package/dist/src/stack/rosStack/database.js +78 -0
  29. package/dist/src/stack/rosStack/event.js +127 -0
  30. package/dist/src/stack/rosStack/function.js +88 -0
  31. package/dist/src/stack/rosStack/index.d.ts +7 -0
  32. package/dist/src/stack/rosStack/index.js +69 -0
  33. package/dist/src/stack/rosStack/rosStack.js +1 -0
  34. package/dist/src/stack/rosStack/stage.js +46 -0
  35. package/dist/src/stack/rosStack/tag.js +11 -0
  36. package/dist/src/stack/rosStack/vars.js +49 -0
  37. package/dist/src/types/assets.js +2 -0
  38. package/dist/src/types/domains/context.js +8 -0
  39. package/dist/src/types/domains/database.js +12 -0
  40. package/dist/src/types/domains/function.js +2 -0
  41. package/dist/src/types/domains/provider.js +2 -0
  42. package/dist/src/types/domains/tag.js +2 -0
  43. package/dist/src/types/domains/vars.js +2 -0
  44. package/dist/src/types/index.d.ts +44 -0
  45. package/dist/src/types/index.js +23 -0
  46. package/dist/src/validator/databaseSchema.js +41 -0
  47. package/dist/src/validator/eventSchema.js +41 -0
  48. package/dist/src/validator/functionSchema.js +45 -0
  49. package/dist/src/validator/iacSchema.js +42 -0
  50. package/dist/src/validator/index.d.ts +1 -0
  51. package/dist/src/validator/index.js +5 -0
  52. package/dist/src/validator/rootSchema.js +52 -0
  53. package/dist/tsconfig.tsbuildinfo +1 -1
  54. package/package.json +22 -14
  55. package/dist/src/common/provider.js +0 -11
  56. package/dist/src/stack/iacSchema.js +0 -145
  57. package/dist/src/stack/iacStack.js +0 -146
  58. package/dist/src/stack/parse.js +0 -46
  59. /package/dist/src/{types.js → types/domains/event.js} +0 -0
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseYaml = void 0;
4
+ const node_fs_1 = require("node:fs");
5
+ const functionParser_1 = require("./functionParser");
6
+ const eventParser_1 = require("./eventParser");
7
+ const databaseParser_1 = require("./databaseParser");
8
+ const tagParser_1 = require("./tagParser");
9
+ const yaml_1 = require("yaml");
10
+ const validator_1 = require("../validator");
11
+ const validateExistence = (path) => {
12
+ if (!(0, node_fs_1.existsSync)(path)) {
13
+ throw new Error(`File does not exist at path: ${path}`);
14
+ }
15
+ };
16
+ const transformYaml = (iacJson) => {
17
+ return {
18
+ service: iacJson.service,
19
+ version: iacJson.version,
20
+ provider: iacJson.provider,
21
+ vars: iacJson.vars,
22
+ stages: iacJson.stages,
23
+ functions: (0, functionParser_1.parseFunction)(iacJson.functions),
24
+ events: (0, eventParser_1.parseEvent)(iacJson.events),
25
+ databases: (0, databaseParser_1.parseDatabase)(iacJson.databases),
26
+ tags: (0, tagParser_1.parseTag)(iacJson.tags),
27
+ };
28
+ };
29
+ const parseYaml = (iacLocation) => {
30
+ validateExistence(iacLocation);
31
+ const yamlContent = (0, node_fs_1.readFileSync)(iacLocation, 'utf8');
32
+ const iacJson = (0, yaml_1.parse)(yamlContent);
33
+ (0, validator_1.validateYaml)(iacJson);
34
+ return transformYaml(iacJson);
35
+ };
36
+ exports.parseYaml = parseYaml;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseTag = void 0;
4
+ const parseTag = (tags) => {
5
+ return [
6
+ { key: 'iac-provider', value: 'ServerlessInsight' },
7
+ ...Object.entries(tags ?? {}).map(([key, value]) => ({ key, value })),
8
+ ];
9
+ };
10
+ exports.parseTag = parseTag;
@@ -15,28 +15,72 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
37
  };
25
38
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.deployStack = void 0;
39
+ exports.generateStackTemplate = exports.deployStack = exports.generateRfsStackTemplate = exports.generateRosStackTemplate = void 0;
27
40
  const ros = __importStar(require("@alicloud/ros-cdk-core"));
41
+ const node_fs_1 = __importDefault(require("node:fs"));
28
42
  const common_1 = require("../common");
29
- const iacStack_1 = require("./iacStack");
30
- const generateStackTemplate = (stackName, iac, context) => {
43
+ const rosStack_1 = require("./rosStack");
44
+ const rfsStack_1 = require("./rfsStack");
45
+ const lodash_1 = require("lodash");
46
+ const generateRosStackTemplate = (stackName, iac, context) => {
31
47
  const app = new ros.App();
32
- new iacStack_1.IacStack(app, iac, context);
48
+ new rosStack_1.RosStack(app, iac, context);
33
49
  const assembly = app.synth();
34
- const stackArtifact = assembly.getStackByName(stackName);
35
- return { template: stackArtifact.template };
50
+ const { template } = assembly.getStackByName(stackName);
51
+ const assetFolderPath = (0, lodash_1.get)(assembly.tryGetArtifact(`${stackName}.assets`), 'file', '');
52
+ const assetsFileBody = node_fs_1.default.readFileSync(assetFolderPath);
53
+ const assets = {
54
+ rootPath: assembly.directory,
55
+ ...JSON.parse(assetsFileBody.toString('utf-8').trim()),
56
+ };
57
+ return { template, assets };
58
+ };
59
+ exports.generateRosStackTemplate = generateRosStackTemplate;
60
+ const generateRfsStackTemplate = (stackName, iac, context) => {
61
+ const stack = new rfsStack_1.RfsStack(iac, context);
62
+ const hcl = stack.toHclTerraform();
63
+ console.log('HCL:', hcl);
64
+ return { template: hcl };
36
65
  };
66
+ exports.generateRfsStackTemplate = generateRfsStackTemplate;
37
67
  const deployStack = async (stackName, iac, context) => {
38
- const { template } = generateStackTemplate(stackName, iac, context);
68
+ const { template, assets } = (0, exports.generateRosStackTemplate)(stackName, iac, context);
69
+ await (0, rosStack_1.prepareBootstrapStack)(context);
70
+ common_1.logger.info(`Deploying stack, publishing assets...`);
71
+ await (0, common_1.publishAssets)(assets, context);
72
+ common_1.logger.info(`Assets published! 🎉`);
39
73
  await (0, common_1.rosStackDeploy)(stackName, template, context);
40
74
  common_1.logger.info(`Stack deployed! 🎉`);
41
75
  };
42
76
  exports.deployStack = deployStack;
77
+ const generateStackTemplate = (stackName, iac, context) => {
78
+ if (iac.provider.name === common_1.ProviderEnum.ALIYUN) {
79
+ return (0, exports.generateRosStackTemplate)(stackName, iac, context);
80
+ }
81
+ else if (iac.provider.name === common_1.ProviderEnum.HUAWEI) {
82
+ return (0, exports.generateRfsStackTemplate)(stackName, iac, context);
83
+ }
84
+ return { template: '' };
85
+ };
86
+ exports.generateStackTemplate = generateStackTemplate;
@@ -1,3 +1 @@
1
1
  export { deployStack } from './deploy';
2
- export * from './parse';
3
- export * from './iacSchema';
@@ -1,21 +1,5 @@
1
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
2
  Object.defineProperty(exports, "__esModule", { value: true });
17
3
  exports.deployStack = void 0;
18
4
  var deploy_1 = require("./deploy");
19
5
  Object.defineProperty(exports, "deployStack", { enumerable: true, get: function () { return deploy_1.deployStack; } });
20
- __exportStar(require("./parse"), exports);
21
- __exportStar(require("./iacSchema"), exports);
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveFunction = void 0;
4
+ const common_1 = require("../../common");
5
+ const fgsApplication = (context, service) => `
6
+ resource "huaweicloud_fgs_application" "${service}_app" {
7
+ name = "${service}-app"
8
+ description = "${service} application"
9
+ package_type = "event"
10
+ }
11
+ `;
12
+ const fgsFunction = (fn, context, service) => `
13
+ resource "huaweicloud_fgs_function" "${fn.key}" {
14
+ name = "${fn.name}"
15
+ handler = "${fn.handler}"
16
+ runtime = "${fn.runtime}"
17
+ memory_size = ${fn.memory}
18
+ timeout = ${fn.timeout}
19
+ environment = ${JSON.stringify(fn.environment)}
20
+ code_type = "inline"
21
+ func_code = "${(0, common_1.resolveCode)(fn.code)}"
22
+ app = "huaweicloud_fgs_application.${service}_app.id"
23
+ }
24
+ `;
25
+ const resolveFunction = (stack, functions, context, service) => {
26
+ if (!functions) {
27
+ return undefined;
28
+ }
29
+ const app = fgsApplication(context, service);
30
+ stack.appendHcl(app + '\n' + functions.map((fn) => fgsFunction(fn, context, service)).join('\n'));
31
+ };
32
+ exports.resolveFunction = resolveFunction;
@@ -0,0 +1,9 @@
1
+ import { ActionContext, ServerlessIac } from '../../types';
2
+ export declare class RfsStack {
3
+ private readonly iac;
4
+ private readonly context;
5
+ private hcl;
6
+ constructor(iac: ServerlessIac, context: ActionContext);
7
+ toHclTerraform(): string;
8
+ appendHcl(hcl: string): void;
9
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RfsStack = void 0;
4
+ const function_1 = require("./function");
5
+ const provider = (stack, context) => {
6
+ const hcl = `
7
+ terraform {
8
+ required_providers {
9
+ huaweicloud = {
10
+ source = "huaweicloud/huaweicloud"
11
+ version = ">= 1.67.1"
12
+ }
13
+ }
14
+ }
15
+
16
+ provider "huaweicloud" {
17
+ region = "${context.region}"
18
+ access_key = "${context.accessKeyId}"
19
+ secret_key = "${context.accessKeySecret}"
20
+ }
21
+ `;
22
+ stack.appendHcl(hcl);
23
+ };
24
+ class RfsStack {
25
+ constructor(iac, context) {
26
+ this.iac = iac;
27
+ this.context = context;
28
+ this.hcl = '';
29
+ provider(this, context);
30
+ (0, function_1.resolveFunction)(this, iac.functions, context, iac.service);
31
+ }
32
+ toHclTerraform() {
33
+ return this.hcl;
34
+ }
35
+ appendHcl(hcl) {
36
+ this.hcl += hcl;
37
+ }
38
+ }
39
+ exports.RfsStack = RfsStack;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.prepareBootstrapStack = void 0;
4
+ const common_1 = require("../../common");
5
+ const getBootstrapTemplate = async (context) => {
6
+ const iamInfo = await (0, common_1.getIamInfo)(context);
7
+ const stackName = `serverlessInsight-bootstrap-${iamInfo?.accountId}-${context.region}`;
8
+ const template = {
9
+ Description: 'ServerlessInsight Bootstrap Stack',
10
+ Metadata: {
11
+ 'ALIYUN::ROS::Interface': {
12
+ TemplateTags: ['Bootstrap stack created by ServerlessInsight'],
13
+ },
14
+ },
15
+ ROSTemplateFormatVersion: '2015-09-01',
16
+ Resources: {
17
+ ServerlessInsight_artifacts_bucket: {
18
+ Type: 'ALIYUN::OSS::Bucket',
19
+ Properties: {
20
+ BucketName: {
21
+ 'Fn::Sub': 'si-bootstrap-artifacts-${ALIYUN::AccountId}-${ALIYUN::Region}',
22
+ },
23
+ AccessControl: 'private',
24
+ DeletionForce: false,
25
+ EnableOssHdfsService: false,
26
+ RedundancyType: 'LRS',
27
+ ServerSideEncryptionConfiguration: {
28
+ SSEAlgorithm: 'KMS',
29
+ },
30
+ },
31
+ },
32
+ },
33
+ };
34
+ return { stackName, template };
35
+ };
36
+ const prepareBootstrapStack = async (context) => {
37
+ const { stackName, template } = await getBootstrapTemplate(context);
38
+ await (0, common_1.rosStackDeploy)(stackName, template, context);
39
+ };
40
+ exports.prepareBootstrapStack = prepareBootstrapStack;
@@ -0,0 +1,78 @@
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.resolveDatabases = void 0;
37
+ const common_1 = require("../../common");
38
+ const types_1 = require("../../types");
39
+ const lodash_1 = require("lodash");
40
+ const esServerless = __importStar(require("@alicloud/ros-cdk-elasticsearchserverless"));
41
+ const resolveDatabases = (scope, databases, context) => {
42
+ if ((0, lodash_1.isEmpty)(databases)) {
43
+ return undefined;
44
+ }
45
+ databases.forEach((db) => {
46
+ if ([types_1.DatabaseEnum.ELASTICSEARCH_SERVERLESS].includes(db.type)) {
47
+ new esServerless.App(scope, (0, common_1.replaceReference)(db.key, context), {
48
+ appName: (0, common_1.replaceReference)(db.name, context),
49
+ appVersion: db.version,
50
+ authentication: {
51
+ basicAuth: [
52
+ {
53
+ password: (0, common_1.replaceReference)(db.security.basicAuth.password, context),
54
+ },
55
+ ],
56
+ },
57
+ quotaInfo: {
58
+ cu: db.cu,
59
+ storage: db.storageSize,
60
+ appType: db.engineMode === types_1.DatabaseEngineMode.TIMESERIES ? 'TRIAL' : 'STANDARD',
61
+ },
62
+ // network: [
63
+ // {
64
+ // type: 'PUBLIC_KIBANA',
65
+ // enabled: true,
66
+ // whiteIpGroup: [{ groupName: 'default', ips: ['0.0.0.0/24'] }],
67
+ // },
68
+ // {
69
+ // type: 'PUBLIC_ES',
70
+ // enabled: true,
71
+ // whiteIpGroup: [{ groupName: 'default', ips: ['0.0.0.0/24'] }],
72
+ // },
73
+ // ],
74
+ }, true);
75
+ }
76
+ });
77
+ };
78
+ exports.resolveDatabases = resolveDatabases;
@@ -0,0 +1,127 @@
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.resolveEvents = void 0;
37
+ const types_1 = require("../../types");
38
+ const ram = __importStar(require("@alicloud/ros-cdk-ram"));
39
+ const common_1 = require("../../common");
40
+ const agw = __importStar(require("@alicloud/ros-cdk-apigateway"));
41
+ const lodash_1 = require("lodash");
42
+ const resolveEvents = (scope, events, tags, context, service) => {
43
+ if ((0, lodash_1.isEmpty)(events)) {
44
+ return undefined;
45
+ }
46
+ const apiGateway = events.filter((event) => event.type === types_1.EventTypes.API_GATEWAY);
47
+ if (apiGateway?.length) {
48
+ const gatewayAccessRole = new ram.RosRole(scope, (0, common_1.replaceReference)(`${service}_role`, context), {
49
+ roleName: (0, common_1.replaceReference)(`${service}-gateway-access-role`, context),
50
+ description: (0, common_1.replaceReference)(`${service} role`, context),
51
+ assumeRolePolicyDocument: {
52
+ version: '1',
53
+ statement: [
54
+ {
55
+ action: 'sts:AssumeRole',
56
+ effect: 'Allow',
57
+ principal: {
58
+ service: ['apigateway.aliyuncs.com'],
59
+ },
60
+ },
61
+ ],
62
+ },
63
+ policies: [
64
+ {
65
+ policyName: (0, common_1.replaceReference)(`${service}-policy`, context),
66
+ policyDocument: {
67
+ version: '1',
68
+ statement: [
69
+ {
70
+ action: ['fc:InvokeFunction'],
71
+ effect: 'Allow',
72
+ // @TODO implement at least permission granting
73
+ resource: ['*'],
74
+ },
75
+ ],
76
+ },
77
+ },
78
+ ],
79
+ }, true);
80
+ const apiGatewayGroup = new agw.RosGroup(scope, (0, common_1.replaceReference)(`${service}_apigroup`, context), {
81
+ groupName: (0, common_1.replaceReference)(`${service}_apigroup`, context),
82
+ tags: (0, common_1.replaceReference)(tags, context),
83
+ }, true);
84
+ // new agw.RosCustomDomain(
85
+ // this,
86
+ // 'customDomain',
87
+ // {
88
+ // domainName: 'example.com',
89
+ // certificateName: 'example.com',
90
+ // certificateBody: 'example.com',
91
+ // certificatePrivateKey: 'example.com',
92
+ // groupId: apiGatewayGroup.attrGroupId,
93
+ // },
94
+ // true,
95
+ // );
96
+ apiGateway.forEach((event) => {
97
+ event.triggers.forEach((trigger) => {
98
+ const key = `${trigger.method}_${trigger.path}`.toLowerCase().replace(/\//g, '_');
99
+ const api = new agw.RosApi(scope, (0, common_1.replaceReference)(`${event.key}_api_${key}`, context), {
100
+ apiName: (0, common_1.replaceReference)(`${event.name}_api_${key}`, context),
101
+ groupId: apiGatewayGroup.attrGroupId,
102
+ visibility: 'PRIVATE',
103
+ requestConfig: {
104
+ requestProtocol: 'HTTP',
105
+ requestHttpMethod: (0, common_1.replaceReference)(trigger.method, context),
106
+ requestPath: (0, common_1.replaceReference)(trigger.path, context),
107
+ requestMode: 'PASSTHROUGH',
108
+ },
109
+ serviceConfig: {
110
+ serviceProtocol: 'FunctionCompute',
111
+ functionComputeConfig: {
112
+ fcRegionId: context.region,
113
+ functionName: (0, common_1.replaceReference)(trigger.backend, context),
114
+ roleArn: gatewayAccessRole.attrArn,
115
+ fcVersion: '3.0',
116
+ },
117
+ },
118
+ resultSample: 'ServerlessInsight resultSample',
119
+ resultType: 'JSON',
120
+ tags: (0, common_1.replaceReference)(tags, context),
121
+ }, true);
122
+ api.addDependsOn(apiGatewayGroup);
123
+ });
124
+ });
125
+ }
126
+ };
127
+ exports.resolveEvents = resolveEvents;
@@ -0,0 +1,88 @@
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.resolveFunctions = void 0;
37
+ const common_1 = require("../../common");
38
+ const fc = __importStar(require("@alicloud/ros-cdk-fc3"));
39
+ const lodash_1 = require("lodash");
40
+ const ossDeployment = __importStar(require("@alicloud/ros-cdk-ossdeployment"));
41
+ const ros = __importStar(require("@alicloud/ros-cdk-core"));
42
+ const resolveFunctions = (scope, functions, context, service) => {
43
+ if ((0, lodash_1.isEmpty)(functions)) {
44
+ return undefined;
45
+ }
46
+ const fileSources = functions
47
+ ?.filter(({ code }) => (0, common_1.readCodeSize)(code) > common_1.CODE_ZIP_SIZE_LIMIT)
48
+ .map(({ code, name }) => {
49
+ const fcName = (0, common_1.replaceReference)(name, context);
50
+ return { fcName, ...(0, common_1.getFileSource)(fcName, code) };
51
+ });
52
+ const destinationBucketName = ros.Fn.sub('si-bootstrap-artifacts-${ALIYUN::AccountId}-${ALIYUN::Region}');
53
+ const ossDeploymentId = `${service}_artifacts_code_deployment`;
54
+ if (!(0, lodash_1.isEmpty)(fileSources)) {
55
+ new ossDeployment.BucketDeployment(scope, ossDeploymentId, {
56
+ sources: fileSources.map(({ source }) => source),
57
+ destinationBucket: destinationBucketName,
58
+ timeout: 3000,
59
+ logMonitoring: false,
60
+ retainOnCreate: false,
61
+ }, true);
62
+ }
63
+ functions?.forEach((fnc) => {
64
+ const storeInBucket = (0, common_1.readCodeSize)(fnc.code) > common_1.CODE_ZIP_SIZE_LIMIT;
65
+ let code = {
66
+ zipFile: (0, common_1.resolveCode)(fnc.code),
67
+ };
68
+ if (storeInBucket) {
69
+ code = {
70
+ ossBucketName: destinationBucketName,
71
+ ossObjectName: fileSources?.find(({ fcName }) => fcName === (0, common_1.replaceReference)(fnc.name, context))?.objectKey,
72
+ };
73
+ }
74
+ const fcn = new fc.RosFunction(scope, fnc.key, {
75
+ functionName: (0, common_1.replaceReference)(fnc.name, context),
76
+ handler: (0, common_1.replaceReference)(fnc.handler, context),
77
+ runtime: (0, common_1.replaceReference)(fnc.runtime, context),
78
+ memorySize: (0, common_1.replaceReference)(fnc.memory, context),
79
+ timeout: (0, common_1.replaceReference)(fnc.timeout, context),
80
+ environmentVariables: (0, common_1.replaceReference)(fnc.environment, context),
81
+ code,
82
+ }, true);
83
+ if (storeInBucket) {
84
+ fcn.addRosDependency(`${service}_artifacts_code_deployment`);
85
+ }
86
+ });
87
+ };
88
+ exports.resolveFunctions = resolveFunctions;
@@ -0,0 +1,7 @@
1
+ import * as ros from '@alicloud/ros-cdk-core';
2
+ import { ActionContext, ServerlessIac } from '../../types';
3
+ export * from './bootstrap';
4
+ export declare class RosStack extends ros.Stack {
5
+ private readonly service;
6
+ constructor(scope: ros.Construct, iac: ServerlessIac, context: ActionContext);
7
+ }
@@ -0,0 +1,69 @@
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
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
36
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.RosStack = void 0;
40
+ const ros = __importStar(require("@alicloud/ros-cdk-core"));
41
+ const common_1 = require("../../common");
42
+ const tag_1 = require("./tag");
43
+ const function_1 = require("./function");
44
+ const stage_1 = require("./stage");
45
+ const vars_1 = require("./vars");
46
+ const database_1 = require("./database");
47
+ const event_1 = require("./event");
48
+ __exportStar(require("./bootstrap"), exports);
49
+ class RosStack extends ros.Stack {
50
+ constructor(scope, iac, context) {
51
+ super(scope, (0, common_1.replaceReference)(iac.service, context), {
52
+ stackName: context.stackName,
53
+ tags: (0, tag_1.resolveTags)(iac.tags, context),
54
+ });
55
+ this.service = (0, common_1.replaceReference)(iac.service, context);
56
+ new ros.RosInfo(this, ros.RosInfo.description, `${this.service} stack`);
57
+ // Define Parameters
58
+ (0, vars_1.resloveVars)(this, iac.vars);
59
+ // Define Mappings
60
+ (0, stage_1.resolveStages)(this, iac.stages, context);
61
+ // Define functions
62
+ (0, function_1.resolveFunctions)(this, iac.functions, context, this.service);
63
+ // Define Events
64
+ (0, event_1.resolveEvents)(this, iac.events, iac.tags, context, this.service);
65
+ // Define Databases
66
+ (0, database_1.resolveDatabases)(this, iac.databases, context);
67
+ }
68
+ }
69
+ exports.RosStack = RosStack;
@@ -0,0 +1 @@
1
+ "use strict";