United States

Perry Holloway

Cloud, automation, and infrastructure builder

I grew up in Broken Arrow, Oklahoma, and have always been curious about how things work. That curiosity took me to the University of Tulsa, where I earned a bachelor's degree in Applied Mathematics with an emphasis in Computer Science. After college, I spent a few years working a mix of jobs and figuring out where I wanted to go next. I eventually returned to the University of Tulsa and earned a Master of Science in Computer Science with an emphasis in Information Assurance. Soon after graduating, I joined Cerner, where what began as my next step grew into a long and rewarding career. Away from work, I enjoy taking on DIY projects, playing computer games, and learning new technologies. Whether I am building something around the house or experimenting with a new tool, I like solving problems and learning by doing.

Selected Strengths

Highlights

LinkedIn Writing

Posts

Testing End-to-End Kubernetes Monitoring in My Local Lab

I intentionally broke a Kubernetes workload in my VMware Workstation lab to verify that the complete monitoring path could detect the failure, raise an alert, and return to healthy after recovery.

  • The Terraform-managed lab combines VMware Workstation, K3s, a custom Python Kubernetes API monitor, Prometheus, Grafana, and Jenkins across four local virtual machines.
  • An invalid container image caused the Python monitor to report three critical findings while Prometheus advanced the alert from pending to firing after its two-minute confirmation window.
  • After repairing the deployment, the monitor returned healthy with zero findings, the Prometheus alert resolved, and the Jenkins health pipeline returned to a successful state.
Post on LinkedIn View Source

Building a Practical SRE and AWS Automation Script Collection

I organized a reusable collection of Python and Bash utilities for the everyday reliability work that tends to arrive as a one-off request: log analysis, health checks, latency reporting, SLO checks, and AWS operations automation.

  • The observability utilities parse access logs, identify top client IPs and 5xx rates, flag slow endpoints, calculate p95 and p99 latency, and evaluate SLO windows.
  • The AWS utilities cover EC2 and Auto Scaling health remediation, CloudTrail-driven tagging, Bedrock-assisted log triage, vulnerability patch workflows, cost cleanup, and Terraform drift alerts.
  • The repository is structured for practical use with examples, dependency metadata, a GitHub Actions syntax check, and dry-run defaults for potentially destructive operations.
Post on LinkedIn View Source

Building a Dual-VPC AWS Application Stack with Terraform

I built an AWS Terraform stack that separates web and management workloads across two VPCs, connects them with VPC peering, and deploys Lambda, API Gateway, Windows EC2, RDS, S3, and GitHub Pages automation.

  • The networking layer creates separate Web and Management VPCs with public and private subnets, route tables, VPC peering, and cross-VPC DNS resolution.
  • The application layer runs a Lambda web service behind API Gateway in the Web VPC while allowing database access to private RDS subnets in the Management VPC.
  • The management side provisions a Windows Server EC2 instance with SSM and CloudWatch permissions, plus private RDS with security groups, parameter groups, alarms, and protected prod behavior.
Post on LinkedIn View Source

Building a VMware Workstation Monitoring Lab with Terraform

I rebuilt and expanded a local four-VM Kubernetes monitoring lab where Terraform orchestrates VMware Workstation, a custom Python monitor inspects the Kubernetes API, Prometheus and Grafana provide observability, and Jenkins runs automated health checks.

  • PowerShell and Terraform build the VMware guests, install K3s, Prometheus, Grafana, Jenkins, Node Exporter, dashboards, and alert rules, and keep the environment repeatable through configuration hashes.
  • The Python service checks Kubernetes pods and deployments, exposes JSON health status and Prometheus metrics, and feeds both Prometheus alerts and the Jenkins monitoring pipeline.
  • I tested the complete workflow by deploying an invalid container image: the monitor reported three critical findings, Prometheus moved the alert from pending to firing, and the environment returned to healthy after the workload was repaired.
Post on LinkedIn View Source

Managing AWS IAM Users and Groups from a Spreadsheet

I built a Terraform workflow that turns an Excel spreadsheet into AWS IAM users, groups, tiered permissions, and group memberships.

  • A Python script reads users.xlsx, validates required columns, normalizes email and group names, and emits users.json as Terraform input.
  • Terraform creates one IAM user per unique email, reuses built-in full-admin, basic-user, and read-only groups, and creates extra dynamic groups from the spreadsheet when needed.
  • Group memberships are managed as the single source of truth, and the repo includes outputs for ARNs, user counts, group counts, member lists, and group admins.
Post on LinkedIn View Source

Private S3 Upload Automation with Terraform

I also added an S3 module example that creates a private, encrypted, versioned bucket and uploads a local folder while preserving file paths and MIME types.

  • The bucket blocks public access, enforces server-side encryption, enables versioning, and denies non-SSL requests.
  • Terraform walks the configured upload folder with fileset, maps file extensions to content types, and uploads changed files using etags.
  • The bucket policy limits access to the deploying AWS account root while keeping the bucket private by default.
Post on LinkedIn View Source

How I Make Local Infrastructure Labs Repeatable

The monitoring lab includes a build wrapper that ties VM cloning and Terraform apply into one repeatable workflow with status tracking and logging.

  • The PowerShell wrapper creates status and transcript logs so a lab build can be reviewed after success or failure.
  • It can refresh specific VM disks, skip hardware changes when needed, and then run Terraform apply against the generated Workstation inventory.
  • This is the same pattern I like for operations work: make the manual path explicit once, then wrap it so the next run is predictable.
Post on LinkedIn View Source

Practical Automation

Scripts

Log and Latency Analysis

Turn access logs and metrics files into endpoint counts, error rates, top IPs, slow-request findings, and latency percentiles.

  • Apache, Nginx, and simple application log parsing
  • CSV, JSON, and JSONL latency inputs
  • P95, P99, error-rate, and slow-request reporting
Python Observability SLO View scripts

Service Health Checks

Run lightweight service checks from Python or Bash and fail fast when response status, latency, or expected content falls outside a threshold.

  • HTTP status and response-time thresholds
  • Expected-response content checks
  • Shell-friendly exit codes for schedulers and CI
Python Bash Monitoring View scripts

SLO and Configuration Validation

Validate structured configuration and calculate whether a service has breached its objective during a defined observation window.

  • JSON and YAML configuration validation
  • Time-windowed SLI aggregation
  • Clear breach and error-budget output
Python SLO YAML View scripts

AWS Health and Cost Automation

Automate the repetitive checks around instance health, cost hygiene, unassigned resources, and infrastructure drift.

  • EC2 and Auto Scaling health remediation
  • EBS, Elastic IP, and log-retention cleanup
  • Terraform refresh-only drift alerts
AWS EC2 Terraform Bash View scripts

CloudTrail Triage and Tagging

Respond to new AWS resources and operational signals with ownership tags, investigation context, and controlled remediation workflows.

  • CloudTrail-driven cost and ownership tags
  • Bedrock-assisted CloudWatch and CloudTrail log triage
  • SSM patch workflows based on vulnerability findings
CloudTrail Bedrock Systems Manager View scripts