Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Usa Durable Functions, una funzionalità di Funzioni di Azure, per scrivere workflow serverless con stato in PowerShell. In questa guida introduttiva si clona ed esegue un'app di esempio che illustra due modelli di orchestrazione comuni:
- Concatenamento delle funzioni: chiama le attività in sequenza (Tokyo → Seattle → Londra).
- Fan-out/fan-in: chiama le attività in parallelo tra cinque città, quindi aggrega i risultati.
Alla fine, avrai entrambe le orchestrazioni in esecuzione in locale con l'emulatore Durable Task Scheduler e potrai visualizzarne lo stato nella dashboard.
- Clonare e preparare il progetto di esempio Hello Cities.
- Configurare l'emulatore Durable Task Scheduler e Azurite per lo sviluppo locale.
- Eseguire l'app per le funzioni e attivare entrambe le orchestrazioni.
- Esamina lo stato dell'orchestrazione e il relativo output nel dashboard di Durable Task Scheduler.
Prerequisiti
- PowerShell 7.4+ installato.
- Funzioni di Azure Core Tools v4 o versione successiva.
- Docker per l'esecuzione dell'emulatore e di Azurite.
- Clonare il repository GitHub Durable Task Scheduler per usare l'esempio rapido.
Configurare l'emulatore dell'utilità di pianificazione di Durable Task
L'emulatore Durable Task Scheduler fornisce un ambiente di sviluppo locale che consente di testare le orchestrazioni senza un abbonamento di Azure. L'host di Funzioni di PowerShell richiede anche Azurite per l'archiviazione locale.
Avviare entrambi i contenitori:
docker run -d --name dtsemulator -p 8080:8080 -p 8082:8082 \
mcr.microsoft.com/dts/dts-emulator:latest
docker run -d --name azurite -p 10000:10000 -p 10001:10001 -p 10002:10002 \
mcr.microsoft.com/azure-storage/azurite
Tip
Una volta avviato l'emulatore, è possibile accedere al dashboard di Durable Task Scheduler all'indirizzo http://localhost:8082 per monitorare le orchestrazioni.
Eseguire l'esempio di avvio rapido
Vai alla directory di esempio di Hello Cities:
cd samples/durable-functions/powershell/HelloCitiesVerificare che il
local.settings.jsonfile contenga la configurazione seguente:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "powershell", "DURABLE_TASK_SCHEDULER_CONNECTION_STRING": "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None" } }Avviare l'app per le funzioni:
func startIn un terminale separato attivare l'orchestrazione del concatenamento delle funzioni :
$response = Invoke-RestMethod -Method POST -Uri http://localhost:7071/api/StartChaining $responseLa risposta contiene gli URL di stato per l'istanza di orchestrazione. Copiare il
statusQueryGetUrivalore ed eseguirlo per controllare il risultato:Invoke-RestMethod -Uri $response.statusQueryGetUriAttiva l'orchestrazione fan-out/fan-in:
$response = Invoke-RestMethod -Method POST -Uri http://localhost:7071/api/StartFanOutFanIn Invoke-RestMethod -Uri $response.statusQueryGetUri
Output previsto
La richiesta POST restituisce una risposta JSON con URL di stato. Per esempio:
{
"id": "<instanceId>",
"statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/<instanceId>?code=...",
"sendEventPostUri": "...",
"terminatePostUri": "...",
"purgeHistoryDeleteUri": "..."
}
Quando si interroga statusQueryGetUri e il campo runtimeStatus dell'orchestrazione è Completed, è possibile trovare i risultati del saluto nel campo output. L'orchestrazione del concatenamento restituisce:
{
"name": "ChainingOrchestration",
"runtimeStatus": "Completed",
"output": ["Hello Tokyo!", "Hello Seattle!", "Hello London!"]
}
L'orchestrazione fan-out/fan-in restituisce:
{
"name": "FanOutFanInOrchestration",
"runtimeStatus": "Completed",
"output": ["Hello Tokyo!", "Hello Seattle!", "Hello London!", "Hello Paris!", "Hello Berlin!"]
}
Tip
Se runtimeStatus mostra Running o Pending, attendere un attimo ed eseguire di nuovo una statusQueryGetUri query.
Apri il dashboard di Durable Task Scheduler all'indirizzo http://localhost:8082 per visualizzare lo stato dell'orchestrazione e la cronologia di esecuzione.
Informazioni sul codice
Il progetto di esempio usa il modello di funzione di PowerShell in cui ogni funzione risiede nella propria sottodirectory con un function.json file di associazione e uno run.ps1 script.
Funzione dell'attività
L'attività SayHello (SayHello/run.ps1) accetta un nome di città e restituisce un messaggio di saluto:
param($city)
Write-Host "Saying hello to $city."
"Hello $city!"
Funzioni dell'agente di orchestrazione
L'orchestratore di concatenamento (ChainingOrchestration/run.ps1) chiama SayHello in sequenza per tre città:
param($Context)
$output = @()
$output += Invoke-DurableActivity -FunctionName 'SayHello' -Input 'Tokyo'
$output += Invoke-DurableActivity -FunctionName 'SayHello' -Input 'Seattle'
$output += Invoke-DurableActivity -FunctionName 'SayHello' -Input 'London'
$output
L'orchestratore fan-out/fan-in (FanOutFanInOrchestration/run.ps1) pianifica le attività in parallelo:
param($Context)
$cities = @('Tokyo', 'Seattle', 'London', 'Paris', 'Berlin')
# Fan-out: schedule all activities in parallel
$parallelTasks = @()
foreach ($city in $cities) {
$parallelTasks += Invoke-DurableActivity -FunctionName 'SayHello' -Input $city -NoWait
}
# Fan-in: wait for all to complete
$output = Wait-ActivityFunction -Task $parallelTasks
$output
Funzioni del client
Le funzioni client attivate da HTTP avviano ogni orchestrazione. Ad esempio, StartChaining/run.ps1:
param($Request, $TriggerMetadata)
$instanceId = Start-DurableOrchestration -FunctionName 'ChainingOrchestration'
Write-Host "Started chaining orchestration with ID = '$instanceId'."
$response = New-DurableOrchestrationCheckStatusResponse -Request $Request -InstanceId $instanceId
Push-OutputBinding -Name Response -Value $response
Configurazione
L'esempio usa l'emulatore di Durable Task Scheduler come backend di archiviazione. Questa operazione è configurata in host.json:
{
"version": "2.0",
"extensions": {
"durableTask": {
"hubName": "default",
"storageProvider": {
"type": "azureManaged",
"connectionStringName": "DURABLE_TASK_SCHEDULER_CONNECTION_STRING"
}
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
},
"managedDependency": {
"enabled": true
}
}
L'impostazione managedDependency installa automaticamente i moduli di PowerShell necessari definiti in requirements.psd1, incluso Durable Functions SDK.
Pulire le risorse
Quando avete finito, fermate i contenitori dell'emulatore:
docker stop dtsemulator azurite && docker rm dtsemulator azurite
Passaggi successivi
- Informazioni sui modelli di app common Durable Functions.
- Vedere la guida autonoma di PowerShell SDK.
- Informazioni sui provider di archiviazione Durable Functions.