deep-package-manager
Version:
DEEP Package Manager
111 lines (89 loc) • 2.99 kB
JavaScript
/**
* Created by CCristi on 2/17/17.
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.S3Service = undefined;
var _AbstractService = require('./AbstractService');
var _deepCore = require('deep-core');
var _deepCore2 = _interopRequireDefault(_deepCore);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
class S3Service extends _AbstractService.AbstractService {
/**
* @param {Object[]} args
*/
constructor(...args) {
super(...args);
this._s3 = null;
}
/**
* @returns {String}
*/
name() {
return _deepCore2.default.AWS.Service.SIMPLE_STORAGE_SERVICE;
}
/**
* @param {Object} s3
*/
set s3(s3) {
this._s3 = s3;
}
/**
* @param {String} bucketName
* @returns {Promise}
*/
addReplicationLambdaNotification(bucketName) {
let lambdaService = this.replication.lambdaService;
let s3ReplicationFuncName = lambdaService.s3ReplicationFunctionName;
let payload = {
Bucket: bucketName,
NotificationConfiguration: {
LambdaFunctionConfigurations: [{
Id: `Replication_${this.replication.hashCode}_${bucketName}`,
Events: ['s3:ObjectCreated:Put', 's3:ObjectCreated:Post', 's3:ObjectCreated:Copy', 's3:ObjectRemoved:Delete'],
LambdaFunctionArn: lambdaService.generateLambdaArn(s3ReplicationFuncName)
}]
}
};
return this._retryableRequest(this._s3.putBucketNotificationConfiguration(payload), ['InvalidArgument']).promise();
}
/**
* @param {String} bucketName
* @returns {Promise}
*/
removeBucketReplicationNotification(bucketName) {
let lambdaService = this.replication.lambdaService;
let s3ReplicationFuncArn = lambdaService.generateLambdaArn(lambdaService.s3ReplicationFunctionName);
return this._s3.getBucketNotificationConfiguration({
Bucket: bucketName
}).promise().then(configurationObj => {
configurationObj.LambdaFunctionConfigurations = configurationObj.LambdaFunctionConfigurations.filter(lambdaCfg => lambdaCfg.LambdaFunctionArn !== s3ReplicationFuncArn);
let updatePayload = {
Bucket: bucketName,
NotificationConfiguration: configurationObj
};
return this._retryableRequest(this._s3.putBucketNotificationConfiguration(updatePayload), ['InvalidArgument']).promise();
});
}
/**
* @returns {Object}
*/
buildBucketReplicationMap() {
let replMap = {};
let blueBuckets = this.blueConfig().buckets;
let greenBuckets = this.greenConfig().buckets;
for (let type in blueBuckets) {
if (!blueBuckets.hasOwnProperty(type)) {
continue;
}
let blueAwsName = blueBuckets[type].name;
let greenAwsName = greenBuckets[type].name;
replMap[blueAwsName.replace(/\./g, '_')] = greenAwsName;
replMap[greenAwsName.replace(/\./g, '_')] = blueAwsName;
}
return replMap;
}
}
exports.S3Service = S3Service;