UNPKG

@geek-fun/serverlessinsight

Version:

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

144 lines (143 loc) 6.71 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.resolveEvents = void 0; const types_1 = require("../../types"); const ram = __importStar(require("@alicloud/ros-cdk-ram")); const common_1 = require("../../common"); const agw = __importStar(require("@alicloud/ros-cdk-apigateway")); const lodash_1 = require("lodash"); const dns = __importStar(require("@alicloud/ros-cdk-dns")); const resolveEvents = (scope, events, tags, context, service) => { if ((0, lodash_1.isEmpty)(events)) { return undefined; } const apiGateway = events.filter((event) => event.type === types_1.EventTypes.API_GATEWAY); if (!apiGateway?.length) return; apiGateway.forEach((event) => { const gatewayAccessRole = new ram.RosRole(scope, (0, common_1.formatRosId)(`${event.key}_agw_role`), { roleName: (0, common_1.calcRefs)(`${event.name}-agw-access-role`, context), description: (0, common_1.calcRefs)(`${service} role`, context), assumeRolePolicyDocument: { version: '1', statement: [ { action: 'sts:AssumeRole', effect: 'Allow', principal: { service: ['apigateway.aliyuncs.com'], }, }, ], }, policies: [ { policyName: (0, common_1.calcRefs)(`${service}-${event.name}-policy`, context), policyDocument: { version: '1', statement: [ { action: ['fc:InvokeFunction'], effect: 'Allow', // @TODO implement at least permission granting resource: ['*'], }, ], }, }, ], }, true); const apiGatewayGroup = new agw.RosGroup(scope, (0, common_1.formatRosId)(`${event.key}_agw_group`), { groupName: (0, common_1.calcRefs)(`${service}-agw-group`, context), tags: (0, common_1.calcRefs)(tags, context), passthroughHeaders: 'host', }, true); if (event.domain) { const dnsRecordId = (0, common_1.formatRosId)(`${event.key}_agw_custom_domain_record`); const { domainName, rr } = (0, common_1.splitDomain)(event.domain?.domain_name); new dns.DomainRecord(scope, dnsRecordId, { domainName, rr, type: 'CNAME', value: apiGatewayGroup.attrSubDomain, }); const agwCustomDomain = new agw.RosCustomDomain(scope, (0, common_1.formatRosId)(`${event.key}_agw_custom_domain`), { groupId: apiGatewayGroup.attrGroupId, domainName: event.domain.domain_name, certificateName: event.domain.certificate_name, certificateBody: event.domain.certificate_body, certificatePrivateKey: event.domain.certificate_private_key, }, true); agwCustomDomain.addRosDependency(dnsRecordId); } event.triggers.forEach((trigger) => { const key = (0, common_1.formatRosId)((0, common_1.calcValue)(`${trigger.method}_${trigger.path}`, context)); const api = new agw.RosApi(scope, (0, common_1.formatRosId)(`${event.key}_agw_api_${key}`), { apiName: (0, common_1.calcRefs)(`${event.name}-agw-api-${key.replace(/_/g, '-')}`, context), groupId: apiGatewayGroup.attrGroupId, visibility: 'PRIVATE', authType: 'ANONYMOUS', requestConfig: { requestProtocol: 'HTTP', requestHttpMethod: (0, common_1.calcRefs)(trigger.method, context), requestPath: (0, common_1.calcRefs)(trigger.path, context), requestMode: 'PASSTHROUGH', }, serviceConfig: { serviceProtocol: 'FunctionCompute', functionComputeConfig: { fcRegionId: context.region, functionName: (0, common_1.calcRefs)(trigger.backend, context), roleArn: gatewayAccessRole.attrArn, fcVersion: '3.0', method: (0, common_1.calcRefs)(trigger.method, context), }, }, resultSample: 'ServerlessInsight resultSample', resultType: 'PASSTHROUGH', tags: (0, common_1.calcRefs)(tags, context), }, true); api.addDependsOn(apiGatewayGroup); new agw.Deployment(scope, (0, common_1.formatRosId)(`${event.key}_agw_api_deployment_${key}`), { apiId: api.attrApiId, groupId: apiGatewayGroup.attrGroupId, stageName: 'RELEASE', description: (0, common_1.calcRefs)(`${service} Api Gateway deployment for api: ${trigger.method} ${trigger.path}`, context), }); }); }); }; exports.resolveEvents = resolveEvents;