Skip to content

Instantly share code, notes, and snippets.

@abhilashsajeev
Last active May 9, 2017 10:50
Show Gist options
  • Save abhilashsajeev/6bc0c2beea87cb831ce0cdf98077fa3e to your computer and use it in GitHub Desktop.
Save abhilashsajeev/6bc0c2beea87cb831ce0cdf98077fa3e to your computer and use it in GitHub Desktop.
Need create new deployment function
'use strict';
//Import required modules
var AWS = require('aws-sdk'),
async = require('async'),
logger = require('winston'),
zip = require('node-zip')(),
ebzip = require('node-zip')(),
cfgManager = require('./config'),
s3Config = cfgManager.getConfig('s3'),
codeDeployConfig = cfgManager.getConfig('codedeploy'),
S3, codeDeploy;
//Instantiate S3 object
S3 = new AWS.S3({
apiVersion: s3Config.version,
region: s3Config.region
});
//Instantiate CodeDeploy object
codeDeploy = new AWS.CodeDeploy({
apiVersion: codeDeployConfig.version,
region: codeDeployConfig.region
});
function writeToZipFile(data, readParams) {
var targetFileName = readParams.Key.split('/')[0]; //This would be the name of the files zip archives going to hold
zip.file(targetFileName, data.Body.toString());
if(targetFileName === 'mapping.json'){
ebzip.file('appspec.yaml', data.Body.toString());
}
logger.info('%s file added to zip archive', targetFileName);
}
function readFromS3(readParams, callback) {
S3.getObject(readParams, function (error, data) {
if (error) {
logger.error('S3 read operation failed: ', error);
return callback(error);
} else {
writeToZipFile(data, readParams);
return callback();
}
});
}
function generateEbZipArchive() {
var writeParams = s3Config.toEBBucket,
compressedData = ebzip.generate({
base64: false,
compression: 'DEFLATE'
});
writeParams.Body = new Buffer(compressedData, 'binary');
logger.info('Archive has been created successfully');
return writeParams;
}
function writeEBToS3(error, callback) {
var writeParams = generateEbZipArchive();
S3.putObject(writeParams, function (error, data) {
if (error) {
logger.error('S3 write operation failed: ', error);
return callback(error);
} else {
return callback(null, data);
}
});
}
function generateZipArchive() {
var writeParams = s3Config.toBucket,
compressedData = zip.generate({
base64: false,
compression: 'DEFLATE'
});
writeParams.Body = new Buffer(compressedData, 'binary');
logger.info('Archive has been created successfully');
return writeParams;
}
function writeToS3(callback) {
var writeParams = generateZipArchive();
S3.putObject(writeParams, function (error, data) {
if (error) {
logger.error('S3 write operation failed: ', error);
return callback(error);
} else {
return callback(null, data);
}
});
}
function createDeployement(data, callback) {
var codeDeployParams = codeDeployConfig.deploymentParams;
codeDeployParams.revision.s3Location.eTag = data.ETag;
codeDeployParams.revision.s3Location.bucket = s3Config.toBucket.Bucket;
codeDeployParams.revision.s3Location.key = s3Config.toBucket.Key;
codeDeploy.createDeployment(codeDeployParams, function (error, data) {
if (error) {
logger.error('createDeployment operation failed: ', error);
return callback(error);
} else {
logger.info('createDeployment operation was success');
return callback(null, data);
}
});
}
exports.handler = function startDeployment(event, context) {
//Read files from S3 and start deployment process
async.each(s3Config.fromBucket, readFromS3, function done(error) {
if (error) {
logger.error('Unable to read files from S3 bucket: ', error);
} else {
async.waterfall([
writeToS3,
// createDeployement,
writeEBToS3
// createAnotherDeployment
], function (error, result) {
if (error) {
logger.error('Result - Deployment process failed: ', error);
context.done(error);
} else {
logger.info('Result - Files have been deployed successfully to target location, Deployment id: ',
result.deploymentId);
context.done(null);
}
});
}
});
};
{
"version": "2006-03-01",
"region": "ap-northeast-1",
"fromBucket": [
{
"Bucket": "qb-testing-bucket",
"Key": "mapping.json"
}
],
"toBucket": {
"Bucket": "qb-testing-bucket",
"Key": "archive/lbcconf.zip"
},
"toEBBucket": {
"Bucket": "qb-testing-bucket",
"Key": "archive/ebconf.zip"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment