Nel precedente script #263 abbiamo visto come Azure Container Jobs ci offre la possibilità di eseguire job containerizzati che operano per una durata definita e terminano quando il compito è completato. Questi jobs possono essere eseguiti manualmente oppure ad intervalli regolari, ma è interessante poterli avviare anche tramite trigger.
I trigger si basano sempre sulle regole di scaler di KEDA e, a differenza dell'app, dove una o più istanze vengono attivate in base alle regole per processare più eventi in sequenza o in bulk, applicati ai job causano la creazione di un'istanza per ogni trigger, e risultano quindi l'ideale per operazioni lunghe che necessitano di istanze specifiche di elaborazione.
In fase di creazione di un job dal portale, quindi, se selezioniamo Event ci viene chiesto quali regole dello scaler applicare, come per le app.
Poiché gli eventi possono essere molteplici, possiamo restringere il numero minimo e massimo di istanze da prendere in carico. Nello scaler impostiamo come al solito le tipologie e i metadati, secondo quanto previsto dalla documentazione https://keda.sh/docs/scalers/.
Nell'esempio impostiamo una regola basata sulle code di Azure Storage. Purtroppo, l'interfaccia non permette ancora di impostare la parte dedicata all'autenticazione e all'utilizzo dello scaler, perciò dobbiamo ricorrere ad Azure CLI per impostare la secret da usare per la stringa di connessione.
az containerapp job update -n ricciolo2 -g ricciolo --scale-rule-auth "connection=azurewebjobsstorage" --scale-rule-type "azure-queue" --scale-rule-name queue --scale-rule-metadata "accountName=ricciolo" "queueName=jobs" "queueLength=1"
Creato e impostate le regole del job, lo scaler monitora ogni 20 secondi (modificabile tramite Azure CLI) lo stato della coda e verifica la presenza di messaggi. In base al numero crea le istanze necessarie e, poiché abbiamo impostato un queueLength a 1, in caso di tre messaggi creerà 3 istanze. In caso di 5 messaggi ne creerà comunque 3 per via dei limiti che abbiamo messo. A questo punto è compito del job togliere i messaggi (peek/lock oppure receive/delete) dalla coda affinché lo scaler non li veda al controllo successivo, pena la creazione di altre istanze.
In questo modo i job partono, eventualmente considerando le repliche, che non rientrano nel conto dell'istanze, e possono eseguire con tutto il tempo necessario l'attività. Non è previsto un modo per indicare per quale scopo specifico è prevista quell'istanza; perciò, è compito del container recuperare il lavoro da effettuare. Nel caso di una coda, il semplice prelievo del messaggio disponibile è sufficiente per distribuire i lavori.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Sfruttare al massimo i topic space di Event Grid MQTT
Utilizzare il trigger SQL con le Azure Function
Migrare una service connection a workload identity federation in Azure DevOps
.NET Conference Italia 2024
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Cambiare la chiave di partizionamento di Azure Cosmos DB
Migliora la resilienza delle applicazioni con .NET e Azure Container Apps
Applicare un filtro per recuperare alcune issue di GitHub
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Proteggere le risorse Azure con private link e private endpoints
I più letti di oggi
- anche #vs13 update 4 è disponibile in RTM: https://aspit.co/azm
- Indicizzare Cosmos DB con #azure Search https://aspit.co/b4v di @CristianCivera #cosmosdb
- Utilizzare le sequence di SQL Server in Entity Framework Core
- Gestire l'accelerometro nelle applicazioni Silverlight per Windows Phone
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Modificare i metadati nell'head dell'HTML di una Blazor Web App
- stando a @edbott, la consumer preview di #win8 sarà rilasciata il 29 febbraio! http://aspitalia.com/42
- il supporto di #vs 10 a #netmicrofx arriverà resto. ecco la roadmap aggiornata: http://u.aspitalia.com/hh #vs10ita
- #aspilive: ancora @dbochicchio con le novità di #aspnet45 e #webforms. seguici live su https://aspit.co/vs12-live