Skip to content

Instantly share code, notes, and snippets.

@jamesbursa
Created December 2, 2022 16:10
Show Gist options
  • Save jamesbursa/a5b63ce36f2b515d93d90505b227cedd to your computer and use it in GitHub Desktop.
Save jamesbursa/a5b63ce36f2b515d93d90505b227cedd to your computer and use it in GitHub Desktop.
Convert CloudTrail of ModifyDBInstance to Markdown.
#
# Convert CloudTrail of ModifyDBInstance to Markdown.
#
# Usage:
# aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=ModifyDBInstance >ModifyDBInstance_events.json
# python3 parse_events.py ModifyDBInstance_events.json
#
from dataclasses import dataclass
import json
import sys
@dataclass
class Event:
time: str
username: str
resource: str
params: dict
def main(name):
body = json.load(open(name))
events = body["Events"]
output_events(events)
def output_events(raw_events):
events = tuple(process_event(e) for e in reversed(raw_events))
instances = set(event.resource for event in events)
for instance in sorted(instances):
db_events = tuple(event for event in events if event.resource == instance)
param_names = set()
for event in db_events:
param_names |= event.params.keys()
param_names = sorted(param_names)
param_names.remove("allowMajorVersionUpgrade")
param_names.remove("dBInstanceIdentifier")
print("# " + instance)
print("| Datetime | User | " + " | ".join(param_names) + " |")
print("| -------- | ---- |" + " --- |" * len(param_names))
for event in db_events:
columns = [event.time, "`" + event.username + "`"]
columns += [str(event.params.get(p, "")) for p in param_names]
print("| " + " | ".join(columns) + " |")
print()
def process_event(raw_event):
ct_event = json.loads(raw_event["CloudTrailEvent"])
params = ct_event["requestParameters"]
return Event(raw_event["EventTime"], raw_event["Username"],
raw_event["Resources"][0]["ResourceName"], params)
if __name__ == "__main__":
main(sys.argv[1])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment