queirozsc
8/30/2017 - 6:06 PM

Saving Money by Automatically Stopping Non-Production Instances During Off Hours w/ AWS Lambda https://www.aaronmedacco.com/blog/post/2017/0

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": [
                "*"
            ]
        }
    ]
}