Cloud & Azure
- Microsoft Azure
- Azure Resource Manager
- VNet · Subnets · NSG
- Entra ID & RBAC
- Azure Policy
- Key Vault
- Bastion · Load Balancer · App Gateway
Open to DevOps · Cloud · Platform roles
I'm Harsh Agarwal, a DevOps engineer working on Azure with Terraform. I build CI/CD pipelines that catch drift, leaked secrets and misconfiguration early, and I keep infrastructure state honest.
Focus areas: Azure infrastructure, Terraform and Infrastructure as Code, CI/CD with GitHub Actions, DevSecOps automation, drift detection.
$ terraform fmt -check -recursive formatting clean $ ./scripts/run_tflint.sh && ./scripts/run_trivy_config.sh ✓ TFLint: no issues ✓ Trivy: 0 HIGH / CRITICAL (accepted risks tracked) $ terraform plan -detailed-exitcode -out=tfplan exit 2 → pending changes, classification decides $ drift-engine analyze --plan plan.json --format console azurerm_resource_group.main external drift tags.owner: "platform" → "manual-edit" report written · 1 issue opened · sensitive values redacted
01 / about
I have around 2–3 years of software engineering experience and I'm now focused on DevOps. Most of my work happens in Azure: Terraform for infrastructure, GitHub Actions for delivery, and security scanning and validation that run on every change.
I like the unglamorous parts done well. That means plans you can trust, pipeline identities with only the permissions they need, and checks that fail loudly instead of passing silently. My drift detector is where I practise this in the open, with every phase documented and backed by evidence.
If a check matters, it runs in CI on every push, not from memory before a release.
OIDC over stored secrets, SHA-pinned actions, least-privilege roles and secret scanning across Git history.
Deterministic results first. A failed run reports "unknown", never "no drift".
Small reviewed pull requests, written decisions, and honest notes on what isn't built yet.
02 / skills
Grouped by the job they do. Everything here is used in my public repositories or listed on my GitHub profile. I don't use percentage bars.
03 / experience
Professional roles and independent DevOps project work are marked separately.
Software engineering role that has moved steadily toward infrastructure work: Azure, Terraform, CI/CD workflows, security scanning and infrastructure validation.
level1-v1.0.0, Oct 2026). Each completed phase was closed on evidence from real CI runs and Azure tests.CGPA 8.56 / 10. Built a foundation in Java, data structures, SQL and web development.
Completed internship task tracks: Java applications (ATM interface, reservation system, library management, online examination) and front-end tasks. All source code is public on my GitHub.
04 / projects
Real repositories. Numbers come from each project's own CI records, and anything not built yet is labelled as such.
Finds out when Azure no longer matches Terraform and explains what changed, who changed it and
what it costs. It never runs apply.
Problem: manual portal edits, failed deployments and policy overrides make real infrastructure drift silently away from code and state.
// detection flow (read-only)
Nine reusable Terraform modules composed into separate preprod and prod environments, with remote state in Azure Storage.
Problem: copy-pasted resource blocks drift apart between environments, and you can't review them as one design.
The site you're reading. It's a framework-free static site with a strict Content Security Policy and no client-side secrets, checked in CI before it deploys.
Problem: the old version shipped an email-service token in browser JavaScript. I removed it and moved delivery to a provider-side form service.
Real-time communication between multiple users, built in Java with a MySQL database.
A 2D fighting game in Java Swing, built from core OOP concepts with a focus on clean, SOLID structure.
A browser music player for copyright-free tracks, built with plain HTML, CSS and JavaScript.
No projects match this filter yet.
More experiments and learning repositories are on my GitHub (opens in a new tab).
05 / architecture
The Terraform delivery flow I build toward on Azure. Each node says where it runs today. Solid nodes are implemented in my repositories, and dashed nodes are the intended next step. Select a node for details.
Change delivery · left to right
Scheduled drift detection · left to right
Supporting services
06 / pipeline explorer
Go through the stages a pull request passes before it can reach Azure. Pick a stage to see what it checks, what fails it, and example output.
Illustrative demo with example output. It is not connected to live CI data.
07 / learning
I learn by building something and writing it up. I don't list cloud certifications here because I haven't earned any yet.
University of Michigan via Coursera · completed June 2023.
Drift detector Level 2: a local-first CLI (aitdd) that reuses the
Level 1 drift engine and checks it produces identical reports. It's in a private repository while it's in progress.
Also on the list: human-approved remediation (specified, not built) and moving the landing-zone pipeline to OIDC behind an approval environment.
08 / contact
Hiring for DevOps, cloud or platform engineering, or want to talk Terraform? Send a message or reach me directly.
Terraform state is a record of what was deployed, not a guarantee of what exists now. A portal edit, a failed run or a policy override makes Azure diverge from code, and nobody notices until the next apply does something unexpected.
terraform plan -detailed-exitcode and show -json. It never runs apply.The live test was a VM created in the Azure Portal on purpose, detected in drift-detection run #44. The test VM has since been deleted.
Level 1 is released (level1-v1.0.0) and now in maintenance only. Human-approved remediation is specified but not built: no apply, approval environment or write permission exists. Level 2, a local-first CLI, is being developed in a private repository.
Environments built by copying resource blocks drift apart, and reviewers can't tell whether preprod and prod really share a design. A landing zone needs reusable building blocks and a repeatable way to deploy them.
azurerm modules: resource group, virtual network, subnet, public IP, Bastion, Key Vault, virtual machine, load balancer and application gateway.preprod and prod environment roots that compose the modules from tfvars maps using for_each.azurerm backend, one state key per environment.init, validate and plan. Apply runs only on main.The previous version of this site sent mail from the browser using an email-service token embedded in public JavaScript. Anyone could read it and send mail as me.
script-src 'self', no inline styles or scripts) and security headers for Netlify.