UNPKG

@wheatstalk/cdk-crashy-task-metrics

Version:

Create metrics and alarms for ECS tasks that stop for reasons other than scaling activities. (i.e., crashes.)

62 lines 6.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ItLit = void 0; const cloudwatch = require("@aws-cdk/aws-cloudwatch"); const ecs = require("@aws-cdk/aws-ecs"); const cdk = require("@aws-cdk/core"); const crashy_task_metrics_1 = require("../crashy-task-metrics"); /** @internal */ class ItLit extends cdk.Stack { constructor(scope_, props = {}) { super(scope_, 'ItLit', props); const cluster = new ecs.Cluster(this, 'Cluster'); const taskDefinition = new ecs.FargateTaskDefinition(this, 'TaskDefinition', { cpu: 256, memoryLimitMiB: 512, }); // A crashy container taskDefinition.addContainer('crashy', { image: ecs.ContainerImage.fromRegistry('alpine:3'), command: ['sh', '-c', 'sleep 5 && exit 1'], }); const service = new ecs.FargateService(this, 'Service', { cluster, taskDefinition, desiredCount: 0, minHealthyPercent: 0, maxHealthyPercent: 500, }); const scope = this; // ::SNIP const crashyTaskMetrics = new crashy_task_metrics_1.CrashyTaskMetrics(scope, 'ServiceMetrics', { service, }); const crashAlarm = crashyTaskMetrics // Two crashes in five minutes .metricTaskCrashes({ period: cdk.Duration.minutes(5) }) .createAlarm(scope, 'CrashAlarm', { comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD, evaluationPeriods: 1, threshold: 2, treatMissingData: cloudwatch.TreatMissingData.NOT_BREACHING, }); // ::END-SNIP new cdk.CfnOutput(this, 'CrashAlarmName', { value: crashAlarm.alarmName, }); } } exports.ItLit = ItLit; if (!module.parent) { const app = new cdk.App(); new ItLit(app, { env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: process.env.CDK_DEFAULT_REGION, }, }); } /** * To test, */ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXQtbGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2l0L2l0LWxpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzREFBc0Q7QUFDdEQsd0NBQXdDO0FBQ3hDLHFDQUFxQztBQUNyQyxnRUFBMkQ7QUFFM0QsZ0JBQWdCO0FBQ2hCLE1BQWEsS0FBTSxTQUFRLEdBQUcsQ0FBQyxLQUFLO0lBQ2xDLFlBQVksTUFBcUIsRUFBRSxRQUF3QixFQUFFO1FBQzNELEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTlCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFakQsTUFBTSxjQUFjLEdBQUcsSUFBSSxHQUFHLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQzNFLEdBQUcsRUFBRSxHQUFHO1lBQ1IsY0FBYyxFQUFFLEdBQUc7U0FDcEIsQ0FBQyxDQUFDO1FBRUgscUJBQXFCO1FBQ3JCLGNBQWMsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFO1lBQ3BDLEtBQUssRUFBRSxHQUFHLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7WUFDbEQsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxtQkFBbUIsQ0FBQztTQUMzQyxDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRTtZQUN0RCxPQUFPO1lBQ1AsY0FBYztZQUNkLFlBQVksRUFBRSxDQUFDO1lBQ2YsaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixpQkFBaUIsRUFBRSxHQUFHO1NBQ3ZCLENBQUMsQ0FBQztRQUVILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQztRQUVuQixTQUFTO1FBQ1QsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLHVDQUFpQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRTtZQUN2RSxPQUFPO1NBQ1IsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsaUJBQWlCO1lBQ2xDLDhCQUE4QjthQUM3QixpQkFBaUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ3RELFdBQVcsQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFO1lBQ2hDLGtCQUFrQixFQUFFLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0I7WUFDeEUsaUJBQWlCLEVBQUUsQ0FBQztZQUNwQixTQUFTLEVBQUUsQ0FBQztZQUNaLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhO1NBQzVELENBQUMsQ0FBQztRQUNMLGFBQWE7UUFFYixJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ3hDLEtBQUssRUFBRSxVQUFVLENBQUMsU0FBUztTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUEvQ0Qsc0JBK0NDO0FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7SUFDbEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDMUIsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ2IsR0FBRyxFQUFFO1lBQ0gsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CO1lBQ3hDLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQjtTQUN2QztLQUNGLENBQUMsQ0FBQztDQUNKO0FBRUQ7O0dBRUciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gJ0Bhd3MtY2RrL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCAqIGFzIGVjcyBmcm9tICdAYXdzLWNkay9hd3MtZWNzJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdAYXdzLWNkay9jb3JlJztcbmltcG9ydCB7IENyYXNoeVRhc2tNZXRyaWNzIH0gZnJvbSAnLi4vY3Jhc2h5LXRhc2stbWV0cmljcyc7XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBjbGFzcyBJdExpdCBleHRlbmRzIGNkay5TdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlXzogY2RrLkNvbnN0cnVjdCwgcHJvcHM6IGNkay5TdGFja1Byb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZV8sICdJdExpdCcsIHByb3BzKTtcblxuICAgIGNvbnN0IGNsdXN0ZXIgPSBuZXcgZWNzLkNsdXN0ZXIodGhpcywgJ0NsdXN0ZXInKTtcblxuICAgIGNvbnN0IHRhc2tEZWZpbml0aW9uID0gbmV3IGVjcy5GYXJnYXRlVGFza0RlZmluaXRpb24odGhpcywgJ1Rhc2tEZWZpbml0aW9uJywge1xuICAgICAgY3B1OiAyNTYsXG4gICAgICBtZW1vcnlMaW1pdE1pQjogNTEyLFxuICAgIH0pO1xuXG4gICAgLy8gQSBjcmFzaHkgY29udGFpbmVyXG4gICAgdGFza0RlZmluaXRpb24uYWRkQ29udGFpbmVyKCdjcmFzaHknLCB7XG4gICAgICBpbWFnZTogZWNzLkNvbnRhaW5lckltYWdlLmZyb21SZWdpc3RyeSgnYWxwaW5lOjMnKSxcbiAgICAgIGNvbW1hbmQ6IFsnc2gnLCAnLWMnLCAnc2xlZXAgNSAmJiBleGl0IDEnXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlcnZpY2UgPSBuZXcgZWNzLkZhcmdhdGVTZXJ2aWNlKHRoaXMsICdTZXJ2aWNlJywge1xuICAgICAgY2x1c3RlcixcbiAgICAgIHRhc2tEZWZpbml0aW9uLFxuICAgICAgZGVzaXJlZENvdW50OiAwLFxuICAgICAgbWluSGVhbHRoeVBlcmNlbnQ6IDAsXG4gICAgICBtYXhIZWFsdGh5UGVyY2VudDogNTAwLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzO1xuXG4gICAgLy8gOjpTTklQXG4gICAgY29uc3QgY3Jhc2h5VGFza01ldHJpY3MgPSBuZXcgQ3Jhc2h5VGFza01ldHJpY3Moc2NvcGUsICdTZXJ2aWNlTWV0cmljcycsIHtcbiAgICAgIHNlcnZpY2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCBjcmFzaEFsYXJtID0gY3Jhc2h5VGFza01ldHJpY3NcbiAgICAgIC8vIFR3byBjcmFzaGVzIGluIGZpdmUgbWludXRlc1xuICAgICAgLm1ldHJpY1Rhc2tDcmFzaGVzKHsgcGVyaW9kOiBjZGsuRHVyYXRpb24ubWludXRlcyg1KSB9KVxuICAgICAgLmNyZWF0ZUFsYXJtKHNjb3BlLCAnQ3Jhc2hBbGFybScsIHtcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBjbG91ZHdhdGNoLkNvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgICAgdGhyZXNob2xkOiAyLFxuICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBjbG91ZHdhdGNoLlRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgIH0pO1xuICAgIC8vIDo6RU5ELVNOSVBcblxuICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICdDcmFzaEFsYXJtTmFtZScsIHtcbiAgICAgIHZhbHVlOiBjcmFzaEFsYXJtLmFsYXJtTmFtZSxcbiAgICB9KTtcbiAgfVxufVxuXG5pZiAoIW1vZHVsZS5wYXJlbnQpIHtcbiAgY29uc3QgYXBwID0gbmV3IGNkay5BcHAoKTtcbiAgbmV3IEl0TGl0KGFwcCwge1xuICAgIGVudjoge1xuICAgICAgYWNjb3VudDogcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfQUNDT1VOVCxcbiAgICAgIHJlZ2lvbjogcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfUkVHSU9OLFxuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIFRvIHRlc3QsXG4gKi8iXX0=