Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- console.log('Loading function');
- const AWS = require('aws-sdk');
- AWS.config.update({
- region: 'ap-southeast-1'
- });
- var elb = new AWS.ELB();
- var sampleEvent = {
- "version": "0",
- "id": "1e5527d7-bb36-4607-3370-4164db56a40e",
- "detail-type": "EC2 Spot Instance Interruption Warning",
- "source": "aws.ec2",
- "account": "123456789012",
- "time": "1970-01-01T00:00:00Z",
- "region": "us-east-1",
- "resources": [
- "arn:aws:ec2:us-east-1b:instance/i-0b662ef9931388ba0"
- ],
- "detail": {
- "instance-id": "i-0b662ef9931388ba123",
- "instance-action": "terminate"
- }
- }
- exports.handler = (event, context, callback) => {
- var instanceToDeregister;
- //get instance id from event
- if (event && event.detail && event.detail['instance-action'] == 'terminate' && event.detail['instance-id']) {
- instanceToDeregister = event.detail['instance-id'];
- console.log(`got instance to deregister ${instanceToDeregister}`);
- } else {
- return callback(`no instance-id found to deregister in event ${JSON.stringify(event)}`);
- }
- elb.describeLoadBalancers({}, function(err, data) {
- if (err || !data) {
- console.log(err || 'no data in describeLoadBalancers'); // an error occurred
- return callback(err || 'no data in describeLoadBalancers');
- } else {
- if (data.LoadBalancerDescriptions) {
- //scan for matching lb for instance
- // console.log(data.LoadBalancerDescriptions);
- var toDeregister = {};
- for (var i = 0; i < data.LoadBalancerDescriptions.length; i++) {
- var loadBalancer = data.LoadBalancerDescriptions[i];
- // console.log(loadBalancer.LoadBalancerName, "->", loadBalancer.Instances);
- if (loadBalancer.Instances && loadBalancer.Instances.length > 0) {
- for (var j = 0; j < loadBalancer.Instances.length; j++) {
- var entry = loadBalancer.Instances[j];
- if (entry.InstanceId == instanceToDeregister) {
- toDeregister.instanceId = entry.InstanceId;
- toDeregister.loadBalancerName = loadBalancer.LoadBalancerName;
- break;
- }
- }
- }
- if (toDeregister.instanceId && toDeregister.loadBalancerName) {
- break;
- }
- }
- if (toDeregister.instanceId && toDeregister.loadBalancerName) {
- // deregister the instance
- console.log(`deregistering ${toDeregister.instanceId} from ${toDeregister.loadBalancerName}`)
- deregisterInstance(toDeregister.instanceId, toDeregister.loadBalancerName, callback);
- } else {
- callback(`did not find instance attached to any load balancer ${JSON.stringify(event)}`)
- }
- } else {
- callback('no lb found');
- }
- }
- });
- };
- function deregisterInstance(instanceId, loadBalancerName, callback) {
- var params = {
- Instances: [{
- InstanceId: instanceId
- }],
- LoadBalancerName: loadBalancerName
- };
- elb.deregisterInstancesFromLoadBalancer(params, function(err, data) {
- if (err) {
- console.log(err, err.stack);
- callback(err);
- } else {
- console.log(`deregistered ${JSON.stringify(data)}`);
- callback(null, 'Success');
- }
- });
- }
Add Comment
Please, Sign In to add comment