cost-monitoring-construct
Version:
A CDK construct that helps track applications' costs separately and receive alerts in case of unpredicted resource usage
85 lines • 12.3 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Budget = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const aws_cdk_lib_1 = require("aws-cdk-lib");
const constructs_1 = require("constructs");
const utils_1 = require("./utils");
class Budget extends constructs_1.Construct {
constructor(scope, id, props) {
super(scope, id);
if (!Number.isInteger(props.limit) && props.limit > 0) {
throw Error("budget limit must be a positive integer.");
}
new aws_cdk_lib_1.aws_budgets.CfnBudget(this, `${id}_budget`, {
budget: {
budgetType: "COST",
budgetName: `${id}_budget`,
timeUnit: props.alertContdition.period,
budgetLimit: {
amount: props.limit,
unit: "USD",
},
costFilters: this.createCostFilters(props),
},
notificationsWithSubscribers: [
{
notification: {
comparisonOperator: props.alertContdition?.comparisonOperator ??
utils_1.ComparisonOperator.GREATER_THAN,
notificationType: props.alertContdition.notificationType ?? utils_1.NotificationType.ACTUAL,
threshold: props.alertContdition.threshold,
thresholdType: props.alertContdition?.thresholdType ?? utils_1.ThresholdType.PERCENTAGE,
},
subscribers: props.subscribers,
},
],
});
this.scope = scope;
this.props = props;
}
createCostFilters(props) {
const _tags = [];
props.tags?.forEach((tag) => {
_tags.push(`user:${tag.key}$` + tag.value);
});
const costFilters = {};
if (_tags && _tags.length > 0) {
costFilters.TagKeyValue = _tags;
}
return costFilters;
}
/**
* create a copy of the object with the provided changes.
*
* @param id - a unique CDK Construct identifier.
* @param props - you can choose to optionally pass all the initializer parameters of this class as the changes you wish to have on the cloned object.
* @returns - copy of the object
*/
clone(id, props) {
if (this.node.scope === undefined) {
throw new Error("can not find scope of parent to make a clone.");
}
return new Budget(this.scope, id, {
tags: props.tags ?? this.props.tags,
limit: props.limit ?? this.props.limit,
subscribers: props.subscribers ?? this.props.subscribers,
alertContdition: {
period: props.alertContdition?.period ?? this.props.alertContdition.period,
comparisonOperator: props.alertContdition?.comparisonOperator ??
this.props.alertContdition.comparisonOperator,
notificationType: props.alertContdition?.notificationType ??
this.props.alertContdition.notificationType,
threshold: props.alertContdition?.threshold ??
this.props.alertContdition.threshold,
thresholdType: props.alertContdition?.thresholdType ??
this.props.alertContdition.thresholdType,
},
});
}
}
exports.Budget = Budget;
_a = JSII_RTTI_SYMBOL_1;
Budget[_a] = { fqn: "cost-monitoring-construct.Budget", version: "1.2.3" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVkZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2J1ZGdldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUFxRDtBQUNyRCwyQ0FBdUM7QUFDdkMsbUNBTWlCO0FBZ0NqQixNQUFhLE1BQU8sU0FBUSxzQkFBUztJQUluQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQW1CO1FBQzNELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ3JELE1BQU0sS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7U0FDekQ7UUFFRCxJQUFJLHlCQUFPLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFO1lBQzFDLE1BQU0sRUFBRTtnQkFDTixVQUFVLEVBQUUsTUFBTTtnQkFDbEIsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTO2dCQUMxQixRQUFRLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNO2dCQUN0QyxXQUFXLEVBQUU7b0JBQ1gsTUFBTSxFQUFFLEtBQUssQ0FBQyxLQUFLO29CQUNuQixJQUFJLEVBQUUsS0FBSztpQkFDWjtnQkFDRCxXQUFXLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQzthQUMzQztZQUNELDRCQUE0QixFQUFFO2dCQUM1QjtvQkFDRSxZQUFZLEVBQUU7d0JBQ1osa0JBQWtCLEVBQ2hCLEtBQUssQ0FBQyxlQUFlLEVBQUUsa0JBQWtCOzRCQUN6QywwQkFBa0IsQ0FBQyxZQUFZO3dCQUNqQyxnQkFBZ0IsRUFDZCxLQUFLLENBQUMsZUFBZSxDQUFDLGdCQUFnQixJQUFJLHdCQUFnQixDQUFDLE1BQU07d0JBQ25FLFNBQVMsRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQVM7d0JBQzFDLGFBQWEsRUFDWCxLQUFLLENBQUMsZUFBZSxFQUFFLGFBQWEsSUFBSSxxQkFBYSxDQUFDLFVBQVU7cUJBQ25FO29CQUNELFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztpQkFDL0I7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUFtQjtRQUMzQyxNQUFNLEtBQUssR0FBa0IsRUFBRSxDQUFDO1FBQ2hDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDMUIsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFdBQVcsR0FBUSxFQUFFLENBQUM7UUFFNUIsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0IsV0FBVyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDakM7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLEVBQVUsRUFBRSxLQUEyQjtRQUMzQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7U0FDbEU7UUFFRCxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2hDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUNuQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUs7WUFDdEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXO1lBQ3hELGVBQWUsRUFBRTtnQkFDZixNQUFNLEVBQ0osS0FBSyxDQUFDLGVBQWUsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTTtnQkFDcEUsa0JBQWtCLEVBQ2hCLEtBQUssQ0FBQyxlQUFlLEVBQUUsa0JBQWtCO29CQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxrQkFBa0I7Z0JBQy9DLGdCQUFnQixFQUNkLEtBQUssQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCO29CQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0I7Z0JBQzdDLFNBQVMsRUFDUCxLQUFLLENBQUMsZUFBZSxFQUFFLFNBQVM7b0JBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQVM7Z0JBQ3RDLGFBQWEsRUFDWCxLQUFLLENBQUMsZUFBZSxFQUFFLGFBQWE7b0JBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLGFBQWE7YUFDM0M7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztBQTNGSCx3QkE0RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3NfYnVkZ2V0cyBhcyBidWRnZXRzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgVGltZVVuaXQsXG4gIElUYWcsXG4gIE5vdGlmaWNhdGlvblR5cGUsXG4gIFRocmVzaG9sZFR5cGUsXG4gIENvbXBhcmlzb25PcGVyYXRvcixcbn0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJQnVkZ2V0UHJvcHMge1xuICB0YWdzPzogQXJyYXk8SVRhZz47XG4gIGxpbWl0OiBudW1iZXI7XG4gIHN1YnNjcmliZXJzOiBBcnJheTxidWRnZXRzLkNmbkJ1ZGdldC5TdWJzY3JpYmVyUHJvcGVydHk+O1xuICBhbGVydENvbnRkaXRpb246IElCdWRnZXRBbGVydENvbmRpdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQnVkZ2V0QWxlcnRDb25kaXRpb24ge1xuICBwZXJpb2Q6IFRpbWVVbml0O1xuICBjb21wYXJpc29uT3BlcmF0b3I/OiBDb21wYXJpc29uT3BlcmF0b3I7XG4gIG5vdGlmaWNhdGlvblR5cGU/OiBOb3RpZmljYXRpb25UeXBlLkFDVFVBTDtcbiAgdGhyZXNob2xkOiBudW1iZXI7XG4gIHRocmVzaG9sZFR5cGU/OiBUaHJlc2hvbGRUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElPcHRpb25hbEJ1ZGdldEFsZXJ0Q29uZGl0aW9uIHtcbiAgcGVyaW9kPzogVGltZVVuaXQ7XG4gIGNvbXBhcmlzb25PcGVyYXRvcj86IENvbXBhcmlzb25PcGVyYXRvcjtcbiAgbm90aWZpY2F0aW9uVHlwZT86IE5vdGlmaWNhdGlvblR5cGUuQUNUVUFMO1xuICB0aHJlc2hvbGQ/OiBudW1iZXI7XG4gIHRocmVzaG9sZFR5cGU/OiBUaHJlc2hvbGRUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElPcHRpb25hbEJ1ZGdldFByb3BzIHtcbiAgdGFncz86IEFycmF5PElUYWc+O1xuICBsaW1pdD86IG51bWJlcjtcbiAgc3Vic2NyaWJlcnM/OiBBcnJheTxidWRnZXRzLkNmbkJ1ZGdldC5TdWJzY3JpYmVyUHJvcGVydHk+O1xuICBhbGVydENvbnRkaXRpb24/OiBJT3B0aW9uYWxCdWRnZXRBbGVydENvbmRpdGlvbjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1ZGdldCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IElCdWRnZXRQcm9wcztcbiAgcHJpdmF0ZSByZWFkb25seSBzY29wZTogQ29uc3RydWN0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJQnVkZ2V0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHByb3BzLmxpbWl0KSAmJiBwcm9wcy5saW1pdCA+IDApIHtcbiAgICAgIHRocm93IEVycm9yKFwiYnVkZ2V0IGxpbWl0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLlwiKTtcbiAgICB9XG5cbiAgICBuZXcgYnVkZ2V0cy5DZm5CdWRnZXQodGhpcywgYCR7aWR9X2J1ZGdldGAsIHtcbiAgICAgIGJ1ZGdldDoge1xuICAgICAgICBidWRnZXRUeXBlOiBcIkNPU1RcIixcbiAgICAgICAgYnVkZ2V0TmFtZTogYCR7aWR9X2J1ZGdldGAsXG4gICAgICAgIHRpbWVVbml0OiBwcm9wcy5hbGVydENvbnRkaXRpb24ucGVyaW9kLFxuICAgICAgICBidWRnZXRMaW1pdDoge1xuICAgICAgICAgIGFtb3VudDogcHJvcHMubGltaXQsXG4gICAgICAgICAgdW5pdDogXCJVU0RcIixcbiAgICAgICAgfSxcbiAgICAgICAgY29zdEZpbHRlcnM6IHRoaXMuY3JlYXRlQ29zdEZpbHRlcnMocHJvcHMpLFxuICAgICAgfSxcbiAgICAgIG5vdGlmaWNhdGlvbnNXaXRoU3Vic2NyaWJlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5vdGlmaWNhdGlvbjoge1xuICAgICAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOlxuICAgICAgICAgICAgICBwcm9wcy5hbGVydENvbnRkaXRpb24/LmNvbXBhcmlzb25PcGVyYXRvciA/P1xuICAgICAgICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOLFxuICAgICAgICAgICAgbm90aWZpY2F0aW9uVHlwZTpcbiAgICAgICAgICAgICAgcHJvcHMuYWxlcnRDb250ZGl0aW9uLm5vdGlmaWNhdGlvblR5cGUgPz8gTm90aWZpY2F0aW9uVHlwZS5BQ1RVQUwsXG4gICAgICAgICAgICB0aHJlc2hvbGQ6IHByb3BzLmFsZXJ0Q29udGRpdGlvbi50aHJlc2hvbGQsXG4gICAgICAgICAgICB0aHJlc2hvbGRUeXBlOlxuICAgICAgICAgICAgICBwcm9wcy5hbGVydENvbnRkaXRpb24/LnRocmVzaG9sZFR5cGUgPz8gVGhyZXNob2xkVHlwZS5QRVJDRU5UQUdFLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3Vic2NyaWJlcnM6IHByb3BzLnN1YnNjcmliZXJzLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvc3RGaWx0ZXJzKHByb3BzOiBJQnVkZ2V0UHJvcHMpIHtcbiAgICBjb25zdCBfdGFnczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIHByb3BzLnRhZ3M/LmZvckVhY2goKHRhZykgPT4ge1xuICAgICAgX3RhZ3MucHVzaChgdXNlcjoke3RhZy5rZXl9JGAgKyB0YWcudmFsdWUpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgY29zdEZpbHRlcnM6IGFueSA9IHt9O1xuXG4gICAgaWYgKF90YWdzICYmIF90YWdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvc3RGaWx0ZXJzLlRhZ0tleVZhbHVlID0gX3RhZ3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvc3RGaWx0ZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRoIHRoZSBwcm92aWRlZCBjaGFuZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBhIHVuaXF1ZSBDREsgQ29uc3RydWN0IGlkZW50aWZpZXIuXG4gICAqIEBwYXJhbSBwcm9wcyAtIHlvdSBjYW4gY2hvb3NlIHRvIG9wdGlvbmFsbHkgcGFzcyBhbGwgdGhlIGluaXRpYWxpemVyIHBhcmFtZXRlcnMgb2YgdGhpcyBjbGFzcyBhcyB0aGUgY2hhbmdlcyB5b3Ugd2lzaCB0byBoYXZlIG9uIHRoZSBjbG9uZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyAtIGNvcHkgb2YgdGhlIG9iamVjdFxuICAgKi9cbiAgY2xvbmUoaWQ6IHN0cmluZywgcHJvcHM6IElPcHRpb25hbEJ1ZGdldFByb3BzKTogQnVkZ2V0IHtcbiAgICBpZiAodGhpcy5ub2RlLnNjb3BlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImNhbiBub3QgZmluZCBzY29wZSBvZiBwYXJlbnQgdG8gbWFrZSBhIGNsb25lLlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEJ1ZGdldCh0aGlzLnNjb3BlLCBpZCwge1xuICAgICAgdGFnczogcHJvcHMudGFncyA/PyB0aGlzLnByb3BzLnRhZ3MsXG4gICAgICBsaW1pdDogcHJvcHMubGltaXQgPz8gdGhpcy5wcm9wcy5saW1pdCxcbiAgICAgIHN1YnNjcmliZXJzOiBwcm9wcy5zdWJzY3JpYmVycyA/PyB0aGlzLnByb3BzLnN1YnNjcmliZXJzLFxuICAgICAgYWxlcnRDb250ZGl0aW9uOiB7XG4gICAgICAgIHBlcmlvZDpcbiAgICAgICAgICBwcm9wcy5hbGVydENvbnRkaXRpb24/LnBlcmlvZCA/PyB0aGlzLnByb3BzLmFsZXJ0Q29udGRpdGlvbi5wZXJpb2QsXG4gICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjpcbiAgICAgICAgICBwcm9wcy5hbGVydENvbnRkaXRpb24/LmNvbXBhcmlzb25PcGVyYXRvciA/P1xuICAgICAgICAgIHRoaXMucHJvcHMuYWxlcnRDb250ZGl0aW9uLmNvbXBhcmlzb25PcGVyYXRvcixcbiAgICAgICAgbm90aWZpY2F0aW9uVHlwZTpcbiAgICAgICAgICBwcm9wcy5hbGVydENvbnRkaXRpb24/Lm5vdGlmaWNhdGlvblR5cGUgPz9cbiAgICAgICAgICB0aGlzLnByb3BzLmFsZXJ0Q29udGRpdGlvbi5ub3RpZmljYXRpb25UeXBlLFxuICAgICAgICB0aHJlc2hvbGQ6XG4gICAgICAgICAgcHJvcHMuYWxlcnRDb250ZGl0aW9uPy50aHJlc2hvbGQgPz9cbiAgICAgICAgICB0aGlzLnByb3BzLmFsZXJ0Q29udGRpdGlvbi50aHJlc2hvbGQsXG4gICAgICAgIHRocmVzaG9sZFR5cGU6XG4gICAgICAgICAgcHJvcHMuYWxlcnRDb250ZGl0aW9uPy50aHJlc2hvbGRUeXBlID8/XG4gICAgICAgICAgdGhpcy5wcm9wcy5hbGVydENvbnRkaXRpb24udGhyZXNob2xkVHlwZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==