Created
April 28, 2016 17:29
-
-
Save nathanpeck/51143e03bbb09778097af0146d9e5046 to your computer and use it in GitHub Desktop.
Simplistic lambda function for autoscaling the number of tasks in an ECS service
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var aws = require('aws-sdk'); | |
exports.handler = function(event, context) { | |
var ecsRegion = 'us-east-1'; | |
// Safegaurd against out of control service scaling | |
var maxCount = { | |
deathstar: 6 | |
}; | |
var message = JSON.parse(event.Records[0].Sns.Message); | |
var serviceName; | |
var clusterName; | |
for (var dimension in message.Trigger.Dimensions) { | |
if (message.Trigger.Dimensions[dimension].name == 'ServiceName') { | |
serviceName = message.Trigger.Dimensions[dimension].value; | |
} | |
if (message.Trigger.Dimensions[dimension].name == 'ClusterName'){ | |
clusterName = message.Trigger.Dimensions[dimension].value; | |
} | |
} | |
console.log('The service that triggered this alarm was: ' + serviceName); | |
console.log('The cluster that triggered this alarm was: ' + clusterName); | |
var ecs = new aws.ECS({region: ecsRegion}); | |
ecs.describeServices({services:[serviceName], cluster: clusterName}, function(err, data) { | |
console.log('Finished describing service to fetch current task count'); | |
if (err) { | |
console.log(err, err.stack); | |
} else { | |
var desiredCount = data.services[0].desiredCount; | |
if (desiredCount < maxCount[serviceName]) { | |
desiredCount++; | |
var params = { | |
service: serviceName, | |
desiredCount: desiredCount, | |
cluster: clusterName | |
}; | |
ecs.updateService(params, function(err, data) { | |
console.log('Finished updating service task count'); | |
if (err) { | |
console.log(err, err.stack); | |
} else { | |
console.log(data); | |
context.succeed(); | |
} | |
}); | |
} else { | |
console.log('Service count for ' + serviceName + ' is already max on ' + clusterName); | |
context.fail(); | |
} | |
} | |
}); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment