1 | var AWS = require('aws-sdk');
|
2 | var utils = require('../lib/utils');
|
3 | var Response = require('../lib/response');
|
4 |
|
5 | module.exports = S3Inventory;
|
6 |
|
7 | function 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 |
|
26 | S3Inventory.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 |
|
55 | S3Inventory.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 |
|
67 | S3Inventory.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 |
|
90 | S3Inventory.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 | };
|