This repository is a progressive AZ-204 demo project.
After each AZ-204 learning path, it demonstrates how that knowledge can be applied in a real project that evolves step by step.
It was created because Microsoft has unfortunately removed most demonstrations from the course.
The goal is to give instructors and students a practical, cumulative demo they can run and learn from.
Each Learning Path (LP) builds on the previous one using the same shared app (ConferenceHub/).
You are very welcome to use this project for teaching, studying, and hands-on practice.
If you find problems or improvement opportunities, please:
- Open an issue
- Submit a pull request
- Git
- .NET SDK 9
- Azure CLI (
az) logged in - Bash (macOS/Linux)
- Docker (required for LP5
lp/05-container, and Docker must be running, or the step will fail)
ConferenceHub/: shared ASP.NET Core web app used across all LPs.LearningPath/<NN-Name>/create.sh: deploy script for each LP.LearningPath/04-Cosmos/migrate.sh: seed migration to Cosmos DB.full-deploy.sh: runs all LPs in sequence.cleanup.sh: deletes deployed Azure resources and purges soft-deleted services.
- LP1 (
lp/01-init): baseline App Service deployment for ConferenceHub. - LP2 (
lp/02-functions): Azure Functions for registration confirmation flow. - LP3 (
lp/03-storage): Blob Storage for slide upload/view. - LP4 (
lp/04-cosmos): Cosmos DB for sessions/registrations + migration step. - LP5 (
lp/05-container): container deployment variant. - LP6 (
lp/06-auth): Entra ID auth + role-based authorization. - LP7 (
lp/07-keyvault): secrets moved to Key Vault with managed identity/RBAC. - LP8: intentionally omitted.
- LP9 (
lp/09-events): Event Grid/Event Hub event-driven processing. - LP10 (
lp/10-messages): Service Bus + Queue Storage messaging workflows. - LP11 (
lp/11-appinsight): Application Insights observability and tracing.
Clone and run LPs in order:
git clone https://github.com/theDiverDK/AZ-204-Demo.git
cd AZ-204-Demo
git fetch --all --prunePer LP, switch branch and run the script:
Use 'git branch' to see what each LearningPath is called
git switch lp/01-init || git switch --track origin/lp/01-init
cd LearningPath/01-Init
./create.sh
cd ../..Use this to deploy all LPs in sequence automatically:
./full-deploy.shWhat it does:
- Runs LP branches in order (
01, 02, 03, 04, 05, 06, 07, 09, 10, 11). - Executes each LP
create.sh. - Runs LP4
migrate.sh. - Opens browser once at the end.
Use this to remove demo resources when finished, takes some time due to deleting CosmosDB is slow, and purging the KeyVault:
./cleanup.shWhat it does:
- Deletes the resource group.
- Waits for deletion completion (Cosmos DB can take >15 minutes).
- Purges soft-deleted Key Vault and App Configuration where applicable.
- LP scripts are cumulative: run LPs in order.
- Avoid pull requests between LP branches and
main; differences are intentional for teaching progression.