Microsoft Azure Logic Apps: implementare una politica di retry di uno step con il costrutto do-until

In questo post parliamo ancora di Microsoft Azure Logic Apps e in particolare di come implementare una politica di retry, su uno step andato in errore, tramite l’utilizzo del costrutto do-until.

Riprendiamo come esempio la Logic App che avevamo creato nel post precedente, dove avevamo analizzato il bug presente sul connettore SFTP e segnalato la sua risoluzione da parte di Microsoft.
Azure Logic App esecuzione corretta

Nella logic app in questione è presente un’azione di prelevamento di un file via SFTP, che potrebbe andare in errore ad esempio perchè il file in questione non è presente (ma potrebbe esserlo più avanti) oppure per un momentaneo problema di rete.
L’immagine seguente mostra un esempio di run di questa Logic App fallito a causa di un errore sullo step di get SFTP:
Azure Logic App Failed Step
Cliccando su “Run details” è possibile ottenere maggiori informazioni. Si apre infatti una finestra con la lista degli step, lo stato di esecuzione, la durata, ecc..
In questo caso vediamo nuovamente che lo step di get SFTP è fallito.
Azure Logic App Dettagli del Run
Cliccando sulla riga dello step in questione e poi, nella nuova finestra che si apre sulla destra, su “OUTPUTS LINK” possiamo trovare informazioni sulla causa del fallimento dell’azione.
In questo caso vediamo che si è trattato di un generico problema di connessione al server SFTP, sicuramente momentaneo perchè altre esecuzioni della stessa Logic App, con la stessa configurazione, eseguite praticamente in parallelo sono andate a buon fine.
Azure Logic App  Output log step Fallito

Ecco il dettaglio del messaggio di errore ottenuto:

"body": {
	"status": 404,
	"message": "Unable to connect to the remote server 'xxxxxxxx'.",

Essendo dovuto ad una momentanea non raggiungibilità del server, questo è il tipico esempio di errore risolvibile con dei tentativi successivi a distanza di un certo tempo. Quello che occorre fare per risolvere il problema è quindi fare in modo che l’azione di questo step della Azure Logic App abbia una sua politica di retry.
Per farlo possiamo utilizzare il costrutto Do-Until che l’editor per il design delle Logic App mette a disposizione.

Le operazioni da eseguire sono sostanzialmente le seguenti:

  • Racchiudere lo step in questione all’interno di un costrutto Do-Until
  • Impostare il numero di tentativi e l’intervallo temporale entro cui eseguirli
  • Definire come condizione di uscita del ciclo il buon esito dello step

Quindi, per prima cosa aggiungiamo alla Logic App un costrutto Do-Until

Azure Logic App nuovo costrutto Do Until
e mettiamo poi al suo interno lo step di get file via SFTP

Azure Logic App ciclo Do Until
Cliccando su “Change limits” espandiamo la sezione di configurazione in cui è possibile definire:
Count: il numero di ripetizioni del ciclo Do-Until che si vogliono eseguire. Nel nostro caso, quindi, il numero massimo di retry da provare per l’esecuzione dello step.
Timeout: l’intervallo temporale massimo entro cui effettuare il numero di tentativi definito con “Count”

Quest’ultimo valore è definito utilizzato lo standard ISO 8601, che norma i formati di interscambio per date e valori temporali. In sintesi, per esprimere una durata, occorre definire un stringa formata da un Period (P) e un time (T).
Di default, viene impostata a PTM15 che significa: 15 minuti

  • P: definisce la parte di Period (che in questo caso è vuota, non prevedendo nessun anno, mese, giorno)
  • T: definisce la parte di Time
  • M15: indica una durata di 15 Minuti

Azure Logic App Do Until numero e intervallo di retry

Detto questo, ci resta solo da definire la condizione di uscita dal ciclo Do-Until che, come detto, deve essere legata al buon esito dello step presente all’interno del costrutto: se l’esecuzione avviene con successo dobbiamo uscire e il ciclo per i retry non serve.

Per definire questa condizione passiamo alla modalità avanzata di configurazione delle condizioni, cliccando su “Edit in advanced mode”, e inseriamo la stringa seguente:

@equals(actions('Ottieni_contenuto_file_in_base_al_percorso').status, 'Succeeded')

L’immagine seguente mostra l’inserimento di questa configurazione per la condizione del ciclo:

Azure Logic App condizione su stato dello step

In questo modo stiamo dicendo di non entrare nuovamente nel ciclo qualora lo stato di terminazione dell’azione “Ottieni_contenuto_file_in_base_al_percorso”, cioè del nostro step di get SFTP, sia “Succeded“. Se invece lo step, a fronte di un errore come nell’esempio precedente, dovesse terminare con stato “Failed” verrebbero eseguiti “Count” tentativi nell’intervallo di tempo definito come “Timeout”.

Abbiamo quindi implementato una politica di retry su uno step sensibile della nostra Logic App.

Leggi anche: Microsoft Azure Logic App: risolto il bug sul content-type del connettore SFTP

This entry was posted in $1$s. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *