@geek-fun/serverlessinsight
Version:
Full life cycle cross providers serverless application management for your fast-growing business.
128 lines (127 loc) • 5.91 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;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.resolveBuckets = void 0;
const types_1 = require("../../types");
const oss = __importStar(require("@alicloud/ros-cdk-oss"));
const ros = __importStar(require("@alicloud/ros-cdk-core"));
const common_1 = require("../../common");
const ossDeployment = __importStar(require("@alicloud/ros-cdk-ossdeployment"));
const dns = __importStar(require("@alicloud/ros-cdk-dns"));
const node_path_1 = __importDefault(require("node:path"));
const ros_cdk_ram_1 = require("@alicloud/ros-cdk-ram");
const aclMap = new Map([
[types_1.BucketAccessEnum.PRIVATE, 'private'],
[types_1.BucketAccessEnum.PUBLIC_READ, 'public-read'],
[types_1.BucketAccessEnum.PUBLIC_READ_WRITE, 'public-read-write'],
]);
const resolveBuckets = (scope, buckets, context) => {
if (!buckets) {
return undefined;
}
const bucketSources = buckets.some((bucket) => bucket?.website?.code);
let siAutoOssDeploymentBucketRole;
if (bucketSources) {
siAutoOssDeploymentBucketRole = new ros_cdk_ram_1.RosRole(scope, 'si_auto_od_bucket_role', {
roleName: ros.Fn.sub('si-auto-od-bucket-role-${ALIYUN::StackId}'),
description: 'roles created by ServerlessInsight for oss deployment to put files to oss bucket during deployment',
deletionForce: false,
ignoreExisting: false,
assumeRolePolicyDocument: {
version: '1',
statement: [
{
action: 'sts:AssumeRole',
effect: 'Allow',
principal: { service: ['fc.aliyuncs.com'] },
},
],
},
policyAttachments: {
system: ['AliyunOSSFullAccess', 'AliyunLogFullAccess'],
},
}, true);
}
buckets.forEach((bucket) => {
const ossBucket = new oss.Bucket(scope, bucket.key, {
bucketName: (0, common_1.calcRefs)(bucket.name, context),
accessControl: aclMap.get((0, common_1.calcRefs)(bucket.security?.acl, context) ?? ''),
blockPublicAccess: (0, common_1.calcRefs)(bucket.security?.acl, context) === types_1.BucketAccessEnum.PRIVATE,
websiteConfigurationV2: bucket.website
? {
indexDocument: {
type: '0',
suffix: (0, common_1.calcRefs)(bucket.website.index, context),
supportSubDir: 'true',
},
errorDocument: {
httpStatus: `${(0, common_1.calcRefs)(bucket.website.error_code, context)}`,
key: (0, common_1.calcRefs)(bucket.website.error_page, context),
},
}
: undefined,
});
if (bucket.website?.code) {
const filePath = node_path_1.default.resolve(process.cwd(), (0, common_1.calcValue)(bucket.website.code, context));
new ossDeployment.BucketDeployment(scope, (0, common_1.formatRosId)(`si_auto_${bucket.key}_bucket_code_deployment`), {
sources: (0, common_1.getAssets)(filePath),
destinationBucket: ossBucket.attrName,
roleArn: siAutoOssDeploymentBucketRole.attrArn,
timeout: common_1.OSS_DEPLOYMENT_TIMEOUT,
logMonitoring: false,
retainOnCreate: false,
}, true);
}
if (bucket.website?.domain) {
const { rr, domainName } = (0, common_1.splitDomain)(bucket.website.domain);
new oss.Domain(scope, (0, common_1.formatRosId)(`${bucket.key}_custom_domain`), {
bucketName: ossBucket.attrName,
domainName: (0, common_1.calcRefs)(bucket.website.domain, context),
});
new dns.DomainRecord(scope, (0, common_1.formatRosId)(`${bucket.key}_custom_domain_record`), {
domainName: domainName,
rr,
type: 'CNAME',
value: [types_1.BucketAccessEnum.PUBLIC_READ, types_1.BucketAccessEnum.PUBLIC_READ_WRITE].includes(bucket.security?.acl ?? '')
? ossBucket.attrDomainName
: ossBucket.attrInternalDomainName,
});
}
});
};
exports.resolveBuckets = resolveBuckets;