Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Utilize Durable Functions, uma funcionalidade do Funções do Azure, para criar fluxos de trabalho sem servidor com estado em PowerShell. Neste quickstart, clonas e executas uma aplicação de exemplo que demonstra dois padrões comuns de orquestração:
- Encadeamento de funções: Chama atividades sequencialmente (Tóquio → Seattle → Londres).
- Fan-out/fan-in: Invoca atividades em paralelo em cinco cidades e, em seguida, agrega os resultados.
No final, terá ambas as orquestrações a correr localmente com o emulador Durable Task Scheduler e poderá ver o seu estado no painel.
- Clonar e preparar o projeto de exemplo "Hello Cities".
- Configura o emulador Durable Task Scheduler e o Azurite para desenvolvimento local.
- Execute a aplicação de funções e acione ambas as orquestrações.
- Reveja o estado da orquestração e os resultados no painel do Durable Task Scheduler.
Pré-requisitos
- PowerShell 7.4+ instalado.
- Funções do Azure Core Tools v4 ou posterior.
- Docker para correr o emulador e o Azurite.
- Clone o repositório GitHub Durable Task Scheduler para usar o exemplo de início rápido.
Configurar o emulador do Durable Task Scheduler
O emulador Durable Task Scheduler fornece um ambiente de desenvolvimento local para que possa testar orquestrações sem uma subscrição Azure. O host PowerShell Functions também requer Azurite para armazenamento local.
Inicie ambos os recipientes:
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
Dica
Assim que o emulador estiver em execução, pode aceder ao painel do Durable Task Scheduler em http://localhost:8082 para monitorizar as orquestrações.
Executa a amostra de início rápido
Navegue até ao diretório de exemplos Hello Cities:
cd samples/durable-functions/powershell/HelloCitiesVerifique se o
local.settings.jsonficheiro contém a seguinte configuração:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "powershell", "DURABLE_TASK_SCHEDULER_CONNECTION_STRING": "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None" } }Inicie a aplicação de funções:
func startNoutro terminal, desencadeie a orquestração de encadeamento de funções:
$response = Invoke-RestMethod -Method POST -Uri http://localhost:7071/api/StartChaining $responseA resposta contém URLs de estado da instância de orquestração. Copie o
statusQueryGetUrivalor e execute para verificar o resultado:Invoke-RestMethod -Uri $response.statusQueryGetUriAccione a orquestração fan-out/fan-in:
$response = Invoke-RestMethod -Method POST -Uri http://localhost:7071/api/StartFanOutFanIn Invoke-RestMethod -Uri $response.statusQueryGetUri
Resultados esperados
O pedido POST devolve uma resposta JSON com URLs de estado. Por exemplo:
{
"id": "<instanceId>",
"statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/<instanceId>?code=...",
"sendEventPostUri": "...",
"terminatePostUri": "...",
"purgeHistoryDeleteUri": "..."
}
Quando consulta statusQueryGetUri e o runtimeStatus da orquestração é Completed, pode encontrar os resultados da saudação no campo output. A orquestração de encadeamento regressa:
{
"name": "ChainingOrchestration",
"runtimeStatus": "Completed",
"output": ["Hello Tokyo!", "Hello Seattle!", "Hello London!"]
}
A orquestração de fan-out/fan-in regressa:
{
"name": "FanOutFanInOrchestration",
"runtimeStatus": "Completed",
"output": ["Hello Tokyo!", "Hello Seattle!", "Hello London!", "Hello Paris!", "Hello Berlin!"]
}
Dica
Se runtimeStatus mostrar Running ou Pending, espere um momento e faça a pergunta statusQueryGetUri novamente.
Abra o painel do Durable Task Scheduler em http://localhost:8082 para ver o estado da orquestração e o histórico de execução.
Entenda o código
O projeto de exemplo utiliza o modelo de funções PowerShell, onde cada função vive no seu próprio subdiretório com um function.json ficheiro de ligação e um run.ps1 script.
Função de atividade
A SayHello atividade (SayHello/run.ps1) assume o nome da cidade e devolve uma saudação:
param($city)
Write-Host "Saying hello to $city."
"Hello $city!"
Funções de orquestrador
O orquestrador de encadeamentos (ChainingOrchestration/run.ps1) invoca SayHello sequencialmente para três cidades:
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
O orquestrador fan-out/fan-in (FanOutFanInOrchestration/run.ps1) programa atividades em paralelo:
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
Funções do cliente
As funções cliente ativadas por HTTP iniciam cada orquestração. Por exemplo: 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
Configuração
O exemplo utiliza o emulador Durable Task Scheduler como backend de armazenamento. Isto está configurado em 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
}
}
A definição managedDependency instala automaticamente os módulos PowerShell necessários definidos em requirements.psd1, incluindo o SDK Durable Functions.
Limpeza de recursos
Pare os contentores do emulador quando terminar:
docker stop dtsemulator azurite && docker rm dtsemulator azurite
Passos seguintes
- Aprenda sobre padrões comuns de aplicações de Durable Functions.
- Consulte o guia standalone do PowerShell SDK.
- Saiba mais sobre os fornecedores de armazenamento do Durable Functions.