Crie sua primeira função durável em Python

O Durable Functions é uma extensão do Azure Functions que permite escrever funções com monitoração de estado em um ambiente sem servidor. A extensão gere o estado, os pontos de verificação e os reinícios por si.

Neste artigo, você aprenderá a usar a extensão Visual Studio Code Azure Functions para criar e testar localmente uma função durável "hello world". Esta função irá orquestrar e encadear chamadas para outras funções. Em seguida, você pode publicar o código da função no Azure.

Captura de ecrã da função durável em execução no Azure.

Pré-requisitos

Para concluir este tutorial:

  • Instalar o Visual Studio Code.

  • Instale a extensão de código do Azure Functions Visual Studio.

  • Certifique-se de que tem a versão mais recente das Ferramentas Principais do Azure Functions.

  • As Funções Duráveis exigem uma conta de armazenamento do Azure. Precisa de uma subscrição do Azure.

  • Certifique-se de que tem a versão 3.7, 3.8, 3.9 ou 3.10 do Python instalada.

Se não tiver uma subscrição do Azure, crie uma conta gratuita do Azure antes de começar.

Criar o seu projeto local

Nesta seção, você usa o Visual Studio Code para criar um projeto local do Azure Functions.

  1. No Visual Studio Code, pressione F1 (ou Ctrl/Cmd+Shift+P) para abrir a paleta de comandos. Na paleta de comandos, procure e selecione Azure Functions: Create New Project....

    Captura de ecrã da janela Criar função.

  2. Escolha um local de pasta vazia para seu projeto e escolha Selecionar.

  1. Siga as instruções e forneça as seguintes informações:

    Pedido valor Description
    Selecione um idioma para seu projeto de aplicativo de função Python Crie um projeto Python Functions local.
    Selecione uma versão Azure Functions v4 Você só verá essa opção quando as Ferramentas Principais ainda não estiverem instaladas. Nesse caso, as Ferramentas Principais são instaladas na primeira vez que você executa o aplicativo.
    Versão de Python Python 3.7, 3.8, 3.9 ou 3.10 O Visual Studio Code criará um ambiente virtual com a versão selecionada.
    Selecione um modelo para a primeira função do seu projeto Ignorar por agora
    Selecione como gostaria de abrir o seu projeto Abrir na janela atual Reabre o Visual Studio Code na pasta selecionada.
  1. Siga as instruções e forneça as seguintes informações:

    Pedido valor Description
    Escolha um idioma Python (Modelo de Programação V2) Crie um projeto Python Functions local usando o modelo de programação V2.
    Selecione uma versão Azure Functions v4 Você só verá essa opção quando as Ferramentas Principais ainda não estiverem instaladas. Nesse caso, as Ferramentas Principais são instaladas na primeira vez que você executa o aplicativo.
    Versão de Python Python 3.7, 3.8, 3.9 ou 3.10 O Visual Studio Code criará um ambiente virtual com a versão selecionada.
    Selecione como gostaria de abrir o seu projeto Abrir na janela atual Reabre o Visual Studio Code na pasta selecionada.

O Visual Studio Code instala as Ferramentas Principais do Azure Functions, se necessário. Ele também cria um projeto de aplicativo de função em uma pasta. Este projeto contém os arquivos de configuração host.json e local.settings.json .

Um arquivo requirements.txt também é criado na pasta raiz. Ele especifica os pacotes Python necessários para executar seu aplicativo de função.

Instale azure-functions-durable a partir do PyPI

Quando você cria o projeto, a extensão de código do Visual Studio do Azure Functions cria automaticamente um ambiente virtual com a versão Python selecionada. Em seguida, você precisa ativar o ambiente virtual em um terminal e instalar algumas dependências exigidas pelo Azure Functions e Durable Functions.

  1. Abra o requirements.txt no editor e altere seu conteúdo para o seguinte código:

    azure-functions
    azure-functions-durable
    
  2. Abra o terminal integrado do editor na pasta atual (Ctrl+Shift+').

  3. No terminal integrado, ative o ambiente virtual na pasta atual, dependendo do seu sistema operacional:

    source .venv/bin/activate
    
  4. No terminal integrado onde o ambiente virtual está ativado, use pip para instalar os pacotes que você definiu.

    python -m pip install -r requirements.txt
    

Crie as suas funções

Um aplicativo básico de Funções Duráveis contém três funções:

  • Função Orchestrator: descreve um fluxo de trabalho que orquestra outras funções.
  • Função de atividade: é chamada pela função orquestradora, executa trabalho e, opcionalmente, retorna um valor.
  • Função de cliente: é uma função normal do Azure que inicia uma função de orquestrador. Este exemplo usa uma função acionada por HTTP.

Função orquestradora

Você usa um modelo para criar o código de função durável em seu projeto.

  1. Na paleta de comandos, procure e selecione Azure Functions: Create Function....

  2. Siga as instruções e forneça as seguintes informações:

    Pedido valor Description
    Selecione um modelo para a sua função Orquestrador de funções duráveis Criar uma orquestração de funções duráveis
    Fornecer um nome de função OláOrchestrator Nome da sua função durável

Você adicionou um orquestrador para coordenar as funções de atividade. Abra o HelloOrchestrator/__init__.py para ver a função orchestrator. Cada chamada para context.call_activity invocar uma função de atividade chamada Hello.

Em seguida, você adicionará a função de atividade referenciada Hello .

Função de atividade

  1. Na paleta de comandos, procure e selecione Azure Functions: Create Function....

  2. Siga as instruções e forneça as seguintes informações:

    Pedido valor Description
    Selecione um modelo para a sua função Atividade de funções duráveis Criar uma função de atividade
    Fornecer um nome de função Hello (Olá) Nome da sua função de atividade

Você adicionou a Hello função de atividade que é invocada pelo orquestrador. Abra Olá/__init__.py para ver que ele usa um nome como entrada e retorna uma saudação. Uma função de atividade é onde você executará ações como fazer uma chamada de banco de dados ou executar um cálculo.

Finalmente, você adicionará uma função acionada por HTTP que inicia a orquestração.

Função de cliente (HTTP starter)

  1. Na paleta de comandos, procure e selecione Azure Functions: Create Function....

  2. Siga as instruções e forneça as seguintes informações:

    Pedido valor Description
    Selecione um modelo para a sua função Funções duráveis HTTP starter Criar uma função inicial HTTP
    Fornecer um nome de função DurableFunctionsHttpStart Nome da função do cliente
    Nível de autorização Anónimo Para fins de demonstração, permita que a função seja chamada sem autenticação

Você adicionou uma função acionada por HTTP que inicia uma orquestração. Abra DurableFunctionsHttpStart/__init__.py para ver que ele usa client.start_new para iniciar uma nova orquestração. Em seguida, ele usa client.create_check_status_response para retornar uma resposta HTTP contendo URLs que podem ser usadas para monitorar e gerenciar a nova orquestração.

Agora você tem um aplicativo de Funções Duráveis que pode ser executado localmente e implantado no Azure.

Requisitos

A versão 2 do modelo de programação Python requer as seguintes versões mínimas:

Ativar modelo de programação v2

A seguinte configuração de aplicativo é necessária para executar o modelo de programação v2:

  • Nome: AzureWebJobsFeatureFlags
  • Valor: EnableWorkerIndexing

Se você estiver executando localmente usando as Ferramentas Principais do Azure Functions, deverá adicionar essa configuração ao seu local.settings.json arquivo. Se você estiver executando no Azure, siga estas etapas com a ferramenta de sua escolha:

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

az functionapp config appsettings set --name <FUNCTION_APP_NAME> --resource-group <RESOURCE_GROUP_NAME> --settings AzureWebJobsFeatureFlags=EnableWorkerIndexing

Para criar um aplicativo básico de Funções Duráveis usando esses 3 tipos de função, substitua o conteúdo de function_app.py pelo seguinte código Python.

import azure.functions as func
import azure.durable_functions as df

myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)

# An HTTP-Triggered Function with a Durable Functions Client binding
@myApp.route(route="orchestrators/{functionName}")
@myApp.durable_client_input(client_name="client")
async def http_start(req: func.HttpRequest, client):
    function_name = req.route_params.get('functionName')
    instance_id = await client.start_new(function_name)
    response = client.create_check_status_response(req, instance_id)
    return response

# Orchestrator
@myApp.orchestration_trigger(context_name="context")
def hello_orchestrator(context):
    result1 = yield context.call_activity("hello", "Seattle")
    result2 = yield context.call_activity("hello", "Tokyo")
    result3 = yield context.call_activity("hello", "London")

    return [result1, result2, result3]

# Activity
@myApp.activity_trigger(input_name="city")
def hello(city: str):
    return f"Hello {city}"

Analise a tabela abaixo para obter uma explicação de cada função e sua finalidade na amostra.

Método Description
hello_orchestrator A função orchestrator, que descreve o fluxo de trabalho. Nesse caso, a orquestração é iniciada, invoca três funções em uma sequência e retorna os resultados ordenados de todas as 3 funções em uma lista.
hello A função de atividade, que executa o trabalho que está sendo orquestrado. A função retorna uma simples saudação à cidade passada como argumento.
http_start Uma função acionada por HTTP que inicia uma instância da orquestração e retorna uma resposta de status de verificação.

Nota

O Durable Functions também suporta os blueprints do Python V2. Para usá-los, você precisará registrar suas funções de blueprint usando a azure-functions-durableBlueprint classe, como mostrado aqui. O plano resultante pode então ser registado normalmente. Veja o nosso exemplo para um exemplo.

Testar localmente a função

As Ferramentas de Núcleo das Funções do Azure permitem-lhe executar um projeto de funções do Azure no seu computador de programação local. Se você não tiver instalado, você será solicitado a instalar essas ferramentas na primeira vez que iniciar uma função do Visual Studio Code.

  1. Para testar sua função, defina um ponto de interrupção no código da Hello função de atividade (Olá/__init__.py). Pressione F5 ou selecione Debug: Start Debugging na paleta de comandos para iniciar o projeto de aplicativo de função. São apresentados os resultados das Ferramentas de Núcleo no painel Terminal.
  1. Para testar sua função, defina um ponto de interrupção no código da hello função de atividade. Pressione F5 ou selecione Debug: Start Debugging na paleta de comandos para iniciar o projeto de aplicativo de função. São apresentados os resultados das Ferramentas de Núcleo no painel Terminal.

Nota

Para obter mais informações sobre depuração, consulte Diagnóstico de funções duráveis.

  1. As Funções Duráveis exigem a execução de uma conta de armazenamento do Azure. Quando o Visual Studio Code solicitar que você selecione uma conta de armazenamento, selecione Selecionar conta de armazenamento.

    Captura de ecrã de como criar uma conta de armazenamento.

  2. Siga os prompts e forneça as seguintes informações para criar uma nova conta de armazenamento no Azure:

    Pedido valor Description
    Selecionar subscrição Nome da sua subscrição Selecione a sua subscrição do Azure
    Selecionar uma conta de armazenamento Criar uma nova conta de armazenamento
    Insira o nome da nova conta de armazenamento Nome exclusivo Nome da conta de armazenamento a ser criada
    Selecionar um grupo de recursos Nome exclusivo Nome do grupo de recursos a ser criado
    Selecionar uma localização região Selecione uma região perto de si
  3. No painel Terminal, copie o ponto final do URL da sua função acionada por HTTP.

    Captura de ecrã da saída local do Azure.

  1. Use seu navegador ou uma ferramenta como Postman ou cURL, envie uma solicitação HTTP para o ponto de extremidade URL. Substitua o último segmento pelo nome da função orquestradora (HelloOrchestrator). O URL deve ser semelhante a http://localhost:7071/api/orchestrators/HelloOrchestrator.

    A resposta é o resultado inicial da função HTTP informando que a orquestração durável foi iniciada com êxito. Ainda não é o resultado final da orquestração. A resposta inclui alguns URLs úteis. Por enquanto, vamos consultar o status da orquestração.

  1. Use seu navegador ou uma ferramenta como Postman ou cURL, envie uma solicitação HTTP para o ponto de extremidade URL. Substitua o último segmento pelo nome da função orquestradora (hello_orchestrator). O URL deve ser semelhante a http://localhost:7071/api/orchestrators/hello_orchestrator.

    A resposta é o resultado inicial da função HTTP informando que a orquestração durável foi iniciada com êxito. Ainda não é o resultado final da orquestração. A resposta inclui alguns URLs úteis. Por enquanto, vamos consultar o status da orquestração.

  1. Copie o valor da URL para statusQueryGetUri, cole-o na barra de endereço do navegador e execute a solicitação. Como alternativa, você também pode continuar a usar o Postman para emitir a solicitação GET.

    A solicitação consultará a instância de orquestração para obter o status. Você deve obter uma resposta eventual, que mostra que a instância foi concluída e inclui as saídas ou resultados da função durável. Tem a seguinte aparência:

{
    "name": "HelloOrchestrator",
    "instanceId": "9a528a9e926f4b46b7d3deaa134b7e8a",
    "runtimeStatus": "Completed",
    "input": null,
    "customStatus": null,
    "output": [
        "Hello Tokyo!",
        "Hello Seattle!",
        "Hello London!"
    ],
    "createdTime": "2020-03-18T21:54:49Z",
    "lastUpdatedTime": "2020-03-18T21:54:54Z"
}
{
    "name": "hello_orchestrator",
    "instanceId": "9a528a9e926f4b46b7d3deaa134b7e8a",
    "runtimeStatus": "Completed",
    "input": null,
    "customStatus": null,
    "output": [
        "Hello Tokyo!",
        "Hello Seattle!",
        "Hello London!"
    ],
    "createdTime": "2020-03-18T21:54:49Z",
    "lastUpdatedTime": "2020-03-18T21:54:54Z"
}
  1. Para parar a depuração, pressione Shift+F5 no Visual Studio Code.

Depois de verificar que a função é executada corretamente no computador local, deve publicar o projeto no Azure.

Iniciar sessão no Azure

Antes de criar recursos do Azure ou publicar seu aplicativo, você deve entrar no Azure.

  1. Se você ainda não estiver conectado, escolha o ícone do Azure na barra de atividades. Em seguida, na área Recursos, escolha Entrar no Azure....

    Captura de ecrã do início de sessão na janela do Azure no VS Code.

    Se já tiver sessão iniciada e conseguir ver as suas subscrições existentes, vá para a secção seguinte. Se você ainda não tiver uma conta do Azure, escolha Criar uma Conta do Azure.... Os alunos podem escolher Criar uma Conta do Azure para Estudantes....

  2. Quando solicitado no navegador, escolha sua conta do Azure e entre usando suas credenciais de conta do Azure. Se criar uma nova conta, pode iniciar sessão depois de a sua conta ser criada.

  3. Depois de iniciar sessão com êxito, pode fechar a nova janela do browser. As assinaturas que pertencem à sua conta do Azure são exibidas na barra lateral.

Criar o aplicativo de função no Azure

Nesta seção, você cria um aplicativo de função e recursos relacionados em sua assinatura do Azure.

  1. Escolha o ícone do Azure na barra de atividades. Em seguida, na área Recursos , selecione o + ícone e escolha a opção Criar Aplicativo de Função no Azure .

    Criar um recurso na sua subscrição do Azure

  2. Forneça as seguintes informações nos pedidos:

    Pedido Seleção
    Selecionar subscrição Escolha a subscrição a utilizar. Você não verá esse prompt quando tiver apenas uma assinatura visível em Recursos.
    Insira um nome globalmente exclusivo para o aplicativo de função Digite um nome válido em um caminho de URL. O nome digitado é validado para garantir que seja exclusivo no Azure Functions.
    Selecione uma pilha de tempo de execução Escolha a versão de idioma na qual você está executando localmente.
    Selecione um local para novos recursos Para um melhor desempenho, escolha uma região perto de si.

    A extensão mostra o status de recursos individuais à medida que eles estão sendo criados no Azure no painel Azure: Log de Atividades .

    Log de criação de recursos do Azure

  3. Quando a criação estiver concluída, os seguintes recursos do Azure serão criados na sua subscrição. Os recursos são nomeados com base no nome do aplicativo de função:

    • Um grupo de recursos, que é um contêiner lógico para recursos relacionados.
    • Uma conta de Armazenamento do Azure padrão, que mantém o estado e outras informações sobre seus projetos.
    • Um aplicativo de função, que fornece o ambiente para executar seu código de função. Um aplicativo de função permite agrupar funções como uma unidade lógica para facilitar o gerenciamento, a implantação e o compartilhamento de recursos dentro do mesmo plano de hospedagem.
    • Um plano do Serviço de Aplicativo, que define o host subjacente para seu aplicativo de função.
    • Uma instância do Application Insights conectada ao aplicativo de função, que rastreia o uso de suas funções no aplicativo.

    Depois de criar a aplicação de funções, é apresentada uma notificação e o pacote de implementação é aplicado.

    Gorjeta

    Por padrão, os recursos do Azure exigidos pelo seu aplicativo de função são criados com base no nome do aplicativo de função fornecido. Por padrão, eles também são criados no mesmo novo grupo de recursos com o aplicativo de função. Se você quiser personalizar os nomes desses recursos ou reutilizar recursos existentes, você precisa publicar o projeto com opções de criação avançadas .

Implementar o projeto no Azure

Importante

A implantação em um aplicativo de função existente sempre substitui o conteúdo desse aplicativo no Azure.

  1. Na área Recursos da atividade do Azure, localize o recurso de aplicativo de função que você acabou de criar, clique com o botão direito do mouse no recurso e selecione Implantar no aplicativo funcional....

  2. Quando solicitado sobre a substituição de implantações anteriores, selecione Implantar para implantar seu código de função no novo recurso de aplicativo de função.

  3. Após a conclusão da implantação, selecione Exibir saída para exibir os resultados da criação e da implantação, incluindo os recursos do Azure que você criou. Se você perder a notificação, selecione o ícone de sino no canto inferior direito para vê-lo novamente.

    Captura de ecrã da janela Ver Saída.

Testar a sua função no Azure

  1. Copie o URL do acionador de HTTP no painel Resultados. A URL que chama sua função acionada por HTTP deve estar neste formato: https://<functionappname>.azurewebsites.net/api/orchestrators/HelloOrchestrator
  1. Copie o URL do acionador de HTTP no painel Resultados. A URL que chama sua função acionada por HTTP deve estar neste formato: https://<functionappname>.azurewebsites.net/api/orchestrators/hello_orchestrator
  1. Cole este novo URL para a solicitação HTTP na barra de endereço do navegador. Você deve obter a mesma resposta de status que antes ao usar o aplicativo publicado.

Próximos passos

Você usou o Visual Studio Code para criar e publicar um aplicativo de função durável do Python.