L’Azure Developer CLI (azd) è lo strumento open-source di Microsoft pensato per accompagnare lo sviluppatore dall’ambiente locale fino al deployment su Azure. Tra le sue funzionalità più apprezzate, il sistema degli hook permette di iniettare logica personalizzata nei punti chiave del ciclo di vita: prima del provisioning, dopo il deployment, e così via. Fino a poco tempo fa, però, questa logica doveva essere scritta esclusivamente in Bash o PowerShell, costringendo chi lavora in Python o TypeScript a un cambio di contesto non sempre gradito.
Con il rilascio più recente di azd, questo limite è stato rimosso: gli hook possono ora essere scritti in Python, JavaScript, TypeScript e .NET, oltre ai già supportati Bash e PowerShell. La selezione del linguaggio avviene automaticamente in base all’estensione del file, senza configurazione aggiuntiva.
Cosa sono gli hook in azd
Gli hook sono script eseguiti automaticamente da azd in corrispondenza di eventi specifici nel workflow:
preprovision: prima che venga eseguito il provisioning dell’infrastrutturapostprovision: dopo il provisioningpredeploy/postdeploy: prima e dopo il deployment dell’applicazione
Si definiscono nel file azure.yaml con il blocco hooks:, specificando il percorso allo script da eseguire. azd si occupa autonomamente di rilevare il runtime appropriato, installare le dipendenze e lanciare lo script.
Come usare gli hook in Python
Per un hook Python, è sufficiente creare il file .py e, nella stessa directory o in una directory padre, un file requirements.txt o pyproject.toml. azd individuerà automaticamente il file di dipendenze, creerà un virtual environment e installerà i pacchetti necessari prima di eseguire lo script.
Struttura tipica:
hooks/
├── setup.py
└── requirements.txt
Configurazione in azure.yaml:
hooks:
preprovision:
run: ./hooks/setup.py
È possibile personalizzare il nome del virtual environment tramite il blocco config:
hooks:
preprovision:
run: ./hooks/setup.py
config:
virtualEnvName: .venv
Hook in JavaScript e TypeScript
Per gli hook JavaScript e TypeScript, azd cerca un file package.json nella stessa directory o in una directory padre. Esegue automaticamente npm install (o il package manager specificato nella configurazione) e lancia lo script.
Per TypeScript, la novità più interessante è che non serve un tsconfig.json né una fase di compilazione separata: azd utilizza npx tsx per eseguire il file TypeScript direttamente.
hooks/
├── seed.ts
└── package.json
hooks:
postdeploy:
run: ./hooks/seed.ts
config:
packageManager: pnpm # npm | pnpm | yarn
Hook in .NET e C#
Per i progetti .NET sono supportate due modalità distinte:
- Project mode: se nella directory dello script (o in una padre) è presente un file
.csproj,.fsprojo.vbproj,azdesegue automaticamentedotnet restoreedotnet build. - Single-file mode: a partire da .NET 10, i file
.csstandalone vengono eseguiti direttamente condotnet run script.cs, senza necessità di un progetto.
hooks/
├── migrate.cs
└── migrate.csproj # opzionale su .NET 10+
hooks:
postprovision:
run: ./hooks/migrate.cs
config:
configuration: Release # Debug | Release
framework: net10.0
Funzionalità avanzate
Override della directory di lavoro
Se la root del progetto e la posizione dello script differiscono, si può usare il campo dir per specificare la working directory:
hooks:
preprovision:
run: main.py
dir: hooks/preprovision
Override esplicito del linguaggio
Se l’estensione è assente o ambigua, è possibile forzare il runtime con il campo kind:
hooks:
preprovision:
run: ./hooks/setup
kind: python
Formato misto e override per piattaforma
Si possono combinare hook in linguaggi diversi e specificare script differenti per Windows e sistemi POSIX:
hooks:
preprovision:
run: ./hooks/setup.py
predeploy:
windows:
run: ./hooks/build.ps1
posix:
run: ./hooks/build.sh
postdeploy:
run: ./hooks/seed.ts
postprovision:
run: ./hooks/migrate.cs
Come aggiornare azd
Per assicurarsi di avere questa funzionalità disponibile, è sufficiente aggiornare azd all’ultima versione:
azd update
Per una nuova installazione, è possibile seguire la guida ufficiale di installazione.
Conclusioni
Il supporto multi-linguaggio per gli hook di azd rappresenta un miglioramento concreto per i team che lavorano con stack tecnologici eterogenei. Non dover più mantenere script shell separati per la logica di deployment è un risparmio reale di complessità, soprattutto nei progetti .NET o Python dove gran parte della base di codice esistente può essere riutilizzata direttamente negli hook.
La gestione automatica delle dipendenze (virtual env per Python, npm install per JS/TS, dotnet restore per .NET) elimina ulteriore boilerplate, rendendo l’integrazione trasparente. Chi già usa azd nel proprio workflow troverà questa novità immediatamente utile; chi non lo ha ancora esplorato può partire dalla documentazione ufficiale e dalla galleria di template.
Fonte: Write azd hooks in Python, JavaScript, TypeScript, or .NET – Azure SDK Blog