Modernize legacy apps with GitHub Copilot and Azure
Learn by transforming two legacy applications into production-grade cloud-native systems using GitHub Copilot.
Win by modernizing one of your own applications with AI-driven tools and guidance from Microsoft engineers.
What you'll
accomplish
Use GitHub Copilot Modernization tools to assess, plan, and execute migrations on real legacy codebases — from first assessment to a running container in Azure.
modernize assess to
evaluate migration complexity and cloud-readiness gaps
modernize plan create and execute them
automatically
gpt-4.1-mini) with Managed Identity to
auto-generate metadata on upload (stretch)
your own application with the help of
AI-driven tools and expert guidance from
Microsoft
engineers
Prerequisites
modernize CLI — install from the VS
Code Marketplacegh auth loginAzure services
Services you'll provision and integrate during the delivery.
gpt-4.1-mini
called with Managed Identity to auto-generate captions, alt text, and tagsChallenges
Seven challenges, three parallel tracks. Your team can split — one team on Java, one on .NET, and one on your own customer application.
Prerequisites
(Java)
Configure your workstation for the Java track: GitHub Copilot Modernization CLI, Docker, Azure CLI, Terraform, GitHub CLI. Initialise the PhotoAlbum submodule and optionally deploy to an Azure VM to see the legacy state.
Assess the Java App
Run modernize assess on PhotoAlbum.
Identify Spring Boot 2→3 blockers, Oracle JDBC issues, and cloud-readiness gaps.
Modernize the Java App
Migrate PhotoAlbum from Spring Boot 2.7 / Java 8 / Oracle to Spring Boot 3.x / Java 21 / PostgreSQL + Azure Blob Storage. Tackle javax→jakarta and SQL dialect migration.
Containerize & Deploy (Java)
Package PhotoAlbum as a container image, push to Azure Container Registry, and deploy to Azure Container Apps via Terraform. Provision PostgreSQL Flexible Server and Blob Storage.
Migrate the Database to PostgreSQL
Move PhotoAlbum data from Oracle to Azure Database for PostgreSQL Flexible Server and validate row parity and app behavior after cutover.
Observe & Secure
Production hardening: Application Insights (Java agent), Azure Key Vault + Managed Identity.
Infuse AI into PhotoAlbum
Call Azure OpenAI gpt-4.1-mini (vision)
from the upload pipeline using Managed Identity to auto-generate captions, alt text,
and tags for every photo.
Prerequisites
(.NET)
Configure your workstation for the .NET track: GitHub Copilot Modernization CLI, Docker, Azure CLI, Terraform, GitHub CLI. Initialise the ContosoUniversity submodule and optionally deploy to a Windows VM to see the legacy state.
Assess the .NET App
Run modernize assess on ContosoUniversity.
Identify MSMQ, System.Web, and cloud-readiness blockers before touching any code.
Modernize the .NET App
Migrate ContosoUniversity from .NET Framework 4.8 / ASP.NET MVC 5 / MSMQ to .NET 10 / ASP.NET Core / Azure Service Bus + Blob Storage. Remove System.Web and convert to SDK-style csproj.
Containerize & Deploy (.NET)
Package ContosoUniversity as a container image, push to Azure Container Registry, and deploy to Azure Container Apps via Terraform. Provision Azure SQL, Service Bus, and Blob Storage.
Migrate the Database to Azure SQL
Move the legacy ContosoUniversity data from LocalDB / SQL Express into Azure SQL Database, then verify the deployed app reads the migrated rows.
Observe & Secure
Production hardening: Application Insights SDK, Azure Key Vault + Managed Identity.
Infuse AI into ContosoUniversity
Call Azure OpenAI gpt-4.1-mini (vision)
from the Course Create/Edit flow using Managed Identity to auto-suggest descriptions,
learning objectives, and accessible alt text.
Prerequisites
(.NET 8)
Configure your workstation for the .NET 8 track: install the .NET 10 SDK, verify GitHub Copilot Modernization CLI, Docker, Azure CLI, and Terraform. Initialise the eShopOnWeb submodule.
Assess eShopOnWeb
Run modernize assess on eShopOnWeb.
Identify Swashbuckle removal, TFM blockers, and EF Core 10 changes across all 5 projects.
Modernize to .NET 10
Bump all 5 projects to net10.0 via
Directory.Packages.props. Replace Swashbuckle
with Microsoft.AspNetCore.OpenApi + Scalar.
Fix EF Core 10 and Blazor WASM breaking changes.
Containerize & Deploy (eShopOnWeb)
Add Azure Service Bus (order events) and Azure Blob Storage (product images). Update Dockerfiles to .NET 10 base images. Deploy Web + PublicApi to Azure Container Apps via Terraform.
Migrate the Database to Azure SQL
Apply EF Core migrations for both CatalogContext
and AppIdentityDbContext against Azure SQL.
Validate seed data and end-to-end order flow.
Observe & Secure
Application Insights distributed tracing across Web + PublicApi. Azure Key Vault + Managed Identity — zero plaintext secrets.
Infuse AI into eShopOnWeb
Call Azure OpenAI gpt-4.1-mini (vision)
from the catalog admin to auto-generate product descriptions, tags, and accessible alt text
using Managed Identity.
Coach guide
Facilitation notes, expected outputs, and pitfall tips for each challenge. Toggle with Shift+C.
Prerequisites
Coach Notes
Expected environment state, Oracle Docker RAM requirements (4 GB), submodule pitfalls, and how to verify the modernize CLI is correctly installed.
Assess — Coach Notes
Expected assessment findings: Spring Boot 2→3 blockers, Oracle JDBC, BLOB columns. Debrief discussion questions and key talking points.
Modernize — Coach Notes
Key pom.xml changes, javax→jakarta migration, PostgreSQL dialect, Azure Blob SDK. Pitfalls table and common student errors.
Deploy — Coach Notes
Terraform checklist for PostgreSQL Flexible Server, Blob Storage, and Container Apps. Naming conventions and common Terraform pitfalls.
Migrate the Database — Coach Notes
Mini-lecture on Oracle→PostgreSQL differences, Ora2Pg workflow with troubleshooting table,
common pitfalls, and step-by-step reference implementation with ora2pg.conf template.
Observe & Secure — Coach Notes
App Insights Java agent Dockerfile snippet and Key Vault + Managed Identity steps.
Infuse AI — Coach Notes
Reference Terraform for Azure OpenAI + RBAC, azure-ai-openai
snippets, common pitfalls table, and a working end-to-end implementation under
Coach/Solutions/java/.
Prerequisites
Coach Notes
Expected environment state, expected build failure on Linux/macOS for .NET Framework 4.8, and how to verify the modernize CLI is on PATH.
Assess — Coach Notes
Expected findings: MSMQ, System.Web, packages.config, Global.asax, Web.config, local FS blockers. Debrief discussion questions.
Modernize — Coach Notes
SDK-style csproj conversion, System.Web removal, Global.asax→Program.cs, MSMQ→Service Bus, local FS→Blob, EF Core. Pitfalls table.
Deploy — Coach Notes
Terraform checklist for Azure SQL, Service Bus, Blob Storage, and Container Apps. Naming conventions and common Terraform pitfalls.
Migrate the Database — Coach Notes
DMS setup, policy exemption guidance, target SQL auth caveats, and troubleshooting notes for the .NET database migration challenge.
Observe & Secure — Coach Notes
App Insights SDK setup and Key Vault + Managed Identity coaching notes for the .NET track.
Infuse AI — Coach Notes
Reference Terraform for Azure OpenAI + RBAC, Azure.AI.OpenAI
snippets, common pitfalls table, and a working end-to-end implementation under
Coach/Solutions/dotnet/.
Prerequisites
Coach Notes
Expected environment state, .NET 10 SDK check, submodule pin details
(NimblePros/eShopOnWeb @ a34eda5),
and the global.json vs
Directory.Packages.props discussion
point.
Assess — Coach Notes
Expected top findings: Swashbuckle critical, TFM bump, package cascade. Mini-lecture on Central Package Management risks. Debrief discussion questions.
Modernize — Coach Notes
Suggested modernize plan goal, exact Directory.Packages.props
version table, Swashbuckle → OpenAPI + Scalar replacement snippet, common pitfalls table.
Deploy — Coach Notes
Dockerfile pitfalls (build context), Service Bus singleton pattern, Blob SAS URL patterns, Terraform checklist for ACA + SQL + Storage + Service Bus.
Migrate the Database — Coach Notes
Reference dotnet ef database update commands
for both DbContexts, expected seed row counts, Azure SQL firewall pitfalls.
Observe & Secure — Coach Notes
Application Insights setup, Key Vault + Managed Identity Terraform snippets,
DefaultAzureCredential chain explanation,
role propagation wait times.
Infuse AI — Coach Notes
Reference Terraform for Azure OpenAI + RBAC, CatalogItemAiService
implementation with graceful degradation, common pitfalls, and Blazor Web App migration stretch
note.