Created
December 2, 2022 16:10
-
-
Save jamesbursa/a5b63ce36f2b515d93d90505b227cedd to your computer and use it in GitHub Desktop.
Convert CloudTrail of ModifyDBInstance to Markdown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# 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