Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

brendtumi/ec2-spot-notification

Open more actions menu

Repository files navigation

EC2 Spot Instance Termination Notifier

AWS EC2 Spot Instance Termination Notices for NodeJs

NPM version Downloads

Installation

Install with npm:

npm install --save ec2-spot-notification

Example

import {SpotNotifier as spot} from "ec2-spot-notification";

spot.once("termination", date => {
    console.log("termination", date);
});
spot.once("termination-cancelled", date => {
    console.log("termination-cancelled", date);
});
spot.on("termination-not-detected", error => {
    console.log("termination-not-detected", error);
});
spot.on("instance-termination", error => {
    console.log("instance-termination", error);
});

spot.instanceId()
    .then(id => {
        console.log("instanceId", id);
        spot.start();
    })
    .catch(err => {
        console.error("instanceId", err);
    });

Production usage

var SpotNotifier = require("ec2-spot-notification").SpotNotifier;
var aws = require("aws-sdk");

var instanceId = null;
var elb = new aws.ELB();

SpotNotifier.on("termination", function (date) {
    console.log("Aws termination detected", date.toString());

    elb.deregisterInstancesFromLoadBalancer({
        Instances: [{InstanceId: instanceId}],
        LoadBalancerName: "Nutcracker"
    }, function (err, data) {
        if (err)
            console.error("deregisterInstancesFromLoadBalancer", err);
        else {
            console.log("deregisterInstancesFromLoadBalancer", data);
            SpotNotifier.stop();
        }
    });

});
SpotNotifier.on("termination-cancelled", function (date) {
    console.log("Aws termination cancelled for %s, restarting notifier", date.toString());

    SpotNotifier.start();
    elb.registerInstancesWithLoadBalancer({
        Instances: [{InstanceId: instanceId}],
        LoadBalancerName: "Nutcracker"
    }, function (err, data) {
        if (err)
            console.error("deregisterInstancesFromLoadBalancer", err);
        else {
            console.log("deregisterInstancesFromLoadBalancer", data);
        }
    });

});
SpotNotifier.instanceId()
    .then(function (iId) {
        console.log("Aws Spot Notification instanceId", iId);
        instanceId = iId;
        SpotNotifier.start();
    })
    .catch(function (err) {
        console.error("Aws Spot Notification instanceId", err);
    });

Test

ubuntu@ip-172-31-2-186:~/ec2-spot-notification$ npm run test-server
instanceId i-05858013e
termination-not-detected 404
termination-not-detected 404
termination-not-detected 404
termination-not-detected 404
termination moment("2017-02-08T12:49:14.000")

Broadcast message from root@ip-172-31-2-186
	(unknown) at 12:49 ...

Contributors

We welcome contributions of all kinds from anyone.

My boss wants a license. So where is it?

MIT License

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.