Compartilhar via


Guia para o SDK do PowerShell do Durable Functions autônomo

O SDK do PowerShell do Durable Functions (DF) agora está disponível, em versão prévia, como um pacote autônomo no Galeria do PowerShell: AzureFunctions.PowerShell.Durable.SDK. Depois que esse pacote do SDK for GA, ele será o meio recomendado de criar aplicativos do Durable Functions com o PowerShell. Neste artigo, explicamos os benefícios dessa alteração e quais alterações você pode esperar ao adotar esse novo pacote.

Observação

O pacote está atualmente em versão prévia.

Motivação por trás do SDK autônomo

O SDK do DF anterior foi integrado ao trabalho de linguagem do PowerShell. Essa abordagem veio com o benefício de que os aplicativos do Durable Functions poderiam ser criados prontos para usuários do PowerShell do Azure Functions. No entanto, ele também veio com várias deficiências:

  • Novos recursos, correções de bugs e outras alterações dependiam da cadência de versão de trabalho do PowerShell.
  • Devido à natureza de atualização automática do trabalho do PowerShell, o SDK do DF precisava ser conservador sobre a correção de bugs, pois qualquer alteração de comportamento poderia constituir uma alteração interruptiva.
  • O algoritmo de reprodução utilizado pelo SDK interno do DF estava desatualizado: outros SDKs do DF já utilizavam uma implementação mais rápida e confiável.

Ao criar um pacote autônomo do SDK do PowerShell do DF, podemos superar essas deficiências. Esses são os benefícios de utilizar este novo pacote SDK autônomo:

  • Esse SDK inclui muitas melhorias altamente solicitadas, como melhor tratamento de exceções e valores nulos, bem como correções de serialização.
  • O pacote recebe uma versão independente do trabalho do PowerShell. Isso permite que os usuários incorporem novos recursos e correções assim que estiverem disponíveis, evitando também alterações interruptivas de atualizações automáticas.
  • A lógica de reprodução é mais rápida e mais confiável: ela usa o mesmo mecanismo de reprodução que o SDK isolado do DF para C#.

Plano de substituição para o SDK interno do PowerShell do DF

O SDK DF interno na função de trabalho do PowerShell permanecerá disponível para o PowerShell 7.4, 7.2 e versões anteriores.

Planejamos eventualmente lançar uma nova versão principal do trabalho do PowerShell sem o SDK interno. Nesse ponto, os usuários precisariam instalar o SDK separadamente utilizando esse pacote autônomo; as etapas de instalação estão descritas abaixo.

Instalar e habilitar o SDK

Confira esta seção para saber como instalar e habilitar o novo SDK autônomo em seu aplicativo existente.

Pré-requisitos

O SDK autônomo do PowerShell requer as seguintes versões mínimas:

Aceitar o SDK autônomo do DF

A seguinte configuração de aplicativo é obrigatória para executar o SDK do PowerShell autônomo:

  • Nome: ExternalDurablePowerShellSDK
  • Valor: "true"

Essa configuração de aplicativo desabilitará o SDK interno do Durable para as versões 7.2 e posteriores do PowerShell, forçando o trabalhador a utilizar o SDK externo.

Se você estiver executando localmente com o Azure Functions Core Tools, deverá adicionar essa configuração ao arquivo local.settings.json. Se você estiver executando no Azure, siga essas etapas com a ferramenta de sua preferência:

Substitua <FUNCTION_APP_NAME> e <RESOURCE_GROUP_NAME> pelo nome do seu aplicativo de funções e grupo de recursos, respectivamente.

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

Instalar e importar o SDK

Você tem duas opções para instalar o pacote do SDK: ele pode ser instalado usando Dependências Gerenciadas ou agrupado com o conteúdo do aplicativo. Nesta seção, descrevemos as duas opções, mas apenas uma delas é necessária.

Opção de instalação 1: usar dependências gerenciadas

Para instalar o SDK como uma dependência gerenciada, você precisará seguir as diretrizes de dependências gerenciadas. Examine as diretrizes para obter detalhes. Em resumo, primeiro você precisa garantir que o host.json contenha uma seção managedDependency com uma propriedade enabled definida como true. Veja abaixo um exemplo host.json que atende a esse requisito:

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

Em seguida, basta especificar uma entrada para o SDK do DF em seu arquivo requirements.psd1, como no exemplo abaixo:

# 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' = '1.*'
}

Opção de instalação 2: usar módulos personalizados

Para instalar o SDK do DF autônomo como um módulo personalizado, você precisa seguir as diretrizes sobre a inclusão de módulos no conteúdo do aplicativo. Examine os documentos mencionados anteriormente para obter detalhes. Em resumo, você precisará colocar o pacote do SDK dentro de um diretório ".\Modules" localizado na raiz do aplicativo.

Por exemplo, de dentro da raiz do aplicativo e depois de criar um diretório ".\Modules", você pode baixar o SDK autônomo no diretório de módulos como tal:

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

Importando o SDK

A etapa final é importar o SDK para a sessão do código. Para fazer isso, importe o SDK do PowerShell por meio de Import-Module AzureFunctions.PowerShell.Durable.SDK -ErrorAction Stop em seu arquivo profile.ps1. Por exemplo, se o aplicativo sofreu scaffolding por meio de modelos, seu arquivo profile.ps1 pode acabar se parecendo com o seguinte:

# Azure Functions profile.ps1
#
# This profile.ps1 will get executed every "cold start" of your Function App.
# "cold start" occurs when:
#
# * A Function App starts up for the very first time
# * A Function App starts up after being de-allocated due to inactivity
#
# You can define helper functions, run commands, or specify environment variables
# NOTE: any variables defined that are not environment variables will get reset after the first execution

# Authenticate with Azure PowerShell using MSI.
# Remove this if you are not planning on using MSI or Azure PowerShell.
if ($env:MSI_SECRET) {
    Disable-AzContextAutosave -Scope Process | Out-Null
    Connect-AzAccount -Identity
}

# Uncomment the next line to enable legacy AzureRm alias in Azure PowerShell.
# Enable-AzureRmAlias

# You can also define functions or aliases that can be referenced in any of your PowerShell functions.

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

Essas são todas as etapas necessárias para utilizar o próximo SDK do PowerShell. Execute seu aplicativo normalmente, por meio de func host start em seu terminal, para começar a usar o SDK.

Guia de migração

Nesta seção, descrevemos a interface e as alterações comportamentais que você pode esperar ao utilizar o novo SDK.

Novos cmdlets

  • Invoke-DurableSubOrchestrator -FunctionName <Name> -Input <Input> é um novo CmdLet que permite que os usuários utilizem suborquestradores em seus fluxos de trabalho.

Cmdlets modificados

  • O CmdLet Get-DurableTaskResult -Task <task> agora aceita apenas uma única tarefa como argumento, em vez de aceitar uma lista de tarefas.

Alterações de comportamento

  • Exceções geradas por atividades agendadas com Wait-DurableTask (como no padrão Fan-Out/Fan-In) não são mais ignoradas silenciosamente. Em vez disso, em uma exceção, o CmdLet propaga essa exceção para o orquestrador para que ele possa ser tratado pelo código do usuário.
  • Os valores nulos não são mais removidos da lista de resultados de uma invocação Wait-DurableTask (ou seja, WhenAll). Isso significa que uma invocação bem-sucedida de Wait-DurableTask sem o sinalizador -Any deve retornar uma matriz do mesmo tamanho que o número de tarefas agendadas por ela.

Onde obter suporte, fornecer comentários e sugerir alterações

Durante a fase de visualização desta versão, o SDK autônomo pode introduzir mais algumas alterações. Essas alterações podem ser influenciadas pela comunidade, portanto, relate comentários e sugestões ao novo repositório GitHub do SDK.