Advertisement
Guest User

Untitled

a guest
Sep 25th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.92 KB | None | 0 0
  1. "use strict";
  2.  
  3. // Lambda function for synchronizing Magnolia and completing auto-scaling lifecycle
  4. exports.lambdaFunction = function(event, context, callback) {
  5.  
  6. var magnoliaAuthorInstanceIpAddress = event.MagnoliaAuthorInstanceIpAddress;
  7. if(!magnoliaAuthorInstanceIpAddress) {
  8. fail("Magnolia author instance IP address not available (" + JSON.stringify(event) + ").", callback);
  9. return;
  10. }
  11. var magnoliaPublicInstanceIpAddress = event.MagnoliaPublicInstanceIpAddress;
  12. if(!magnoliaPublicInstanceIpAddress) {
  13. fail("Magnolia public instance IP address not available (" + JSON.stringify(event) + ").", callback);
  14. return;
  15. }
  16. var httpMethod = event.HttpMethod;
  17. if(!httpMethod) {
  18. fail("HTTP method not available (" + JSON.stringify(event) + ").", callback);
  19. return;
  20. }
  21. var autoScalingGroupName = event.AutoScalingGroupName;
  22. if(!autoScalingGroupName) {
  23. fail("Auto-scaling group name not available (" + JSON.stringify(event) + ").", callback);
  24. return;
  25. }
  26. var lifecycleHookName = event.LifecycleHookName;
  27. if(!lifecycleHookName) {
  28. fail("Lifecycle hook name not available (" + JSON.stringify(event) + ").", callback);
  29. return;
  30. }
  31. var lifecycleActionToken = event.LifecycleActionToken;
  32. if(!lifecycleActionToken) {
  33. fail("Lifecycle hook token not available (" + JSON.stringify(event) + ").", callback);
  34. return;
  35. }
  36. var ec2InstanceID = event.EC2InstanceID;
  37. if(!ec2InstanceID) {
  38. fail("EC2 instance ID not available (" + JSON.stringify(event) + ").", callback);
  39. return;
  40. }
  41.  
  42. // call Magnolia synchronisation API
  43. var magnoliaHostDetails = { MagnoliaAuthorHost: magnoliaAuthorInstanceIpAddress, MagnoliaPublicHost : magnoliaPublicInstanceIpAddress, Method: httpMethod };
  44. var promise = invokeLambdaFunction('{{EnvironmentName}}-magnoliaCallSyncAPI', magnoliaHostDetails, callback );
  45.  
  46. promise.then(function(result) {
  47.  
  48. // complete auto-scaling group lifecycle action if Magnolia synchronisation succeeded
  49. var asgLifecycleDetails = {
  50. AutoScalingGroupName: autoScalingGroupName,
  51. LifecycleHookName : lifecycleHookName,
  52. LifecycleActionToken: lifecycleActionToken,
  53. LifecycleActionResult: 'CONTINUE',
  54. InstanceId: ec2InstanceID };
  55.  
  56. promise = invokeLambdaFunction('{{EnvironmentName}}-asgCompleteLifecycleAction', asgLifecycleDetails, callback );
  57.  
  58. promise.then(function(result) {
  59. logInfo("Auto-scaling lifecycle action completed for instance ID'" + ec2InstanceID + "'.");
  60. },
  61.  
  62. function(err) { fail(err, callback); });
  63. },
  64. function(err) { fail(err, callback); });
  65.  
  66. }
  67.  
  68. // include: library code
  69. {{ include('magnolia-autoscaling-sync-stack/javascript/lambda-util-invoke-function.js') }}
  70. {{ include('magnolia-autoscaling-sync-stack/javascript/lambda-util-logging.js') }}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement