Skip to content

Instantly share code, notes, and snippets.

@andrew-templeton
Last active June 6, 2016 18:52
Show Gist options
  • Save andrew-templeton/d1e77299914d9b2d0ed618dddcd46724 to your computer and use it in GitHub Desktop.
Save andrew-templeton/d1e77299914d9b2d0ed618dddcd46724 to your computer and use it in GitHub Desktop.
Embedded Lambda custom resource for getting an EB Environment's ELB's CanonicalHostedZoneId
var AWS = require('aws-sdk');
var response = require('cfn-response');
exports.handler = function(event, context) {
console.log('REQUEST RECEIVED: %j', event);
if (event.RequestType == 'Delete') {
response.send(event, context, response.SUCCESS);
return;
}
var environmentId = event.ResourceProperties.EnvironmentId;
var responseData = {};
if (environmentId) {
var Beanstalk = new AWS.ElasticBeanstalk();
Beanstalk.describeStacks({
EnvironmentIds: [
environmentId
]
}, function(err, ebEnv) {
var ELB = new AWS.ELB();
var ELBName = null;
if (err) {
responseData = {
Error: 'ElasticBeanstalk.describeEnvironments call failed'
};
console.log(responseData.Error + ':\n', err);
response.send(event, context, response.FAILED, responseData);
} else {
ELBName = ebEnv && ebEnv.EnvironmentResources && ebEnv.EnvironmentResources.LoadBalancers && ebEnv.EnvironmentResources.LoadBalancers[0] && ebEnv.EnvironmentResources.LoadBalancers[0].Name;
if (!ELBName) {
responseData = {
Error: 'ELBName not present'
};
console.log(responseData.Error + ':\n', err);
response.send(event, context, response.FAILED, responseData);
} else {
console.log('Got ELBName: ' + ELBName);
console.log('Accessing ELB description...');
ELB.describeLoadBalancers({
LoadBalancerNames: [
ELBName
]
}, function(err, elbDesc) {
var CanonicalHostedZoneId = null;
if (err) {
responseData = {
Error: 'ELB.describeLoadBalancers call failed'
};
console.log(responseData.Error + ':\n', err);
response.send(event, context, response.FAILED, responseData);
} else {
CanonicalHostedZoneId = elbDesc && elbDesc.LoadBalancerDescriptions && elbDesc.LoadBalancerDescriptions[0] && elbDesc.LoadBalancerDescriptions[0].CanonicalHostedZoneNameID;
if (!CanonicalHostedZoneId) {
responseData = {
Error: 'CanonicalHostedZoneId not present'
};
console.log(responseData.Error + ':\n', err);
response.send(event, context, response.FAILED, responseData);
} else {
console.log('Got CanonicalHostedZoneId: ' + CanonicalHostedZoneId);
response.send(event, context, response.SUCCESS, {
HostedZoneId: CanonicalHostedZoneId
});
}
}
});
}
}
});
} else {
responseData = {Error: 'Environment id not specified'};
console.log(responseData.Error);
response.send(event, context, response.FAILED, responseData);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment