This repository was archived by the owner on Mar 4, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 191
/
Copy paths3.js
105 lines (99 loc) · 2.38 KB
/
s3.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
'use strict';
var rfr = require('rfr');
var logger = rfr('util/logger');
var config = rfr('config');
var AWS = config.AWS;
var fs = require('fs');
var cf = rfr('/util/cloudFormation');
function uploadLambdaZipToS3() {
return cf.getStackOutputs().then((cfOutputs) => {
return {
Bucket: cfOutputs.LambdaBucket,
Key: config.getLambdaZipName(),
Body: fs.createReadStream(config.getLambdaZipPath())
};
}).then((params) => {
return putS3Object(params);
});
}
function putS3Object(params) {
return new Promise((resolve, reject) => {
var s3obj = new AWS.S3({params: params});
s3obj.upload({Body: params.Body}, function(err, data) {
if (err) {
reject(err);
return;
}
logger.info('Successfully uploaded Lambda code to ' + params.Key);
logger.info('Uploaded Lambda zip as s3://' + params.Bucket + '/' + params.Key);
resolve(data);
});
});
}
function emptyBucket(bucketName) {
return new Promise((resolve, reject) => {
listObjects(bucketName).then((objectKeys) => {
deleteObjects(bucketName, objectKeys).then((result) => {
resolve(result);
})
}).catch((err) => {
logger.error(err);
reject(err);
})
})
}
function listObjects(bucketName) {
return new Promise((resolve, reject) => {
var objectKeys = [];
var s3 = new AWS.S3();
let params = {
Bucket: bucketName
};
s3.listObjectsV2(params, function(err, data) {
if (err) {
logger.error(err);
reject(err);
}
let objects = [];
if (data && data.Contents) {
objects = data.Contents;
}
for (let i = 0; i < objects.length; i++) {
objectKeys.push(
{
Key: objects[i].Key
}
);
}
resolve(objectKeys);
});
});
}
function deleteObjects(bucketName, objectKeys) {
return new Promise((resolve, reject) => {
var s3 = new AWS.S3();
if (objectKeys.length === 0) {
// Bucket is already empty. There are no objects to delete
resolve();
return;
}
let params = {
Bucket: bucketName,
Delete: {
Objects: objectKeys
}
};
s3.deleteObjects(params, function (err, data) {
if (err) {
logger.error(err);
reject(err);
return;
}
resolve(data);
})
});
}
module.exports = {
uploadLambdaZipToS3,
emptyBucket
};