@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
JavaScript
;
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=