Aller au contenu principal

Azure Durable Functions ⇄ Pulse

Intermédiaire ⏱ 15 min azure · python · activity durable · 🧪 orchestration validée en live

Durable Functions découpe le travail entre un orchestrateur déterministe et rejoué, et des activities à effets de bord — l'orchestrateur ne peut pas faire d'I/O directement, donc chaque appel externe vit dans une activity. Exactement la contrainte de Temporal : les moteurs durables mettent l'I/O dans une Activity. Exemple du repo : examples/azure-durable-functions-pulse-bridge/.

HTTP start → order_orchestrator (durable, rejoué) → yield call_activity("score_via_pulse") → decide → escalate | auto-approve

L'activity fait les deux appels universels (POST .../x/order-scoring/in, GET .../events/order-scoring.score.out).

Lancez-le en local — le vrai générateur d'orchestrateur

pulse server start --dev
mkdir app && cp pulse.yaml app/ && (cd app && pulse deploy .)
pip install azure-functions azure-functions-durable requests
PULSE_URL=http://localhost:9090 python run_local.py

run_local.py pilote le vrai générateur orchestrate_order de function_app.py : chaque yield call_activity(...) exécute la vraie activity et renvoie le résultat — ce que fait le runtime Durable, moins la plomberie replay/checkpoint. Toute l'orchestration est donc validée, pas seulement l'appel Pulse :

amount= 2500 -> decision=escalate
amount= 300 -> decision=auto-approve

L'activity seule : PULSE_URL=... python function_app.py.

Déployer sur le vrai Azure

function_app.py (modèle v2) + host.json (extension bundle v4) + requirements.txt sont prêts pour Azure Functions. Le statut 🧪 : orchestration prouvée contre un Pulse vivant ; le run hébergé Azure demande votre souscription.

Ensuite