EC2 Spot Instance Termination Notifier
AWS EC2 Spot Instance Termination Notices for NodeJs
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.
- Author: Tümay Çeber