Skip to content

Instantly share code, notes, and snippets.

@enVolt
Last active August 23, 2019 08:51
Show Gist options
  • Save enVolt/5c80c648fd2cc8896505fc7376649ac4 to your computer and use it in GitHub Desktop.
Save enVolt/5c80c648fd2cc8896505fc7376649ac4 to your computer and use it in GitHub Desktop.
Lambda Function to change CPU Credits to Unlimited

This simple Lambda JS code can be used to update CPU Credits to 'unlimited' for a newly launched instances.

We had configured Auto-scaling. Due to budget constraint all the instances were on most basic spec possible (t2.micro or t2.nano) To avoid outage, we had enabeld T2 Unlimited on all. Since, autoscaling creates new instance, this may lead to outage.

Under CloudWatch events, create an event source with following configuration -

{
  "source": [
    "aws.autoscaling"
  ],
  "detail-type": [
    "EC2 Instance Launch Successful"
  ]
}

Invoke this Lamdba as Target. You're good to go.

The permission required for execution are under iam_policy.json (apart from Lambda Basic Execution)

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:ModifyInstanceCreditSpecification",
"ec2:DescribeInstanceCreditSpecifications"
],
"Resource": "*"
}
]
}
console.log('Loading function');
var AWS = require('aws-sdk');
exports.handler = function(event, context) {
console.log("AutoScalingEvent()");
console.log("Event data:\n" + JSON.stringify(event, null, 4));
let instance = event.detail.EC2InstanceId;
console.log("Instance Id - " + instance);
var ec2 = new AWS.EC2();
let params = {
InstanceIds: [instance]
};
ec2.describeInstanceCreditSpecifications(params, (err, data) => {
if (err) {
console.log("Error Occurred while checking credit specs", err);
return context.fail(err);
}
if (!data.InstanceCreditSpecifications.length) {
console.error("Instance not found - " + instance);
return context.fail(new Error("Instance not found - " + instance));
}
let status = data.InstanceCreditSpecifications[0].CpuCredits;
if (status == "unlimited") {
console.log("Status is already unlimited");
return context.succeed();
}
console.log("Changing Status");
return ec2.modifyInstanceCreditSpecification({
InstanceCreditSpecifications: [
{
CpuCredits: "unlimited",
InstanceId: instance
}
]
}, (err, data) => {
if (err) {
console.log("Error Occurred", err);
return context.fail(err);
} else {
console.log("Changed to Unlimited");
return context.succeed();
}
});
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment