Configurazione di Azure App Service
Una volta distribuita l’applicazione, il passo successivo è configurare i vari aspetti di Azure App Service per assicurarti che funzioni in modo ottimale e sicuro. In questa sezione vedremo domini personalizzati, autenticazione e impostazioni dell’applicazione.
Configurare domini personalizzati
Per impostazione predefinita, il tuo App Service è accessibile tramite un URL come your-app-name.azurewebsites.net. Per le applicazioni in produzione, probabilmente vorrai usare il tuo nome di dominio. Ecco come configurare un dominio personalizzato:
- Acquista un dominio da un registrar se non ne hai già uno
- Nel tuo App Service, vai a "Domini personalizzati" nella barra laterale sinistra
- Fai clic su "Aggiungi dominio personalizzato"
- Inserisci il tuo nome di dominio (ad es.,
myapp.example.com) - Segui le istruzioni per verificare la proprietà del dominio
- Dovrai aggiungere un record
TXToCNAMEnelle impostazioni DNS

Per i domini apex (come example.com senza www), dovrai creare un record A che punti all’indirizzo IP del tuo App Service. Puoi trovare questo indirizzo IP nella pagina di configurazione del dominio personalizzato.
Puoi anche gestire i domini personalizzati usando l’Azure CLI:
# Add a custom domain
az webapp config hostname add --webapp-name MyWebApp --resource-group MyResourceGroup --hostname www.example.com
Associazione di certificati SSL
Per applicazioni sicure, in particolare quelle che gestiscono dati sensibili, è essenziale abilitare HTTPS. Azure App Service semplifica questa operazione fornendo certificati gestiti gratuiti oppure consentendoti di caricare i tuoi.
Per aggiungere un certificato SSL:
- Nel tuo App Service, vai a "Impostazioni TLS/SSL"
- Seleziona "Certificati con chiave privata"
- Scegli una delle seguenti opzioni:
- Crea un certificato gestito gratuito di App Service
- Importa un certificato di App Service
- Carica un certificato PFX
- Una volta aggiunto il certificato, vai su "Binding"
- Aggiungi un binding SSL per il tuo dominio personalizzato
Per le applicazioni dati che gestiscono informazioni sensibili, ti consiglio di abilitare la modalità solo HTTPS per garantire che tutto il traffico sia crittografato:
- In "Impostazioni TLS/SSL", vai alla sezione "Solo HTTPS"
- Attiva l’interruttore su "On"
- Fai clic su "Save"
Configurare autenticazione e autorizzazione
Molte applicazioni dati richiedono l’autenticazione degli utenti per controllare l’accesso a dati o funzionalità sensibili. Azure App Service offre opzioni di autenticazione integrate che possono evitarti di implementare la logica di autenticazione nel codice.
Per configurare l’autenticazione:
- Nel tuo App Service, vai a "Authentication" nella barra laterale sinistra
- Fai clic su "Add identity provider"
- Scegli il tuo provider di identità:
- Microsoft (Azure AD)
- GitHub
- OpenID Connect
- Configura le impostazioni del provider
- Imposta gli URL di reindirizzamento e le configurazioni dell’archivio token

Per le applicazioni dati enterprise, Azure Active Directory è spesso la scelta preferita perché si integra con le identità aziendali esistenti e supporta funzionalità come accesso condizionale e autenticazione a più fattori.
Puoi anche configurare restrizioni di autorizzazione per controllare chi può accedere alla tua applicazione:
- Nelle impostazioni di Authentication, seleziona "Edit" accanto al tuo provider di identità
- In "Restrict access", scegli una delle seguenti opzioni:
- Consenti richieste non autenticate
- Richiedi autenticazione
- Consenti richieste anonime (nessuna azione)
- Configura eventuali URL di reindirizzamento esterni consentiti
Impostazioni app e stringhe di connessione
Abbiamo accennato brevemente alle impostazioni dell’app, ma approfondiamo come usarle per configurare in modo efficace la tua applicazione dati.
Le impostazioni dell’app in Azure App Service fungono da variabili d’ambiente per l’applicazione. Sono particolarmente utili per:
- Stringhe di connessione al database
- Chiavi API
- Feature flag
- Configurazioni specifiche dell’ambiente
Per aggiungere o modificare le impostazioni dell’app:
- Nel tuo App Service, vai a "Configuration" nella barra laterale sinistra
- Seleziona la scheda "Application settings"
- Fai clic su "New application setting" per aggiungere una coppia chiave-valore
- Per i valori sensibili, puoi attivare l’opzione "deployment slot setting" per evitare che vengano scambiati durante gli swap degli slot

Per le applicazioni dati, le impostazioni comuni includono:
- Stringhe di connessione al database
- Chiavi di accesso all’account di archiviazione
- Endpoint di modelli di machine learning
- Feature flag per A/B test
Puoi anche configurare separatamente le stringhe di connessione, utile per le connessioni ai database:
- Nella pagina Configuration, seleziona la scheda "Connection strings"
- Fai clic su "New connection string"
- Fornisci nome, valore e tipo (SQL Server, MySQL, PostgreSQL, ecc.)
Le stringhe di connessione sono disponibili per la tua applicazione anche come variabili d’ambiente, ma con una convenzione di denominazione diversa a seconda del linguaggio/framework.
Per recuperare le impostazioni nella tua applicazione Python:
import os
# Retrieve an application setting
api_key = os.environ.get('API_KEY')
# Retrieve a connection string (Python)
connection_string = os.environ.get('SQLCONNSTR_MyDatabase')
Uso dei riferimenti a Key Vault
Per informazioni altamente sensibili come credenziali di database o chiavi API, Azure Key Vault offre un ulteriore livello di sicurezza. Puoi fare riferimento ai secret di Key Vault direttamente nelle impostazioni dell’app:
- Crea un Azure Key Vault e aggiungi i tuoi secret
- Assicurati che il tuo App Service abbia un’identità gestita
- Concedi a questa identità l’accesso al Key Vault
- Nelle impostazioni dell’app, riferisci il secret usando il formato: @Microsoft.KeyVault(SecretUri=https://myvault.vault.azure.net/secrets/mysecret/)
Questo approccio separa le informazioni sensibili dalla configurazione dell’applicazione e offre una gestione centralizzata dei secret.
Scalare e gestire Azure App Service
Ora che l’applicazione è distribuita e configurata, concentriamoci sul garantirne buone prestazioni, affidabilità e adattabilità ai carichi variabili.
Scalare e gestire correttamente Azure App Service è particolarmente importante per le applicazioni dati, che spesso hanno esigenze di risorse variabili e possono trattare informazioni sensibili.
Scalare i piani App Service
Uno dei maggiori vantaggi delle piattaforme cloud come Azure è la possibilità di aumentare o ridurre le risorse in base alla domanda. Per le applicazioni dati, questo è particolarmente prezioso perché i carichi di lavoro variano spesso in modo significativo, passando da periodi di intensa elaborazione a momenti più tranquilli con traffico minimo.
Azure App Service offre due metodi principali di scalabilità:
Scalabilità verticale (Scale up/down)
La scalabilità verticale consiste nel cambiare la dimensione del piano App Service per fornire più o meno CPU, memoria e spazio su disco. È utile quando le prestazioni dell’applicazione sono limitate dalle risorse di una singola istanza.
Per scalare verticalmente:
- Nel tuo piano App Service, seleziona "Scale up (App Service plan)" nella barra laterale sinistra
- Scegli un livello tariffario o una dimensione dell’istanza diversa in base alle tue esigenze
- Fai clic su "Apply"

Per le applicazioni dati, valuta la scalabilità verticale quando:
- L’applicazione sperimenta pressione sulla memoria a causa di grandi operazioni di elaborazione dati
- Raggiungi i limiti della CPU durante l’inferenza del modello
- Hai bisogno di ulteriore spazio di archiviazione per caching o file temporanei
Scalabilità orizzontale (Scale out/in)
La scalabilità orizzontale modifica il numero di istanze di macchine virtuali che eseguono la tua applicazione. Questo approccio è ideale per distribuire il carico e migliorare la disponibilità.
Per scalare orizzontalmente:
- Nel tuo piano App Service, seleziona "Scale out (App Service plan)" nella barra laterale sinistra
- Imposta manualmente il numero di istanze o configura regole di auto-scale
- Fai clic su "Save"
Per la scalabilità manuale, regola semplicemente il numero di istanze al valore desiderato. Tuttavia, l’auto-scale offre maggiore flessibilità adattando automaticamente le risorse in base alle metriche.
Configurare regole di auto-scale
L’auto-scale è particolarmente utile per applicazioni dati con carichi di lavoro variabili. Ad esempio, un’API che serve modelli di machine learning può avere più traffico durante l’orario lavorativo e meno durante la notte.
Per configurare l’auto-scale:
- Nella sezione "Scale out", seleziona "Enable autoscale"
- Definisci una condizione di scala con i seguenti componenti:
- Un numero di istanze predefinito
- Regole di scale-out (quando aggiungere istanze)
- Regole di scale-in (quando rimuovere istanze)
- Regole opzionali basate su pianificazione

Ecco un esempio di regola di auto-scale comune:
- Scale out: aggiungi un’istanza quando la percentuale di CPU > 70% per 10 minuti
- Scale in: rimuovi un’istanza quando la percentuale di CPU < 30% per 10 minuti
Puoi anche creare regole più sofisticate basate su:
- Utilizzo della memoria
- Lunghezza delle code di dati
- Metriche personalizzate da Application Insights
Per carichi di lavoro di data science, considera queste strategie di auto-scale:
- Se la tua applicazione serve modelli di machine learning, scala in base alla lunghezza della coda di richieste per mantenere bassa la latenza delle predizioni
- Per processi ETL, pianifica capacità aggiuntiva durante le finestre di elaborazione note
- Per applicazioni con utenti globali, usa la scalabilità basata su pianificazione per garantire capacità adeguata nei diversi fusi orari
Puoi anche configurare l’auto-scale usando Azure CLI:
# Create an autoscale setting with a rule to scale out when CPU > 70%
az monitor autoscale create --resource-group MyResourceGroup --resource MyAppServicePlan --resource-type "Microsoft.Web/serverfarms" --name MyAutoScaleConfig --min-count 2 --max-count 5 --count 2
# Add a scale out rule
az monitor autoscale rule create --resource-group MyResourceGroup --autoscale-name MyAutoScaleConfig --scale out 1 --condition "Percentage CPU > 70 avg 10m"
# Add a scale in rule
az monitor autoscale rule create --resource-group MyResourceGroup --autoscale-name MyAutoScaleConfig --scale in 1 --condition "Percentage CPU < 30 avg 10m"
Monitoraggio e diagnostica
Un monitoraggio efficace è fondamentale per mantenere applicazioni dati affidabili. Azure offre strumenti di monitoraggio completi che ti danno visibilità su prestazioni, pattern di utilizzo e potenziali problemi della tua applicazione.
Azure Monitor e Application Insights
Azure Monitor è la base per il monitoraggio dei servizi Azure, mentre Application Insights offre approfondimenti specifici sull’applicazione.
Per abilitare Application Insights per il tuo App Service:
- Nel tuo App Service, seleziona "Application Insights" nella barra laterale sinistra
- Fai clic su "Turn on Application Insights"
- Configura una risorsa Application Insights nuova o esistente
- Fai clic su "Apply"

Una volta abilitato, Application Insights raccoglie una grande quantità di dati sulla tua applicazione, tra cui:
- Tasso di richieste, tempi di risposta e tassi di errore
- Chiamate a dipendenze (database, API esterne)
- Prestazioni delle visualizzazioni di pagina
- Log delle eccezioni
- Eventi personalizzati definiti nel codice
Per le applicazioni Python, dovrai installare l’SDK di Application Insights:
pip install opencensus-ext-azure
Quindi aggiungi l’istrumentazione alla tua applicazione:
from opencensus.ext.azure.trace_exporter import AzureExporter
from opencensus.trace.samplers import ProbabilitySampler
from opencensus.trace.tracer import Tracer
# Configure the Azure exporter
azure_exporter = AzureExporter(
connection_string='InstrumentationKey=00000000-0000-0000-0000-000000000000'
)
# Create a tracer
tracer = Tracer(exporter=azure_exporter, sampler=ProbabilitySampler(1.0))
# Use the tracer in your application
with tracer.span(name="main_function"):
# Your code here
pass
Visualizzare i log e configurare avvisi
Azure App Service raccoglie automaticamente log che possono aiutarti a diagnosticare i problemi:
- Nel tuo App Service, seleziona "Log stream" per visualizzare i log in tempo reale
- Per un’analisi più dettagliata, vai su "Diagnostic logs" e abilita l’application logging
- Configura il livello di log (Error, Warning, Information, Verbose)

Per le applicazioni dati, presta particolare attenzione a:
- Eccezioni di memoria insufficiente, comuni quando si elaborano dataset di grandi dimensioni
- Timeout di connessione alle origini dati
- Collo di bottiglia nelle prestazioni durante le operazioni di trasformazione dei dati
Configurare avvisi ti assicura di essere informato sui problemi prima che impattino gli utenti:
- In Azure Monitor, seleziona "Alerts"
- Fai clic su "New alert rule"
- Seleziona il tuo App Service come risorsa
- Definisci la condizione che deve attivare l’avviso
- Configura i gruppi di azioni per stabilire chi e come deve essere notificato
- Assegna un nome all’avviso e salvalo
Avvisi comuni per applicazioni dati includono:
- Alto utilizzo della memoria (>80%)
- Errori del server (risposte 5xx)
- Tempi di elaborazione lunghi per operazioni chiave
- Tentativi di connessione ai dati non riusciti
Monitoraggio personalizzato per applicazioni dati
Per esigenze di monitoraggio specifiche dei dati, prendi in considerazione il tracciamento di queste metriche personalizzate:
- Throughput di elaborazione dati (record elaborati al minuto)
- Latenza di inferenza del modello
- Tempo di calcolo delle feature
- Rapporti cache hit/miss
Puoi inviare metriche personalizzate ad Application Insights usando l’SDK:
from opencensus.ext.azure import metrics_exporter
from opencensus.stats import aggregation, measure, stats, view
# Create a metrics exporter
exporter = metrics_exporter.new_metrics_exporter(
connection_string='InstrumentationKey=00000000-0000-0000-0000-000000000000')
# Create and record custom metrics
prediction_time = measure.MeasureFloat(
"prediction_time", "Time taken for model inference", "ms")
prediction_time_view = view.View(
"prediction_time_view", "Model inference time", [], prediction_time, aggregation.LastValueAggregation())
# Register the view
stats.stats.view_manager.register_view(prediction_time_view)
# Record metrics
mmap = stats.stats.stats_recorder.new_measurement_map()
mmap.measure_float_put(prediction_time, 175.5) # Record 175.5ms inference time
mmap.record()
# Force metrics to be sent immediately
exporter.export_metrics([])
Backup e ripristino
Le applicazioni dati spesso gestiscono informazioni di valore, quindi funzionalità di backup e ripristino sono essenziali. Azure App Service offre funzionalità di backup integrate che possono acquisire i file della tua applicazione, la configurazione e i database connessi.
Configurare backup automatici
Per configurare i backup:
- Nel tuo App Service, seleziona "Backups" nella barra laterale sinistra
- Fai clic su "Configure"
- Imposta la pianificazione dei backup (giornaliera, settimanale o personalizzata)
- Specifica un account di archiviazione per i file di backup
- Includi facoltativamente i database nel backup
- Fai clic su "Save"

Per le applicazioni dati, considera queste best practice per i backup:
- Pianifica i backup nei periodi di bassa attività
- Assicurati che il tuo account di archiviazione sia nella stessa area del tuo App Service per backup più rapidi
- Per applicazioni con cambiamenti di dati frequenti, configura backup più assidui
- Ricorda che i database di grandi dimensioni potrebbero superare i limiti di dimensione del backup; per questi casi, valuta strategie di backup specifiche per il database
Ripristinare da un backup
Se devi ripristinare la tua applicazione:
- Nella sezione Backups, seleziona il punto di backup da cui vuoi ripristinare
- Fai clic su "Restore"
- Scegli se ripristinare il contenuto dell’app, la configurazione e i database connessi
- Specifica l’App Service di destinazione (può essere la stessa app o un’altra)
- Fai clic su "OK" per avviare il processo di ripristino
Per applicazioni dati critiche, ti consiglio di testare periodicamente il processo di ripristino per assicurarti che la strategia di recovery funzioni come previsto.
Strategie di backup specifiche per i database
Sebbene i backup di App Service possano includere i database connessi, le applicazioni data-intensive traggono spesso vantaggio da strategie di backup specifiche per il database:
- Per database Azure SQL, configura backup automatici con ripristino point-in-time
- Per Cosmos DB, usa la modalità di backup continuo
- Per grandi dataset archiviati in Azure Storage, valuta l’uso della replica dell’account di archiviazione e del versioning
Sicurezza e conformità in Azure App Service
La sicurezza è fondamentale per le applicazioni data-driven, soprattutto quando gestiscono informazioni sensibili o soggette a normative. Azure App Service offre diverse funzionalità di sicurezza per proteggere le tue applicazioni.
Controllo degli accessi in base al ruolo (RBAC)
RBAC ti consente di controllare chi può gestire le risorse del tuo App Service:
- Nel portale di Azure, vai al tuo App Service
- Seleziona "Controllo di accesso (IAM)" nella barra laterale sinistra
- Fai clic su "Aggiungi" e poi su "Aggiungi assegnazione di ruolo"
- Scegli il ruolo appropriato:
- Contributor: può gestire l'App Service ma non può concedere accesso ad altri
- Reader: può visualizzare ma non modificare nulla
- Website Contributor: può gestire i siti web ma non il piano App Service
- Seleziona gli utenti, i gruppi o i service principal a cui assegnare il ruolo
- Fai clic su "Salva"

Per i team data, valuta la creazione di ruoli personalizzati che limitino l'accesso a operazioni specifiche in base alle responsabilità.
Restrizioni IP e networking
Le restrizioni IP ti consentono di controllare quali indirizzi IP possono accedere al tuo App Service:
- Nel tuo App Service, seleziona "Rete" nella barra laterale sinistra
- Vai a "Restrizioni di accesso"
- Fai clic su "Aggiungi regola"
- Specifica l'intervallo di indirizzi IP, l'azione (Consenti/Nega), la priorità e il nome
- Fai clic su "Aggiungi regola"
Per le applicazioni data che si connettono a risorse interne, valuta:
- Integrazione VNet: collega il tuo App Service alla tua rete virtuale
- Service Endpoint: proteggi le connessioni ai servizi Azure come SQL e Storage
- Private Endpoint: crea un collegamento privato al tuo App Service dalla tua rete virtuale
Per configurare l'integrazione VNet:
- Nella sezione Rete, seleziona "Integrazione VNet"
- Fai clic su "Aggiungi VNet"
- Seleziona o crea una rete virtuale e una subnet
- Fai clic su "OK"
Questa integrazione è particolarmente utile per connettersi in modo sicuro a database o altre origini dati all'interno della tua rete.
Risoluzione dei problemi comuni di Azure App Service
Anche con un'attenta pianificazione, possono insorgere problemi con il tuo App Service. Ecco alcuni problemi comuni e le relative soluzioni, con un focus su scenari di applicazioni data.
Diagnosi dei crash dell'app
Se la tua app va in crash o non risponde:
- Controlla i log di App Service:
- Vai a "Log stream" per i log in tempo reale
- Controlla "Log diagnostici" per i dati storici
- Usa Application Insights per identificare le eccezioni
- Esegui gli strumenti diagnostici Kudu:
- Vai su
https://<your-app-name>.scm.azurewebsites.net/DebugConsole - Usa la console per ispezionare file e processi
Cause comuni di crash nelle applicazioni data includono:
- Limiti di memoria: l'elaborazione di grandi dataset può superare la memoria disponibile
- Problemi di dipendenze: pacchetti mancanti o incompatibili
- Errori di configurazione: stringhe di connessione o variabili d'ambiente errate
Per operazioni che richiedono molta memoria, valuta:
- L'upgrade a un livello superiore con più memoria
- L'implementazione del chunking dei dati per elaborare batch più piccoli
- L'uso di algoritmi o strutture dati più efficienti
Debug delle prestazioni
Se la tua applicazione è lenta:
- Usa il monitoraggio delle prestazioni di Application Insights:
- Controlla la sezione Performance per individuare richieste lente
- Cerca chiamate a dipendenze che potrebbero causare colli di bottiglia
- Rivedi le metriche del server in Azure Monitor:
- Utilizzo di CPU e memoria
- Lunghezza della coda HTTP
- Controlla le prestazioni delle query del database per operazioni pesanti sui dati
Per migliorare le prestazioni:
- Implementa la cache per le query frequenti
- Ottimizza gli indici del database
- Valuta lo scaling verticale o orizzontale
- Usa operazioni asincrone per processi di lunga durata
Analisi di log e messaggi di errore
Azure App Service offre diverse opzioni di logging:
- Log applicativi: i log della tua applicazione
- Log del server web: log delle richieste HTTP e degli errori
- Log di distribuzione: informazioni sul processo di deployment
- Log degli errori dettagliati: maggiori informazioni sugli errori HTTP
Per configurare un logging più dettagliato:
- Nel tuo App Service, vai su "Log diagnostici"
- Abilita i tipi di log appropriati
- Imposta il livello adeguato (Error, Warning, Information, Verbose)
- Scegli se archiviare i log nel file system o in blob storage
Per le applicazioni Python, puoi migliorare il logging con:
import logging
import sys
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
handlers=[
logging.StreamHandler(sys.stdout)
]
)
# Use logging in your application
logger = logging.getLogger(__name__)
logger.info("Processing data batch")
logger.error("Failed to connect to database", exc_info=True)
Gestione dei costi con Azure App Service
Le applicazioni data possono consumare molte risorse, quindi comprendere e ottimizzare i costi è particolarmente importante. In questa sezione finale, analizziamo i modelli di prezzo di Azure App Service e le strategie per gestire efficacemente i costi.
Comprendere i prezzi di Azure App Service
La tariffazione di Azure App Service si basa principalmente sul piano App Service che selezioni. Ecco i fattori di costo da considerare:
Livelli del piano App Service
Come visto in precedenza, Azure offre diversi livelli di prezzo, ciascuno con funzionalità e costi differenti:
|
Livello |
Fascia di costo mensile (USD) |
Funzionalità |
Ideale per |
|
Free |
$0 |
1GB di archiviazione, infrastruttura condivisa, 60 minuti/giorno di compute |
Sviluppo, apprendimento |
|
Shared (D1) |
$10-15 |
1GB di archiviazione, 240 minuti/giorno di compute |
Siti a basso traffico, test |
|
Basic (B1-B3) |
$55-220 |
VM dedicate, scala manuale, domini personalizzati |
Carichi di lavoro in produzione, traffico basso-medio |
|
Standard (S1-S3) |
$70-400 |
Auto-scaling, slot di staging, backup giornalieri |
App di produzione con traffico variabile |
|
Premium (P1V2-P3V2) |
$80-500 |
Prestazioni migliorate, più opzioni di scaling |
Esigenze ad alte prestazioni, applicazioni di grandi dimensioni |
|
Isolated |
$300-1000+ |
Isolamento dedicato di rete/compute |
Applicazioni con requisiti di conformità stringenti |
Nota: i prezzi sono approssimativi e possono variare in base alla regione o a modifiche del listino Azure. Per le informazioni più recenti, consulta la pagina ufficiale dei prezzi.
Fattori di costo aggiuntivi
Oltre al piano base di App Service, considera questi costi aggiuntivi:
- Traffico dati in uscita: dopo i primi 5GB al mese (gratuiti), il trasferimento dati in uscita comporta costi. Per applicazioni che servono grandi dataset agli utenti, questo può diventare significativo.
- Certificati SSL: mentre Azure fornisce certificati gratuiti, i certificati personalizzati hanno costi associati.
- Domini personalizzati: il primo dominio personalizzato è gratuito, ma i domini aggiuntivi possono comportare costi.
- Storage: lo spazio di archiviazione aggiuntivo oltre a quanto incluso nel tuo livello ha un costo extra.
- Componenti aggiuntivi e servizi connessi: database, servizi di caching e altre risorse Azure collegate al tuo App Service hanno costi propri.
Monitoraggio dei costi
Azure fornisce strumenti per monitorare e prevedere la spesa:
- Gestione dei costi di Azure: accedi dal portale di Azure per visualizzare i costi per risorsa, impostare budget e creare avvisi.
- Calcolatore prezzi: usa il Calcolatore prezzi di Azure per stimare i costi prima del deployment.
- Raccomandazioni di Advisor: Azure Advisor fornisce suggerimenti per l'ottimizzazione dei costi in base ai tuoi pattern di utilizzo.
> Per gestire in modo efficace costi, sicurezza e prestazioni in tutti i servizi Azure, questo corso su Azure Management and Governance è vivamente consigliato.
Strategie di ottimizzazione dei costi
Ora che abbiamo compreso il modello di prezzo, vediamo alcune strategie per ottimizzare i costi delle applicazioni data su Azure App Service.
Dimensionare correttamente il tuo piano App Service
Uno dei modi più efficaci per controllare i costi è assicurarsi di utilizzare il piano App Service appropriato:
- Parti da una base adeguata: invece di scegliere subito un piano di livello alto, inizia con un piano intermedio e scala solo quando necessario.
- Monitora l'utilizzo delle risorse: usa Azure Monitor per tracciare CPU, memoria e disco. Se sei costantemente sotto il 50% di utilizzo, valuta una riduzione.
- Allinea il livello al tuo carico: per applicazioni data con carichi prevedibili e costanti, un livello Basic o Standard può bastare. Riserva i livelli Premium ad applicazioni con requisiti prestazionali elevati.
Per applicazioni di data science, considera queste raccomandazioni specifiche:
- API per il serving di modelli con requisiti di bassa latenza ma traffico moderato funzionano spesso bene su piani Standard con auto-scaling.
- Pipeline di elaborazione dati che girano a orari programmati possono spesso usare piani Basic se il tempo di elaborazione non è critico.
- Dashboard interattive con molti utenti concorrenti in genere richiedono piani Standard o Premium per mantenere la reattività.
Usare l'auto-scaling in modo efficace
L'auto-scaling non serve solo a gestire i picchi di traffico: è anche un potente strumento di ottimizzazione dei costi:
- Scala a zero quando possibile: per applicazioni non critiche o ambienti di sviluppo, valuta la riduzione a zero istanze nelle ore di inattività.
- Imposta soglie di scaling adeguate: non esagerare con lo scale-out. Parti con soglie conservative (ad esempio 70% CPU) e regola in base alle osservazioni sulle prestazioni.
- Implementa lo scaling pianificato: per carichi prevedibili, usa regole di scaling pianificato invece dell'auto-scaling basato su metriche. Ad esempio, scala verso l'alto durante l'orario lavorativo e verso il basso di notte e nel weekend.
# Example: Create a scheduled autoscale rule to scale down at night
az monitor autoscale rule create --resource-group MyResourceGroup --autoscale-name MyAutoScaleConfig --scale to 1 --condition "Current time is between 22:00 and 06:00 recurring"
Ottimizzare ambienti di sviluppo e test
Gli ambienti di sviluppo e test offrono grandi opportunità di risparmio:
- Usa il livello Free o Shared per gli ambienti di sviluppo quando possibile.
- Implementa l'auto-spegnimento per gli ambienti non di produzione nelle ore di inattività. Sebbene App Service non abbia una funzione di spegnimento integrata, puoi usare Azure Automation o Logic Apps per arrestare e avviare le app secondo una pianificazione.
- Sfrutta in modo efficiente gli slot di distribuzione: invece di mantenere ambienti separati per lo staging, usa gli slot di distribuzione in un singolo App Service di produzione. Questo approccio ti consente di effettuare lo swap degli ambienti senza raddoppiare i costi.
# Create a staging slot
az webapp deployment slot create --name MyWebApp --resource-group MyResourceGroup --slot staging
# Swap staging to production
az webapp deployment slot swap --name MyWebApp --resource-group MyResourceGroup --slot staging --target-slot production
Ottimizzazioni dei costi specifiche per i dati
Per le applicazioni data, valuta questi approcci specializzati per risparmiare:
- Scarica l'elaborazione pesante: invece di eseguire elaborazioni onerose in App Service, valuta servizi dedicati come Azure Functions (per elaborazione serverless) o Azure Data Factory (per workflow ETL).
- Implementa la cache: per dati che cambiano raramente, implementa la cache per ridurre chiamate al database e computazione. Azure Cache for Redis si integra bene con App Service.
- Ottimizza i costi del database: spesso il database connesso al tuo App Service costa più dell'App Service stesso. Considera:
- L'uso di pool elastici per i database SQL
- L'implementazione di un'indicizzazione adeguata
- L'uso di archiviazione a livelli per i dati a bassa frequenza di accesso
- Comprimi le risposte: per applicazioni che servono grandi dataset agli utenti, abilita la compressione per ridurre i costi di trasferimento dati in uscita:
# Example for Flask applications
from flask import Flask
from flask_compress import Compress
app = Flask(__name__)
Compress(app)
Tecniche avanzate per applicazioni data
Oltre all'ottimizzazione dei costi, ci sono diverse tecniche avanzate per migliorare prestazioni e funzionalità delle tue applicazioni data su Azure App Service.
Containerizzare le applicazioni data
I container offrono coerenza tra ambienti e possono semplificare la gestione delle dipendenze, una sfida comune nelle applicazioni data con requisiti complessi:
- Nel portale di Azure, crea una nuova Web App
- Seleziona "Docker Container" invece di "Code" per l'opzione di pubblicazione
- Scegli Single Container e specifica la tua immagine Docker
Per applicazioni di data science, valuta il mantenimento di un'immagine container di base con librerie comuni come NumPy, pandas e scikit-learn per velocizzare i deployment.
Implementare CI/CD per i workflow data
Oltre al CI/CD di base, valuta l'implementazione di test automatizzati specifici per le applicazioni data:
- Test di validazione dei dati: verifica che l'elaborazione dei dati produca i risultati attesi
- Test delle prestazioni del modello: assicurati che i modelli ML rispettino le soglie di accuratezza e performance
- Load testing: valida che l'applicazione gestisca i volumi di dati previsti
Esempio di workflow GitHub Actions per un'applicazione data:
name: Data App CI/CD
on:
push:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.8'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pytest pytest-cov
- name: Test with pytest
run: |
pytest tests/data_validation_tests.py
pytest tests/model_performance_tests.py
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Deploy to Azure
uses: azure/webapps-deploy@v2
with:
app-name: 'my-data-app'
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
Usare WebJobs per l'elaborazione in background
Per applicazioni data che richiedono elaborazione in background, Azure WebJobs offrono un modo per eseguire script o programmi nello stesso contesto del tuo App Service:
- Nel tuo App Service, vai su "WebJobs" nella barra laterale sinistra
- Fai clic su "Aggiungi"
- Carica il tuo file di script (ad es. uno script Python per l'elaborazione dati)
- Scegli il tipo di trigger (manuale, pianificato o continuo)
- Fai clic su "OK"
I WebJobs sono particolarmente utili per:
- Pulizia dati pianificata
- Generazione periodica di report
- Retraining periodico dei modelli
- Sincronizzazione dati tra sistemi
Connettività ibrida per dati on-premises
Molte organizzazioni hanno dati che rimangono on-premises. Azure App Service può connettersi a questi dati utilizzando:
- Integrazione VNet: collega il tuo App Service a una rete virtuale che ha connettività con la tua rete on-premises tramite ExpressRoute o VPN.
- Connessioni ibride: un'alternativa più semplice che non richiede VPN, consentendo al tuo App Service di raggiungere server on-premises specifici per hostname e porta.
Per configurare le Hybrid Connections:
- Nel tuo App Service, seleziona "Rete" nella barra laterale sinistra
- Vai su "Connessioni ibride"
- Fai clic su "Aggiungi connessione ibrida"
- Creane una nuova o usa una connessione esistente
- Specifica l'hostname dell'endpoint e la porta
- Installa l'Hybrid Connection Manager sul tuo server on-premises
Implementare feature flag per applicazioni data
I feature flag ti consentono di abilitare funzionalità in modo selettivo, utile per A/B test di funzionalità data o per il rilascio graduale di nuovi modelli:
{
"FeatureFlags": {
"NewRecommendationModel": false,
"AdvancedDataFiltering": true
}
}
Leggi questi flag nel tuo codice:
import os
import json
feature_flags = json.loads(os.environ.get('FeatureFlags', '{}'))
use_new_model = feature_flags.get('NewRecommendationModel', False)
if use_new_model:
# Use new recommendation model
else:
# Use existing model
Questo approccio ti consente di testare nuove funzionalità con un sottoinsieme di utenti o disabilitare rapidamente funzionalità problematiche senza ridistribuire.
> Per approfondire l'automazione del deployment di modelli ML, dai un'occhiata a questo corso su CI/CD per il Machine Learning.
Conclusione
In tutto questo tutorial, abbiamo visto come configurare, distribuire, impostare, scalare e ottimizzare Azure App Service per le applicazioni data. Dalla creazione del primo App Service all'implementazione di funzionalità avanzate come auto-scaling e connettività ibrida, ora hai le conoscenze per sfruttare la piattaforma Azure per i tuoi carichi di lavoro dati.
Punti chiave
- Azure App Service offre una piattaforma completamente gestita che consente ai professionisti dei dati di concentrarsi sulla logica applicativa anziché sulla gestione dell'infrastruttura.
- Molteplici opzioni di deployment consentono un'integrazione fluida con il tuo workflow di sviluppo, che tu stia usando GitHub, Azure DevOps o repository Git locali.
- Capacità di scaling assicurano che la tua applicazione possa gestire carichi variabili, dal testing in sviluppo ai picchi di traffico in produzione.
- Strumenti integrati di monitoraggio e diagnostica aiutano a mantenere affidabilità e prestazioni, con metriche specifiche per le applicazioni data.
- Strategie di ottimizzazione dei costi ti consentono di massimizzare il valore minimizzando le spese, particolarmente importante per carichi di lavoro data intensivi.
Prossimi passi
Per continuare il tuo percorso con Azure App Service, valuta di approfondire:
- Integrazione con Azure ML: distribuisci i modelli addestrati in Azure Machine Learning nel tuo App Service per l'inferenza.
- Azure Functions: per il compute event-driven e serverless che completa le tue applicazioni App Service.
- Azure API Management: per proteggere e gestire le API che espongono i tuoi servizi dati.
- Azure Logic Apps: per l'automazione dei workflow tra il tuo App Service e altre origini dati.
- L'il Microsoft Azure Fundamentals track è anche una risorsa eccellente se stai preparando una certificazione o desideri un percorso strutturato.
Ricorda che il panorama cloud evolve rapidamente, quindi tieni d'occhio la pagina degli aggiornamenti di Azure per nuove funzionalità e servizi che potrebbero migliorare le tue applicazioni data!

Ampio background tecnico che include machine learning, data science, modellazione quantitativa, ingegneria del software, DevOps e cloud computing.


Distribuire applicazioni in modo efficiente è diventato importante quanto svilupparle. Come professionista dei dati, ho spesso notato che, mentre dedichiamo molto tempo a perfezionare i nostri modelli e le nostre applicazioni, il processo di distribuzione a volte passa in secondo piano. È qui che entra in gioco Azure App Service: una piattaforma che semplifica la distribuzione e al tempo stesso offre funzionalità robuste per scalabilità, sicurezza e monitoraggio.
In questo tutorial completo ti guiderò nella configurazione, distribuzione e scalabilità delle applicazioni su Azure App Service.
Che tu sia alle prime armi e voglia distribuire la tua prima applicazione o un professionista esperto alla ricerca di ottimizzare l’infrastruttura cloud, questa guida offre passaggi pratici e buone pratiche.
Che cos’è Azure App Service?
Azure App Service è l’offerta Platform as a Service (PaaS) di Microsoft che ti consente di creare e ospitare applicazioni web senza gestire l’infrastruttura sottostante. Supporta diversi linguaggi e framework, tra cui Python, Java, Node.js, .NET e altri.
Prima di passare alla configurazione, vediamo perché Azure App Service è particolarmente utile per chi lavora con i dati:
Come data scientist o data engineer potresti chiederti in cosa App Service differisca da altre offerte Azure come Azure Functions o Azure Kubernetes Service. La differenza principale è che App Service rappresenta la via di mezzo ideale: più flessibilità rispetto alle opzioni serverless, ma meno complessità dei sistemi di orchestrazione di container.
> Per una panoramica di base dell’ecosistema e dei servizi Azure, esplora questo corso introduttivo su Microsoft Azure.
Configurare Azure App Service
Ora che sappiamo cos’è Azure App Service, rimbocchiamoci le maniche e configuriamo il nostro primo App Service. Il processo prevede due passaggi principali: creare un piano App Service e poi creare una web app all’interno di quel piano.
Creare un piano Azure App Service
Un App Service plan definisce le risorse di calcolo, la regione e il livello di prezzo per le tue applicazioni. Pensalo come la server farm su cui verranno eseguite le app. Più app possono condividere lo stesso piano, rendendolo conveniente per eseguire varie applicazioni più piccole.
Ecco come creare un App Service plan:
A proposito di livelli di prezzo, Azure App Service offre diverse opzioni:
Tier
Funzionalità
Ideale per
Free
1GB di storage, infrastruttura condivisa, 60 minuti/giorno di compute
Sviluppo e test
Shared
1GB di storage, 240 minuti/giorno di compute
App a basso traffico, sviluppo
Basic
10GB di storage, VM dedicate, domini personalizzati
Lavori in produzione con traffico moderato
Standard
50GB di storage, auto-scaling, slot di staging
App in produzione con traffico più elevato
Premium
250GB di storage, prestazioni avanzate, più opzioni di scalabilità
Applicazioni enterprise, esigenze ad alte prestazioni
Per le applicazioni data, in genere consiglio di partire almeno dal tier Basic in produzione, perché l’elaborazione dati spesso richiede più risorse rispetto al semplice web serving. Se stai servendo modelli di machine learning che necessitano di notevole compute, valuta il tier Standard per le sue funzionalità di auto-scaling.
Puoi anche creare un App Service plan tramite Azure CLI:
Creare una web app App Service
Una volta creato l’App Service plan, puoi creare al suo interno una web app. La web app è l’istanza effettiva che eseguirà il tuo codice.
Segui questi passaggi per creare una web app:
myapp.azurewebsites.net)Se usi Azure CLI, puoi creare una web app con un solo comando:
Dopo aver creato la web app, Azure effettuerà il provisioning delle risorse necessarie. Al termine, puoi aprire la nuova web app cliccando su "Go to resource" o cercandola nel tuo resource group.
A questo punto, visitando l’URL della tua app (
https://your-app-name.azurewebsites.net) dovresti vedere una pagina predefinita. Conferma che l’app è attiva, anche se non sta ancora eseguendo il tuo codice: parleremo della distribuzione nella sezione successiva.Configurare le impostazioni di base dell’app
Prima di passare alla distribuzione, impostiamo alcune configurazioni di base. Per le applicazioni data, potresti aver bisogno di variabili d’ambiente specifiche per connessioni a database o chiavi API.
Per configurare le impostazioni dell’app:
Puoi impostarle anche tramite Azure CLI:
Queste impostazioni saranno disponibili come variabili d’ambiente per la tua applicazione, un modo sicuro per archiviare la configurazione senza inserirla nel codice sorgente.
Distribuire la tua prima applicazione
Ora che abbiamo configurato l’infrastruttura di Azure App Service, è il momento di distribuire l’applicazione. Azure App Service offre diversi metodi di distribuzione, dandoti flessibilità in base al tuo flusso di lavoro e alle tue preferenze. In questa sezione vedremo come distribuire applicazioni usando il controllo versione (GitHub o Azure Repos), FTP e repository Git locali.
Per chi lavora con i dati, questo passaggio è cruciale perché colma il divario tra l’ambiente di sviluppo locale e un’applicazione pronta per la produzione in grado di servire i tuoi modelli o pipeline di elaborazione.
> Se sei nuovo ai principi di distribuzione, questo corso DevOps offre un’introduzione chiara a concetti e strumenti fondamentali.
Distribuire da GitHub o Azure Repos
Una delle funzionalità più potenti di Azure App Service è il continuous deployment (CD) integrato. Collegando il tuo App Service a un repository GitHub o Azure DevOps, puoi distribuire automaticamente le modifiche ogni volta che il codice viene pushato su un branch specifico.
Questo approccio è particolarmente prezioso per i team data che lavorano su progetti collaborativi, perché:
> Se sei alle prime armi con il controllo versione, il percorso GitHub Foundations può aiutarti a prendere dimestichezza con le basi. Puoi anche esplorare Azure DevOps come valida alternativa per gestire pipeline di distribuzione e version control.
Ecco come impostare il continuous deployment da GitHub:
Azure creerà un file di workflow GitHub nel tuo repository che compila e distribuisce automaticamente l’app ogni volta che vengono pushate modifiche sul branch selezionato. Questo workflow usa GitHub Actions per gestire il processo CI/CD.
> Per automatizzare ulteriormente le distribuzioni, valuta di combinare Makefile con GitHub Actions per workflow CI/CD più snelli.
Per le applicazioni Python, il workflow in genere include passaggi per:
requirements.txtPuoi anche configurare il continuous deployment tramite Azure CLI:
Configurare le impostazioni di distribuzione
Per perfezionare la distribuzione, puoi configurare impostazioni aggiuntive nel file di workflow di GitHub o nel Portale di Azure:
Per applicazioni di data science, potresti dover aggiungere passaggi di build personalizzati per installare pacchetti scientifici o eseguire script di training dei modelli. Puoi inserirli direttamente nel file di workflow del tuo repository.
Distribuire tramite FTP o Git locale
Sebbene la distribuzione continua da GitHub o Azure Repos sia consigliata nei team, talvolta potresti aver bisogno di metodi più diretti. Azure App Service supporta sia FTP che Git locale per questi scenari.
Distribuzione via FTP
La distribuzione FTP è un modo semplice per caricare direttamente i file della tua applicazione su Azure App Service. È utile per aggiornamenti rapidi o quando lavori con applicazioni che non richiedono processi di build complessi.
Per distribuire via FTP:
/site/wwwroot/Per le applicazioni Python, assicurati di includere il file
requirements.txtnel caricamento. Azure App Service installerà automaticamente i pacchetti necessari.Distribuzione con Git locale
La distribuzione con Git locale ti consente di pushare il codice dal tuo repository Git locale direttamente su Azure. Questo metodo offre più controllo sul processo di distribuzione, sfruttando comunque il version control di Git.
Per configurare la distribuzione con Git locale:
Quando fai push del codice verso il remote Azure, la piattaforma compilerà e distribuirà automaticamente l’applicazione.
Monitorare lo stato della distribuzione
Indipendentemente dal metodo scelto, è importante monitorare il processo di distribuzione per intercettare subito eventuali problemi. Azure offre diversi modi per tenere traccia dello stato:
Se una distribuzione fallisce, i log forniranno informazioni su cosa non ha funzionato. I problemi comuni includono:
requirements.txtPer risolvere i problemi di distribuzione:
requirements.txtPer le applicazioni di data science, i fallimenti di distribuzione spesso sono dovuti all’installazione di pacchetti pesanti o a operazioni ad alta intensità di memoria in fase di avvio. Se incontri questi problemi, valuta di: