Problem
Infrastructure and compliance checks took about two hours of manual work every day.
Architecture
Dependencies (text)
- functions -> registry [runs daily]
- functions -> renewal [runs daily]
- registry -> backups
- registry -> azure
- registry -> virt
- registry -> identity
- registry -> servers
- registry -> confluence [publishes evidence]
- registry -> jira [exceptions]
- renewal -> azure [finds expiring secrets]
- renewal -> jira [review ticket]
- renewal -> teams [summary]
- copilot -> registry [reads results]
Python on Azure Functions, with timer-triggered runs and HTTP routes for preview and debugging.
What it does
- Runs 17+ controls across environments: backups, Azure cost anomalies and certificates, virtualization, identity and access, database maintenance and server health.
- Each check has its own time window and an explicit rule for whether "no data" means OK or an alert.
- Publishes the day's evidence report to Confluence every morning.
- A second daily run finds app secrets expiring within 14 days, opens a Jira review ticket and posts a summary to Teams. Duplicates are skipped, and the alert repeats until the ticket closes.
- The data also feeds a Microsoft Copilot agent I built, which summarizes the results and points to the work the team needs to do.
Decisions
- Dry-run by default. Nothing executes without an explicit confirmation.
- Idempotent and deduplicated everywhere, so reruns are safe.
- Modular. A central check registry and a separate client per integration.
Result
- Roughly 2 hours of daily manual checks replaced.
- About 10,000 lines of Python, designed and built solo.