Guida Microsoft Aspire
Guida Microsoft Aspire: Sviluppare Applicazioni Cloud-Native Distribuite con .NET
Indice della Guida Microsoft Aspire
- Introduzione
- Storia e Nascita di Microsoft Aspire
- Cos’è Microsoft Aspire
- Architettura e Componenti Fondamentali
- Prerequisiti e Setup dell’Ambiente di Sviluppo
- Creare la Prima Applicazione Aspire da Zero
- Integrazioni: Database, Caching, Messaggistica e Storage
- Service Discovery e Comunicazione tra Servizi
- Dashboard Aspire e Osservabilità
- Caso d’Uso Pratico: API RESTful con PostgreSQL e Redis
- Deployment su Azure Container Apps
- Deployment su Kubernetes
- Pro e Contro di Microsoft Aspire
- Conclusioni: L’Importanza della Formazione Continua
1. Introduzione
Lo sviluppo di applicazioni cloud-native distribuite rappresenta oggi una delle sfide più complesse per i team di sviluppo enterprise. La gestione di microservizi, container, orchestrazione, service discovery, telemetria e resilienza richiede competenze multidisciplinari e una curva di apprendimento significativa. Microsoft Aspire nasce proprio per rispondere a questa complessità, offrendo uno stack tecnologico opinionato che semplifica radicalmente la creazione, l’esecuzione e il deployment di applicazioni distribuite nell’ecosistema .NET.
Questa guida è rivolta a sviluppatori .NET, ingegneri informatici e laureati in informatica, sia junior che senior, che desiderano apprendere come utilizzare Aspire per costruire sistemi scalabili, osservabili e production-ready.
2. Storia e Nascita di Microsoft Aspire
Microsoft Aspire è stato annunciato per la prima volta nel novembre 2023 durante la conferenza .NET Conf, in concomitanza con il lancio di .NET 8. Il progetto rappresenta l’evoluzione naturale di Project Tye, un esperimento della community iniziato nel 2019 per semplificare lo sviluppo di applicazioni distribuite.
La General Availability (GA) di Aspire è stata raggiunta il 21 maggio 2024, con il rilascio di Visual Studio 2022 17.10. Da quel momento, il framework ha visto un’evoluzione costante: la versione 9.1 è stata rilasciata il 25 febbraio 2025 insieme alla prima preview di .NET 10, mentre la versione 13 è stata annunciata l’11 novembre 2025 durante .NET Conf 2025, introducendo supporto esteso per Python, JavaScript e integrazioni AI avanzate.
Il rebranding da “.NET Aspire” ad “Aspire” riflette l’ambizione del progetto di diventare una soluzione poliglotta per lo sviluppo cloud-native, pur mantenendo .NET come piattaforma principale.
3. Cos’è Microsoft Aspire
Aspire è uno stack cloud-native opinionato che semplifica il flusso di sviluppo con controllo code-first, modularità e osservabilità per applicazioni distribuite. È uno strumento di orchestrazione poliglotta per costruire, eseguire, debuggare e deployare applicazioni distribuite.
Caratteristiche Chiave
Opinionato: Microsoft ha preso decisioni architetturali precise su come configurare i vari componenti dello stack tecnologico, pur mantenendo flessibilità per personalizzazioni.
Cloud-Ready: Le applicazioni create sono immediatamente pronte per il deployment in ambienti cloud come Azure, AWS o infrastrutture on-premises.
Osservabile: Include OpenTelemetry integrato per metriche, trace distribuite e logging, fornendo visibilità completa sul comportamento dell’applicazione.
Resiliente: Supporta automaticamente retry, circuit breaker e timeout configurabili per gestire failure in modo elegante.
4. Architettura e Componenti Fondamentali
L’architettura di Aspire si basa su tre pilastri fondamentali:
4.1 AppHost Project
L’AppHost è il progetto orchestratore che definisce il modello applicativo. Qui si configurano tutti i servizi, i container, i database e le dipendenze dell’applicazione distribuita.
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithLifetime(ContainerLifetime.Persistent);
var database = postgres.AddDatabase("catalogdb");
var api = builder.AddProject<Projects.CatalogApi>("catalogapi")
.WithReference(database);
builder.Build().Run();
4.2 ServiceDefaults
Il progetto ServiceDefaults definisce configurazioni standard riutilizzabili per tutti i servizi:
public static IHostApplicationBuilder AddServiceDefaults(
this IHostApplicationBuilder builder)
{
builder.ConfigureOpenTelemetry();
builder.AddDefaultHealthChecks();
builder.Services.AddServiceDiscovery();
builder.Services.ConfigureHttpClientDefaults(http =>
{
http.AddStandardResilienceHandler();
http.AddServiceDiscovery();
});
return builder;
}
4.3 Hosting Integrations
Le hosting integration estendono l’interfaccia IDistributedApplicationBuilder per modellare risorse come database, code di messaggi e servizi cloud.
4.4 Client Integrations
Le client integration configurano librerie client esistenti per connettersi alle hosting integration, gestendo dependency injection, configurazione schema, health check e telemetria.
5. Prerequisiti e Setup dell’Ambiente di Sviluppo – Guida Microsoft Aspire
Requisiti Minimi
- .NET 8 SDK o superiore (.NET 9 o .NET 10 Preview per versioni recenti)
- Visual Studio 2022 17.9+ o Visual Studio Code con C# Dev Kit
- Docker Desktop o Podman per l’esecuzione dei container
- Azure Developer CLI (azd) per il deployment su Azure
Installazione Workload Aspire
# Aggiorna e installa il workload Aspire
dotnet workload update
dotnet workload install aspire
Per Visual Studio 2022, il workload Aspire è incluso automaticamente nel carico di lavoro “ASP.NET and web development” dalla versione 17.10 in poi.
6. Creare la Prima Applicazione Aspire da Zero
Step 1: Creazione del Progetto
# Crea una nuova solution Aspire
dotnet new aspire-starter -n MyFirstAspireApp
cd MyFirstAspireApp
La struttura generata include:
- MyFirstAspireApp.AppHost: Progetto orchestratore
- MyFirstAspireApp.ServiceDefaults: Configurazioni standard
- MyFirstAspireApp.ApiService: Web API di esempio
- MyFirstAspireApp.Web: Frontend Blazor
Step 2: Esecuzione Locale
cd MyFirstAspireApp.AppHost
dotnet run
Il comando avvia automaticamente:
- Tutti i progetti referenziati
- Container Docker necessari
- Aspire Dashboard (generalmente su https://localhost:5001)
Step 3: Esplorazione della Dashboard
La Dashboard Aspire offre visualizzazione in tempo reale di:
- Resources: Tutti i servizi, container e dipendenze
- Logs: Aggregazione dei log di tutti i componenti
- Traces: Trace distribuite con OpenTelemetry
- Metrics: Metriche di performance e utilizzo risorse
7. Integrazioni: Database, Caching, Messaggistica e Storage
Aspire offre un ecosistema ricco di integrazioni pronte all’uso.
7.1 Database
PostgreSQL
// AppHost
var postgres = builder.AddPostgres("postgres")
.WithPgAdmin()
.WithLifetime(ContainerLifetime.Persistent);
var db = postgres.AddDatabase("mydb");
var api = builder.AddProject<Projects.Api>("api")
.WithReference(db);
// Client Project - Program.cs
builder.AddNpgsqlDataSource("mydb");
// Utilizzo via DI
public class ProductRepository
{
private readonly NpgsqlDataSource _dataSource;
public ProductRepository(NpgsqlDataSource dataSource)
{
_dataSource = dataSource;
}
public async Task<List<Product>> GetAllAsync()
{
await using var connection = await _dataSource.OpenConnectionAsync();
// Query PostgreSQL
}
}
SQL Server
var sqlServer = builder.AddSqlServer("sql")
.AddDatabase("catalogdb");
7.2 Caching – Redis
// AppHost
var cache = builder.AddRedis("cache")
.WithRedisInsight()
.WithLifetime(ContainerLifetime.Persistent);
builder.AddProject<Projects.Frontend>("frontend")
.WithReference(cache);
// Client Project
builder.AddRedisOutputCache("cache");
// In Program.cs
app.UseOutputCache();
// In un controller
[OutputCache(Duration = 60)]
public IActionResult GetData()
{
return Ok(data);
}
7.3 Messaggistica
RabbitMQ
// AppHost
var messaging = builder.AddRabbitMQ("messaging")
.WithManagementPlugin();
// Client
builder.AddRabbitMQClient("messaging");
Azure Service Bus
var serviceBus = builder.AddAzureServiceBus("messaging");
7.4 Storage
Azure Blob Storage
var storage = builder.AddAzureStorage("storage")
.RunAsEmulator();
var blobs = storage.AddBlobs("blobs");
8. Service Discovery e Comunicazione tra Servizi
Aspire gestisce automaticamente il service discovery, eliminando la necessità di hard-coded URL.
// AppHost - definizione servizi
var api = builder.AddProject<Projects.CatalogApi>("catalogapi");
var frontend = builder.AddProject<Projects.Frontend>("frontend")
.WithReference(api);
// Frontend - utilizzo del servizio
public class CatalogService
{
private readonly HttpClient _httpClient;
public CatalogService(IHttpClientFactory factory)
{
// Service discovery automatico tramite nome logico
_httpClient = factory.CreateClient();
_httpClient.BaseAddress = new Uri("http://catalogapi");
}
public async Task<List<Product>> GetProductsAsync()
{
return await _httpClient.GetFromJsonAsync<List<Product>>(
"/api/products");
}
}
9. Dashboard Aspire e Osservabilità – Guida Microsoft Aspire
La Dashboard Aspire è accessibile automaticamente durante l’esecuzione locale e può essere deployata anche in produzione.
Funzionalità Chiave
- Dependency Graph: Visualizzazione delle relazioni tra servizi
- Structured Logs: Aggregazione intelligente con filtri avanzati
- Distributed Tracing: Trace end-to-end delle richieste
- Metrics: CPU, memoria, richieste HTTP, query database
- Health Status: Stato di salute di ogni componente
10. Caso d’Uso Pratico: API RESTful con PostgreSQL e Redis
Costruiamo un’API per la gestione di un catalogo prodotti con caching Redis.
Step 1: Setup AppHost
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("postgres")
.WithLifetime(ContainerLifetime.Persistent);
var catalogDb = postgres.AddDatabase("catalogdb");
var redis = builder.AddRedis("cache")
.WithLifetime(ContainerLifetime.Persistent);
var catalogApi = builder.AddProject<Projects.CatalogApi>("catalogapi")
.WithReference(catalogDb)
.WithReference(redis);
builder.Build().Run();
Step 2: API Implementation
// Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.AddServiceDefaults();
builder.AddNpgsqlDataSource("catalogdb");
builder.AddRedisOutputCache("cache");
var app = builder.Build();
app.MapDefaultEndpoints();
app.UseOutputCache();
app.MapGet("/api/products", async (NpgsqlDataSource db) =>
{
await using var conn = await db.OpenConnectionAsync();
await using var cmd = conn.CreateCommand();
cmd.CommandText = "SELECT id, name, price FROM products";
var products = new List<Product>();
await using var reader = await cmd.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
products.Add(new Product
{
Id = reader.GetInt32(0),
Name = reader.GetString(1),
Price = reader.GetDecimal(2)
});
}
return Results.Ok(products);
})
.CacheOutput(p => p.Expire(TimeSpan.FromMinutes(5)));
app.Run();
record Product(int Id, string Name, decimal Price);
Step 3: Test Locale
dotnet run --project CatalogApi.AppHost
La prima chiamata a /api/products interroga PostgreSQL; le successive per 5 minuti utilizzano Redis cache.
11. Deployment su Azure Container Apps – Guida Microsoft Aspire
Azure Container Apps (ACA) è una piattaforma fully-managed per eseguire microservizi e applicazioni containerizzate su una piattaforma serverless.
Step-by-Step Deployment
# Login ad Azure
az login
# Inizializza Azure Developer CLI
azd init
# Deploy completo (provisioning + deployment)
azd up
Il comando azd up esegue automaticamente:
- Provisioning di Resource Group, Container Registry, Log Analytics, Container Apps Environment
- Build dei progetti come container images
- Push delle immagini su Azure Container Registry
- Deployment su Azure Container Apps
Accesso all’Applicazione Deployata
Dopo il deployment, azd fornisce:
- URL pubblici dei servizi
- Link alla Dashboard Aspire deployata
- Link al portale Azure per monitoring
12. Deployment su Kubernetes
Per deployment su Kubernetes si utilizza lo strumento open-source Aspir8.
Installazione Aspir8
dotnet tool install -g aspirate
Workflow Deployment
# Inizializza Aspir8
cd MyApp.AppHost
aspirate init -cr myregistry.azurecr.io -ct latest
# Genera manifest Kubernetes
aspirate generate --image-pull-policy Always
# Apply su cluster
kubectl config use-context my-cluster
aspirate apply -k my-cluster
Aspir8 genera automaticamente:
- Deployment YAML
- Service definitions
- ConfigMaps e Secrets
- Persistent Volume Claims per database
13. Pro e Contro di Microsoft Aspire
Vantaggi
Produttività Accelerata: I nuovi sviluppatori possono avere l’intero sistema in esecuzione localmente in meno di un’ora, rispetto ai giorni necessari per configurare manualmente microservizi, database e code.
Osservabilità Integrata: Telemetria, logging e tracing distribuiti configurati automaticamente senza codice aggiuntivo.
Standardizzazione: ServiceDefaults garantisce configurazioni consistenti su tutti i servizi.
Resilienza Built-in: Retry automatici, circuit breaker e health check preconfigurati.
Developer Experience: Dashboard unificata per monitoraggio in tempo reale durante lo sviluppo.
Deployment Semplificato: Integrazione nativa con Azure Developer CLI e supporto Kubernetes tramite Aspir8.
Svantaggi
Vendor Lock-in Parziale: Aspire è progettato per lavorare strettamente con Azure, quindi le aziende che utilizzano altre piattaforme cloud potrebbero incontrare limitazioni o difficoltà di integrazione.
Curva di Apprendimento: Richiede comprensione di concetti distribuiti, orchestrazione e containerizzazione.
Monorepo Requirement: Tutti i progetti devono essere in un’unica solution, ma in pratica i team spesso lavorano su repository multipli.
Maturità del Tooling: Essendo un progetto relativamente nuovo, alcune feature sono ancora in evoluzione.
Overhead per Progetti Semplici: Per applicazioni monolitiche o con pochi servizi, l’overhead potrebbe non giustificare i benefici.
14. Conclusioni: L’Importanza della Formazione Continua
L’ecosistema .NET evolve rapidamente e tecnologie come Microsoft Aspire rappresentano un cambio di paradigma significativo nello sviluppo cloud-native. Aspire semplifica notevolmente la complessità intrinseca delle architetture distribuite, ma richiede competenze aggiornate per essere sfruttato efficacemente.
La formazione continua del team IT è l’unico modo per mantenere le persone aggiornate e produttive sui progetti, garantendo l’utilizzo di stack di sviluppo moderni e competitivi. Investire nella crescita professionale del team significa ridurre il time-to-market, migliorare la qualità del codice e aumentare la capacità di innovazione dell’organizzazione.
Opportunità Formative con Innovaformazione
Per approfondire Microsoft Aspire e le tecnologie cloud-native .NET, Innovaformazione offre percorsi formativi specializzati:
- Corso Microsoft Aspire attivabile su richiesta per le aziende
- Modalità: Online in classe virtuale
- Calendario: Flessibile e concordabile in base alle esigenze aziendali
- Accesso ai fondi Fondimpresa: Possibilità di ottenere la formazione gratuitamente attraverso progetti formativi finanziati, con supporto completo per l’intero iter
Scopri il catalogo completo dei corsi sul sito QUI.
INFO: info@innovaformazione.net – TEL. 3471012275 (Dario Carrassi)
Investire nella formazione significa investire nel futuro tecnologico della vostra organizzazione.
Per altri articoli tecnici sul mondo IT consigliamo di navigare sul nostro blog QUI.
Vuoi essere ricontattato? Lasciaci il tuo numero telefonico e la tua email, ti richiameremo nelle 24h:
Articoli correlati
Guida Microsoft Internet Information Server IIS
Lavoro Enel Logistica Potenza
Guida Sviluppo videogame Unity 3D
Cosa sono SAP Work Center
Come implementare i Diffusion Language Models DLM
