in common.js [599:664]
ensureS3InvokePermisssions(lambda, bucket, prefix, functionName, functionArn, function (err, data) {
if (err) {
callback(err);
} else {
// add the notification configuration to the
// set of existing lambda configurations
if (!currentNotificationConfiguration) {
currentNotificationConfiguration = {};
}
if (!currentNotificationConfiguration.LambdaFunctionConfigurations) {
currentNotificationConfiguration.LambdaFunctionConfigurations = [];
}
configAlreadyExists = false;
// Let's check our configs to see if we
// already have one that exists
currentNotificationConfiguration.LambdaFunctionConfigurations.forEach(config => {
if (config && config.Filter && config.Filter.Key && config.Filter.Key.FilterRules && config.Filter.Key.FilterRules[0].Value == prefix + '/') {
logger.warn('Skipping creation of notification config because it already exists');
configAlreadyExists = true;
}
});
// Create a new notification config
if (!configAlreadyExists) {
logger.info('Creating notification configuration');
// now create the event source mapping
var newEventConfiguration = {
Events: ['s3:ObjectCreated:*',],
LambdaFunctionArn: functionArn,
Filter: {
Key: {
FilterRules: [{
Name: 'prefix',
Value: prefix + "/"
}]
}
},
Id: "LambdaRedshiftLoaderEventSource-" + uuid.v4()
};
currentNotificationConfiguration.LambdaFunctionConfigurations.push(newEventConfiguration);
// push the function event trigger
// configurations back into S3
var params = {
Bucket: bucket,
NotificationConfiguration: currentNotificationConfiguration
};
s3.putBucketNotificationConfiguration(params, function (err, data) {
if (err) {
logger.error(this.httpResponse.body.toString());
logger.error(err);
callback(err);
} else {
callback();
}
});
} else {
callback("Configuration Already Exists");
}
}
});