Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- "use strict";
- // Lambda function for synchronizing Magnolia and completing auto-scaling lifecycle
- exports.lambdaFunction = function(event, context, callback) {
- var magnoliaAuthorInstanceIpAddress = event.MagnoliaAuthorInstanceIpAddress;
- if(!magnoliaAuthorInstanceIpAddress) {
- fail("Magnolia author instance IP address not available (" + JSON.stringify(event) + ").", callback);
- return;
- }
- var magnoliaPublicInstanceIpAddress = event.MagnoliaPublicInstanceIpAddress;
- if(!magnoliaPublicInstanceIpAddress) {
- fail("Magnolia public instance IP address not available (" + JSON.stringify(event) + ").", callback);
- return;
- }
- var httpMethod = event.HttpMethod;
- if(!httpMethod) {
- fail("HTTP method not available (" + JSON.stringify(event) + ").", callback);
- return;
- }
- var autoScalingGroupName = event.AutoScalingGroupName;
- if(!autoScalingGroupName) {
- fail("Auto-scaling group name not available (" + JSON.stringify(event) + ").", callback);
- return;
- }
- var lifecycleHookName = event.LifecycleHookName;
- if(!lifecycleHookName) {
- fail("Lifecycle hook name not available (" + JSON.stringify(event) + ").", callback);
- return;
- }
- var lifecycleActionToken = event.LifecycleActionToken;
- if(!lifecycleActionToken) {
- fail("Lifecycle hook token not available (" + JSON.stringify(event) + ").", callback);
- return;
- }
- var ec2InstanceID = event.EC2InstanceID;
- if(!ec2InstanceID) {
- fail("EC2 instance ID not available (" + JSON.stringify(event) + ").", callback);
- return;
- }
- // call Magnolia synchronisation API
- var magnoliaHostDetails = { MagnoliaAuthorHost: magnoliaAuthorInstanceIpAddress, MagnoliaPublicHost : magnoliaPublicInstanceIpAddress, Method: httpMethod };
- var promise = invokeLambdaFunction('{{EnvironmentName}}-magnoliaCallSyncAPI', magnoliaHostDetails, callback );
- promise.then(function(result) {
- // complete auto-scaling group lifecycle action if Magnolia synchronisation succeeded
- var asgLifecycleDetails = {
- AutoScalingGroupName: autoScalingGroupName,
- LifecycleHookName : lifecycleHookName,
- LifecycleActionToken: lifecycleActionToken,
- LifecycleActionResult: 'CONTINUE',
- InstanceId: ec2InstanceID };
- promise = invokeLambdaFunction('{{EnvironmentName}}-asgCompleteLifecycleAction', asgLifecycleDetails, callback );
- promise.then(function(result) {
- logInfo("Auto-scaling lifecycle action completed for instance ID'" + ec2InstanceID + "'.");
- },
- function(err) { fail(err, callback); });
- },
- function(err) { fail(err, callback); });
- }
- // include: library code
- {{ include('magnolia-autoscaling-sync-stack/javascript/lambda-util-invoke-function.js') }}
- {{ include('magnolia-autoscaling-sync-stack/javascript/lambda-util-logging.js') }}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement