/
cleanupEventBridge.js
66 lines (53 loc) · 1.87 KB
/
cleanupEventBridge.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
const EventBridge = require("aws-sdk/clients/eventbridge");
const eventbridge = new EventBridge({ region: process.env.AWS_REGION || "eu-central-1" });
async function deleteEventBusRules(eventBus) {
const { Rules } = await eventbridge.listRules({ EventBusName: eventBus.Name }).promise();
for (const rule of Rules) {
const { Targets } = await eventbridge
.listTargetsByRule({ EventBusName: eventBus.Name, Rule: rule.Name })
.promise();
if (Targets.length > 0) {
await eventbridge
.removeTargets({
Ids: Targets.map(t => t.Id),
Rule: rule.Name,
EventBusName: eventBus.Name
})
.promise();
}
await eventbridge.deleteRule({ Name: rule.Name, EventBusName: eventBus.Name }).promise();
}
}
async function deleteEventBus(eventBus) {
console.log(`[${eventBus.Name}] Trying to delete...`);
await deleteEventBusRules(eventBus);
return eventbridge
.deleteEventBus({ Name: eventBus.Name })
.promise()
.then(() => {
console.log(`[${eventBus.Name}] Deleted!`);
return true;
})
.catch(err => {
console.log(`[${eventBus.Name}] Error: ${err.message}`);
return false;
});
}
(async () => {
let nextToken;
let count = 0;
while (true) {
const { EventBuses, NextToken } = await eventbridge
.listEventBuses({ NextToken: nextToken })
.promise();
nextToken = NextToken;
const results = await Promise.all(
EventBuses.filter(bus => bus.Name !== "default").map(deleteEventBus)
);
count += results.filter(Boolean).length;
if (!nextToken) {
break;
}
}
console.log(`Deleted ${count} EventBus resources.`);
})();