Saving Money by Automatically Stopping Non-Production Instances During Off Hours w/ AWS Lambda https://www.aaronmedacco.com/blog/post/2017/02/18/saving-money-by-automatically-stopping-non-production-instances-during-off-hours-w-aws-lambda
var AWS = require("aws-sdk");
exports.handler = (event, context, callback) => {
var ec2 = new AWS.EC2();
var describeParams = { Filters: [
{
Name:"tag:Environment",
Values: [
"Development"
]
},
{
Name:"instance-state-name",
Values: [
"stopped"
]
}
]};
var instances = [];
ec2.describeInstances(describeParams, function(err, data) {
if (err) {
console.log(err, err.stack);
} else {
console.log(data);
for (var i = 0; i < data.Reservations.length; i++) {
for (var j = 0; j < data.Reservations[i].Instances.length; j++) {
var instanceId = data.Reservations[i].Instances[j].InstanceId;
if (instanceId !== undefined && instanceId !== null && instanceId !== "") {
instances.push(instanceId);
}
}
}
if (instances.length > 0){
var stopParams = { InstanceIds: instances };
ec2.startInstances(stopParams, function(err,data) {
if (err) {
console.log(err, err.stack);
} else {
console.log(data);
}
});
}
}
});
};
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:StartInstances"
],
"Resource": [
"*"
]
}
]
}
var AWS = require("aws-sdk");
exports.handler = (event, context, callback) => {
var ec2 = new AWS.EC2();
var describeParams = { Filters: [
{
Name:"tag:Environment",
Values: [
"Development"
]
},
{
Name:"instance-state-name",
Values: [
"running"
]
}
]};
var instances = [];
ec2.describeInstances(describeParams, function(err, data) {
if (err) {
console.log(err, err.stack);
} else {
console.log(data);
for (var i = 0; i < data.Reservations.length; i++) {
for (var j = 0; j < data.Reservations[i].Instances.length; j++) {
var instanceId = data.Reservations[i].Instances[j].InstanceId;
if (instanceId !== undefined && instanceId !== null && instanceId !== "") {
instances.push(instanceId);
}
}
}
if (instances.length > 0){
var stopParams = { InstanceIds: instances };
ec2.stopInstances(stopParams, function(err,data) {
if (err) {
console.log(err, err.stack);
} else {
console.log(data);
}
});
}
}
});
};
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:StopInstances"
],
"Resource": [
"*"
]
}
]
}