Guest User

Untitled

a guest
Jun 21st, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.91 KB | None | 0 0
  1. console.log('Loading function');
  2.  
  3. const AWS = require('aws-sdk');
  4.  
  5. AWS.config.update({
  6. region: 'ap-southeast-1'
  7. });
  8.  
  9. var elb = new AWS.ELB();
  10.  
  11. var sampleEvent = {
  12. "version": "0",
  13. "id": "1e5527d7-bb36-4607-3370-4164db56a40e",
  14. "detail-type": "EC2 Spot Instance Interruption Warning",
  15. "source": "aws.ec2",
  16. "account": "123456789012",
  17. "time": "1970-01-01T00:00:00Z",
  18. "region": "us-east-1",
  19. "resources": [
  20. "arn:aws:ec2:us-east-1b:instance/i-0b662ef9931388ba0"
  21. ],
  22. "detail": {
  23. "instance-id": "i-0b662ef9931388ba123",
  24. "instance-action": "terminate"
  25. }
  26. }
  27.  
  28. exports.handler = (event, context, callback) => {
  29. var instanceToDeregister;
  30.  
  31. //get instance id from event
  32. if (event && event.detail && event.detail['instance-action'] == 'terminate' && event.detail['instance-id']) {
  33. instanceToDeregister = event.detail['instance-id'];
  34. console.log(`got instance to deregister ${instanceToDeregister}`);
  35. } else {
  36. return callback(`no instance-id found to deregister in event ${JSON.stringify(event)}`);
  37. }
  38.  
  39. elb.describeLoadBalancers({}, function(err, data) {
  40. if (err || !data) {
  41. console.log(err || 'no data in describeLoadBalancers'); // an error occurred
  42. return callback(err || 'no data in describeLoadBalancers');
  43. } else {
  44. if (data.LoadBalancerDescriptions) {
  45. //scan for matching lb for instance
  46. // console.log(data.LoadBalancerDescriptions);
  47. var toDeregister = {};
  48. for (var i = 0; i < data.LoadBalancerDescriptions.length; i++) {
  49. var loadBalancer = data.LoadBalancerDescriptions[i];
  50. // console.log(loadBalancer.LoadBalancerName, "->", loadBalancer.Instances);
  51.  
  52. if (loadBalancer.Instances && loadBalancer.Instances.length > 0) {
  53. for (var j = 0; j < loadBalancer.Instances.length; j++) {
  54. var entry = loadBalancer.Instances[j];
  55. if (entry.InstanceId == instanceToDeregister) {
  56. toDeregister.instanceId = entry.InstanceId;
  57. toDeregister.loadBalancerName = loadBalancer.LoadBalancerName;
  58. break;
  59. }
  60. }
  61. }
  62.  
  63. if (toDeregister.instanceId && toDeregister.loadBalancerName) {
  64. break;
  65. }
  66. }
  67.  
  68. if (toDeregister.instanceId && toDeregister.loadBalancerName) {
  69. // deregister the instance
  70. console.log(`deregistering ${toDeregister.instanceId} from ${toDeregister.loadBalancerName}`)
  71. deregisterInstance(toDeregister.instanceId, toDeregister.loadBalancerName, callback);
  72. } else {
  73. callback(`did not find instance attached to any load balancer ${JSON.stringify(event)}`)
  74. }
  75. } else {
  76. callback('no lb found');
  77. }
  78. }
  79. });
  80. };
  81.  
  82. function deregisterInstance(instanceId, loadBalancerName, callback) {
  83. var params = {
  84. Instances: [{
  85. InstanceId: instanceId
  86. }],
  87. LoadBalancerName: loadBalancerName
  88. };
  89. elb.deregisterInstancesFromLoadBalancer(params, function(err, data) {
  90. if (err) {
  91. console.log(err, err.stack);
  92. callback(err);
  93. } else {
  94. console.log(`deregistered ${JSON.stringify(data)}`);
  95. callback(null, 'Success');
  96. }
  97. });
  98. }
Add Comment
Please, Sign In to add comment