Manual vs. automated why both exist
Both approaches create the exact same Azure environment — a resource group, a PostgreSQL server and database, a container registry, an App Service plan hosting three container web apps (API, UI, and the tutorial site), and (for CI/CD) a passwordless GitHub identity. They just get there differently.
Each script is a fixed list of az commands, run top to bottom, in order. There's no memory of what already exists beyond whatever's actually sitting in Azure — run a script twice and it tries to create everything twice (some commands then fail because the resource already exists). Nothing previews what would happen before it happens. This is exactly how most people first learn a cloud platform: one command, one resource, cause and effect you can see immediately.
Terraform describes the end state you want, keeps a record (state) of what it already built, and previews every change before making it. It's more setup up front, but it scales to a team, catches drift, and tears down cleanly — the trade-offs covered in detail on the Terraform tutorial's “what problem does Terraform solve?” section.
The scripts, script by script structure
Every script below lives inside utility_scripts/, as a matching pair — a .ps1 file for PowerShell and a .sh file for Bash, doing the same job. Both take a -UserName / --user-name parameter (default dzierzon) used to build resource names, the same pattern as Terraform's user_name variable.
| Script | What it's for, in plain terms |
|---|---|
| az_create_resources | Creates the resource group, the PostgreSQL server and database, the container registry, and all three container web apps, then loads the starting database tables. (dig deeper) |
| az_deploy | Builds all three container images in the registry, points the web apps at them, restarts them, and waits for each to report healthy. (dig deeper) |
| az_setup_github_oidc | Creates a passwordless identity so GitHub Actions can deploy code, the manual equivalent of Terraform's github_oidc.tf. (dig deeper) |
| az_delete_resources | Deletes the entire resource group and everything inside it, cleanly and safely. (dig deeper) |
A sensible order where to start
Unlike Terraform, these scripts don't check dependencies for you — running one out of order just fails with an Azure error about a resource that doesn't exist yet. This is the order they're meant to run in.
- az_create_resources — provisions everything: resource group, database, registry, all three web apps.
- az_deploy — builds all three images and deploys them onto the web apps that now exist.
- az_setup_github_oidc — optional, only needed once, to let GitHub Actions deploy automatically afterward.
- az_delete_resources — whenever you're done, tears everything back down.
Pick a script to learn go deeper
az_create_resources
Provisions the resource group, database, registry, and all three web apps; loads starting data.
Script 2 of 4az_deploy
Builds all three container images and deploys them to the existing web apps.
Script 3 of 4az_setup_github_oidc
Creates a passwordless GitHub Actions deployment identity.
Script 4 of 4az_delete_resources
Deletes the resource group and everything inside it.