Guida all'SDK di PowerShell per Durable Functions indipendente

L'Durable Functions PowerShell SDK autonomo (AzureFunctions.PowerShell.Durable.SDK) è l'approccio consigliato per la creazione di app Durable Functions con PowerShell. Sostituisce l'SDK predefinito con logica di riproduzione più veloce (lo stesso motore dell'SDK isolato C#), il controllo delle versioni indipendenti e la gestione delle eccezioni migliorata, la gestione dei valori Null e la serializzazione. L'SDK predefinito rimane disponibile per PowerShell 7.4 e versioni precedenti, ma verrà rimosso in una versione principale futura del ruolo di lavoro di PowerShell.

Elenco di controllo per la migrazione

Usare l'elenco di controllo seguente per tenere traccia dello stato di avanzamento in ogni passaggio della migrazione:

Passo Sezione
1. Verificare i prerequisiti Prerequisiti
2. Abilitare l'SDK autonomo Abilitare l'SDK autonomo
3. Installare il pacchetto SDK Installare il pacchetto SDK
4. Importare l'SDK Importare l'SDK
5. Eseguire l'app Esegui l'app
6. Esaminare le modifiche di interfaccia e comportamento Eseguire la migrazione dall'SDK predefinito

Installare l'SDK autonomo

Seguire questa procedura per installare e abilitare l'SDK autonomo nell'app esistente.

Verificare i prerequisiti

PowerShell SDK autonomo richiede le versioni minime seguenti:

Abilitare l'SDK autonomo

Per eseguire PowerShell SDK autonomo, è necessaria l'impostazione dell'applicazione seguente:

  • Nome: ExternalDurablePowerShellSDK
  • Valore: "true"

Questa impostazione dell'applicazione disabilita l'SDK Durable integrato per PowerShell versioni 7.4 e successive, forzando il worker a usare l'SDK esterno.

Se si esegue localmente usando Funzioni di Azure Core Tools, è consigliabile aggiungere questa impostazione al local.settings.json file. Se si esegue in Azure, seguire questa procedura con lo strumento preferito:

Sostituire <FUNCTION_APP_NAME> e <RESOURCE_GROUP_NAME> rispettivamente con il nome dell'app per le funzioni e del gruppo di risorse.

az functionapp config appsettings set --name <FUNCTION_APP_NAME> --resource-group <RESOURCE_GROUP_NAME> --settings ExternalDurablePowerShellSDK="true"

Installare il pacchetto SDK

Sono disponibili due opzioni per l'installazione del pacchetto SDK. Usare le dipendenze gestite (consigliate per la maggior parte delle app) o aggregare il modulo con il contenuto dell'app se è necessario aggiungere una versione specifica o la distribuzione non supporta le dipendenze gestite. È necessaria una sola opzione.

Per installare l'SDK come dipendenza gestita, seguire le indicazioni sulle dipendenze gestite. Verificare prima di tutto che host.json contenga una managedDependency sezione con enabled impostato su true:

{
  "version": "2.0",
  "managedDependency": {
    "enabled": true
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[3.*, 4.0.0)"
  }
}

Specificare quindi una voce per l'SDK nel requirements.psd1 file:

# This file enables modules to be automatically managed by the Functions service.
# See https://aka.ms/functionsmanageddependency for additional information.
#
@{
    # For latest supported version, go to 'https://www.powershellgallery.com/packages/AzureFunctions.PowerShell.Durable.SDK/'.
    'AzureFunctions.PowerShell.Durable.SDK' = '2.*'
}

Opzione 2: Includere il modulo SDK nel contenuto dell'app

Per aggregare l'SDK con l'app, inserire il pacchetto SDK all'interno di una ".\Modules" directory nella radice dell'app. Per altre informazioni, vedere Inclusione di moduli nel contenuto dell'app.

Dalla radice dell'applicazione: creare una nuova directory e scaricare l'SDK.

Save-Module -Name AzureFunctions.PowerShell.Durable.SDK -AllowPrerelease -Path ".\Modules"

Importare l'SDK

Aggiungere la riga seguente al file profile.ps1 per importare l'SDK in ogni avvio a freddo.

Import-Module AzureFunctions.PowerShell.Durable.SDK -ErrorAction Stop

Avvia la tua app

Avviare l'app con func host start. L'SDK autonomo è ora attivo.

Eseguire la migrazione dall'SDK predefinito

Se si esegue la migrazione di un'app esistente dall'SDK predefinito, esaminare l'interfaccia e le modifiche comportamentali seguenti.

I nuovi cmdlet

Cmdlet Descrzione
Invoke-DurableSubOrchestrator Chiamare sotto-orchestratori dall'interno di un flusso di lavoro dell'orchestratore.
Suspend-DurableOrchestration Sospendere un'istanza di orchestrazione in esecuzione.
Resume-DurableOrchestration Riprendere un'istanza di orchestrazione sospesa in precedenza.

Cmdlet modificati

Cambiare dettagli
Get-DurableTaskResult Ora accetta un singolo Task come argomento invece di un elenco di attività.
New-DurableRetryOptionsNew-DurableRetryPolicy Rinominato. Per la compatibilità con le versioni precedenti viene fornito un alias per il nome precedente.

Modifiche comportamentali

Gestione delle eccezioni in Wait-DurableTask

Le eccezioni generate dalle attività pianificate con Wait-DurableTask (come nel modello Fan-Out/Fan-In) non vengono più ignorate automaticamente. Il cmdlet ora propaga l'eccezione all'agente di orchestrazione in modo da poterla gestire nel codice.

SDK predefinito : le eccezioni sono state ingoiate in modo invisibile all'utente:

# Exceptions from failed activities were lost
$tasks = @()
$tasks += Invoke-DurableActivity -FunctionName "RiskyActivity" -Input "item1" -NoWait
$tasks += Invoke-DurableActivity -FunctionName "RiskyActivity" -Input "item2" -NoWait
$results = Wait-DurableTask -Task $tasks
# No error even if an activity failed

SDK autonomo : le eccezioni vengono propagate all'agente di orchestrazione:

try {
    $tasks = @()
    $tasks += Invoke-DurableActivity -FunctionName "RiskyActivity" -Input "item1" -NoWait
    $tasks += Invoke-DurableActivity -FunctionName "RiskyActivity" -Input "item2" -NoWait
    $results = Wait-DurableTask -Task $tasks
} catch {
    # Handle the activity failure
    Write-Host "An activity failed: $_"
}

I valori null vengono mantenuti nei Wait-DurableTask risultati

I valori Null non vengono più eliminati dall'elenco dei risultati di una Wait-DurableTask chiamata (WhenAll). Una chiamata con esito positivo senza il flag -Any restituisce ora una matrice con le stesse dimensioni del numero di attività pianificate, incluse le voci $null per le attività che hanno restituito null.

SDK integrato — i risultati nulli sono stati eliminati:

# 3 tasks scheduled, but if one returned $null, results had only 2 items
$results = Wait-DurableTask -Task $tasks
$results.Count  # Could be 2 instead of 3

SDK autonomo: i risultati Null vengono mantenuti.

# 3 tasks scheduled, results always has 3 items
$results = Wait-DurableTask -Task $tasks
$results.Count  # Always 3, with $null for activities that returned null

Informazioni di riferimento su SDK

Per informazioni di riferimento complete sui cmdlet, vedere AzureFunctions.PowerShell.Durable.SDK Module. Dopo aver importato il modulo, è anche possibile eseguire Get-Help *-Durable* per elencare tutti i cmdlet disponibili o Get-Help <cmdlet-name> -Full per un utilizzo dettagliato.

Ottenere supporto

Segnalare bug e richieste di funzionalità nel repository GitHub dell'SDK.

Passaggi successivi