UNPKG

2.79 kBJavaScriptView Raw
1var AWS = require('aws-sdk');
2var utils = require('../lib/utils');
3var Response = require('../lib/response');
4
5module.exports = S3Inventory;
6
7function S3Inventory(Bucket, BucketRegion, Id, InventoryConfiguration, OldId) {
8 if (!Bucket)
9 throw new Error('Missing Parameter Bucket');
10 if (!BucketRegion)
11 throw new Error('Missing Parameter BucketRegion');
12 if (!Id)
13 throw new Error('Missing Parameter Id');
14 if (!InventoryConfiguration)
15 throw new Error('Missing Parameter InventoryConfiguration');
16
17 InventoryConfiguration.IsEnabled = InventoryConfiguration.IsEnabled === 'true'
18 ? true : false;
19
20 this.s3 = new AWS.S3({ region: BucketRegion });
21 this.params = { Bucket, Id, InventoryConfiguration };
22
23 if (OldId !== Id) this.oldId = OldId;
24}
25
26S3Inventory.manage = function(event, context, callback) {
27 if (!utils.validCloudFormationEvent(event))
28 return callback(null, 'ERROR: Invalid CloudFormation event');
29
30 var response = new Response(event, context);
31 var requestType = event.RequestType.toLowerCase();
32
33 var s3Inventory;
34 try {
35 s3Inventory = new S3Inventory(
36 event.ResourceProperties.Bucket,
37 event.ResourceProperties.BucketRegion,
38 event.ResourceProperties.Id,
39 event.ResourceProperties.InventoryConfiguration,
40 event.OldResourceProperties ? event.OldResourceProperties.Id : undefined
41 );
42 } catch (err) {
43 return response.send(err);
44 }
45
46 console.log(`${requestType} ${event.ResourceProperties.Bucket}:${event.ResourceProperties.Id}`);
47
48 s3Inventory[requestType](function(err, physicalId) {
49 if (err) return response.send(err);
50 if (physicalId) response.setId(physicalId);
51 response.send();
52 });
53}
54
55S3Inventory.prototype.create = function(callback) {
56 const bucket = this.params.Bucket;
57 const id = this.params.Id;
58 this.s3.putBucketInventoryConfiguration(this.params, function(err) {
59 if (err) return callback(err);
60
61 console.log(`created ${bucket}:${id}`);
62
63 callback(null, id);
64 });
65};
66
67S3Inventory.prototype.update = function(callback) {
68 var old = this.oldId;
69 var s3 = this.s3;
70 var bucket = this.params.Bucket;
71
72 this.create(function(err, id) {
73 if (err) return callback(err);
74 if (!old) return callback(null, id);
75
76 s3.deleteBucketInventoryConfiguration({
77 Bucket: bucket,
78 Id: old
79 }, function (err) {
80 if (err) return callback(err);
81
82 console.log(`deleted ${bucket}:${old}`);
83
84 callback(null, id);
85 });
86
87 })
88};
89
90S3Inventory.prototype.delete = function(callback) {
91 const bucket = this.params.Bucket;
92 const id = this.params.Id;
93
94 this.s3.deleteBucketInventoryConfiguration({
95 Bucket: bucket,
96 Id: id
97 }, function(err) {
98 if (err) return callback(err);
99
100 console.log(`deleted ${bucket}:${id}`);
101
102 callback();
103 });
104};