RVAS — Agentic Modernization

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.

04Day Estimated
22Challenges
04Tracks
03Demo Applications

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.

01 Run modernize assess to evaluate migration complexity and cloud-readiness gaps
02 Create AI-driven plans with modernize plan create and execute them automatically
03 Migrate a .NET Framework 4.8 app to .NET 10 ASP.NET Core with Azure Service Bus and Blob Storage
04 Migrate Spring Boot 2.x / Java 8 to Spring Boot 3.x / Java 21 with PostgreSQL and Blob Storage
05 Containerize both apps and deploy to Azure Container Apps using Terraform
06 Harden with Application Insights, Key Vault, and Managed Identity
07 Infuse Azure OpenAI vision (gpt-4.1-mini) with Managed Identity to auto-generate metadata on upload (stretch)
08 Modernize your own application with the help of AI-driven tools and expert guidance from Microsoft engineers
modernize — PhotoAlbum-Java
$ modernize assess .
→ Scanning codebase...
⚠ Java 8 → Java 21 migration required
⚠ Spring Boot 2.7 EOL — upgrade to 3.x
⚠ Oracle JDBC detected — replace with PostgreSQL
⚠ BLOB columns in DB — migrate to Blob Storage
→ 14 critical issues · 6 automated fixes
 
$ modernize plan create \
--goal "Migrate to Java 21, Spring Boot 3,
PostgreSQL and Azure Blob Storage"
✓ Plan created: 23 steps · ~2h estimated
 
$ modernize plan execute
✓ javax.* → jakarta.* namespace migrated
✓ pom.xml updated to Spring Boot 3.3.0
✓ Oracle JDBC replaced with PostgreSQL driver
✓ BlobService created using Azure SDK
Step 23/23 — BUILD SUCCESS
$

Prerequisites

VS Code
Required for the GitHub Copilot Modernization extension workflow
Docker Desktop
Required by Dev Containers and for building container images
GitHub Copilot Modernization
VS Code extension + modernize CLI — install from the VS Code Marketplace
GitHub CLI (gh) v2.45.0+
Required by the modernization CLI — authenticate with gh auth login
Azure CLI + Terraform
Active Azure subscription with permissions for Container Apps, SQL, Service Bus, and Blob Storage
Install Modernization CLI bash
# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/
microsoft/modernize-cli/main/scripts/install.sh | sh
source ~/.bashrc
 
# Windows
winget install GitHub.Copilot.modernization.agent
 
# Authenticate and launch
gh auth login
modernize
Clone with Submodules bash
git clone --recurse-submodules \
https://github.com/<org>/<repo>.git
 
# Verify submodules are populated
git submodule status
✓ a3f8c... Student/Resources/java/PhotoAlbum-Java
✓ 9d2e1... Student/Resources/dotnet/dotnet-migration...
 
# Verify CLI is ready
modernize --version
modernize v1.x.x

Azure services

Services you'll provision and integrate during the delivery.

Azure Container Apps
Azure Container Apps
Serverless container hosting with automatic scaling and built-in networking
CH 03 · 04
Azure Database for PostgreSQL
Azure DB for PostgreSQL
Managed PostgreSQL Flexible Server — Oracle replacement for PhotoAlbum
Java CH 02 · 03
Azure SQL Database
Fully managed relational database for ContosoUniversity with EF Core
.NET CH 02 · 03
Azure Blob Storage
Object storage for photos and teaching materials — replaces file system and DB BLOBs
CH 02 · 03
Azure Service Bus
Azure Service Bus
Cloud-native messaging — replaces MSMQ for the .NET notification service
.NET CH 02 · 03
Application Insights
Application Insights
Distributed tracing, live metrics, and structured logging for both apps
CH 04
Azure Key Vault
Azure Key Vault
Centralised secret management — no connection strings in code or config files
CH 04
Azure Container Registry
Container Registry
Store and manage container images; integrated with Container Apps via Managed Identity
CH 03
Azure OpenAI
Azure OpenAI
Vision model gpt-4.1-mini called with Managed Identity to auto-generate captions, alt text, and tags
CH 05

Challenges

Seven challenges, three parallel tracks. Your team can split — one team on Java, one on .NET, and one on your own customer application.

☕ Java Track
00
Setup CH — 00

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.

01
Assess CH — 01

Assess the Java App

Run modernize assess on PhotoAlbum. Identify Spring Boot 2→3 blockers, Oracle JDBC issues, and cloud-readiness gaps.

02
Modernize CH — 02

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.

03
Deploy CH — 03

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.

04
Data Migration CH — 04

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.

05
Observe & Secure CH — 05

Observe & Secure

Production hardening: Application Insights (Java agent), Azure Key Vault + Managed Identity.

06
Stretch · AI CH — 06

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.

🔷 .NET Track
00
Setup CH — 00

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.

01
Assess CH — 01

Assess the .NET App

Run modernize assess on ContosoUniversity. Identify MSMQ, System.Web, and cloud-readiness blockers before touching any code.

02
Modernize CH — 02

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.

03
Deploy CH — 03

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.

04
Data Migration CH — 04

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.

05
Observe & Secure CH — 05

Observe & Secure

Production hardening: Application Insights SDK, Azure Key Vault + Managed Identity.

06
Stretch · AI CH — 06

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.

🔷 .NET 8 Track (eShopOnWeb)
00
Setup CH — 00

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.

01
Assess CH — 01

Assess eShopOnWeb

Run modernize assess on eShopOnWeb. Identify Swashbuckle removal, TFM blockers, and EF Core 10 changes across all 5 projects.

02
Modernize CH — 02

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.

03
Deploy CH — 03

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.

04
Data Migration CH — 04

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.

05
Observe & Secure CH — 05

Observe & Secure

Application Insights distributed tracing across Web + PublicApi. Azure Key Vault + Managed Identity — zero plaintext secrets.

06
Stretch · AI CH — 06

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.

☕ Java Track — Coach Notes
00
Setup COACH — 00

Prerequisites
Coach Notes

Expected environment state, Oracle Docker RAM requirements (4 GB), submodule pitfalls, and how to verify the modernize CLI is correctly installed.

01
Assess COACH — 01

Assess — Coach Notes

Expected assessment findings: Spring Boot 2→3 blockers, Oracle JDBC, BLOB columns. Debrief discussion questions and key talking points.

02
Modernize COACH — 02

Modernize — Coach Notes

Key pom.xml changes, javax→jakarta migration, PostgreSQL dialect, Azure Blob SDK. Pitfalls table and common student errors.

03
Deploy COACH — 03

Deploy — Coach Notes

Terraform checklist for PostgreSQL Flexible Server, Blob Storage, and Container Apps. Naming conventions and common Terraform pitfalls.

04
Data Migration COACH — 04

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.

05
Observe & Secure COACH — 05

Observe & Secure — Coach Notes

App Insights Java agent Dockerfile snippet and Key Vault + Managed Identity steps.

06
Stretch · AI COACH — 06

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/.

🔷 .NET Track — Coach Notes
00
Setup COACH — 00

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.

01
Assess COACH — 01

Assess — Coach Notes

Expected findings: MSMQ, System.Web, packages.config, Global.asax, Web.config, local FS blockers. Debrief discussion questions.

02
Modernize COACH — 02

Modernize — Coach Notes

SDK-style csproj conversion, System.Web removal, Global.asax→Program.cs, MSMQ→Service Bus, local FS→Blob, EF Core. Pitfalls table.

03
Deploy COACH — 03

Deploy — Coach Notes

Terraform checklist for Azure SQL, Service Bus, Blob Storage, and Container Apps. Naming conventions and common Terraform pitfalls.

04
Data Migration COACH — 04

Migrate the Database — Coach Notes

DMS setup, policy exemption guidance, target SQL auth caveats, and troubleshooting notes for the .NET database migration challenge.

05
Observe & Secure COACH — 05

Observe & Secure — Coach Notes

App Insights SDK setup and Key Vault + Managed Identity coaching notes for the .NET track.

06
Stretch · AI COACH — 06

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/.

🏢 Customer Track — Coach Notes
🔷 .NET 8 Track — Coach Notes
00
Setup COACH — 00

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.

01
Assess COACH — 01

Assess — Coach Notes

Expected top findings: Swashbuckle critical, TFM bump, package cascade. Mini-lecture on Central Package Management risks. Debrief discussion questions.

02
Modernize COACH — 02

Modernize — Coach Notes

Suggested modernize plan goal, exact Directory.Packages.props version table, Swashbuckle → OpenAPI + Scalar replacement snippet, common pitfalls table.

03
Deploy COACH — 03

Deploy — Coach Notes

Dockerfile pitfalls (build context), Service Bus singleton pattern, Blob SAS URL patterns, Terraform checklist for ACA + SQL + Storage + Service Bus.

04
Data Migration COACH — 04

Migrate the Database — Coach Notes

Reference dotnet ef database update commands for both DbContexts, expected seed row counts, Azure SQL firewall pitfalls.

05
Observe & Secure COACH — 05

Observe & Secure — Coach Notes

Application Insights setup, Key Vault + Managed Identity Terraform snippets, DefaultAzureCredential chain explanation, role propagation wait times.

06
Stretch · AI COACH — 06

Infuse AI — Coach Notes

Reference Terraform for Azure OpenAI + RBAC, CatalogItemAiService implementation with graceful degradation, common pitfalls, and Blazor Web App migration stretch note.