Exercício – Criar um fluxo de trabalho usando as Durable Functions
Nessa unidade, você usará o cenário de exemplo da unidade anterior para aprender a criar um fluxo de trabalho de aprovação no portal do Azure usando as Durable Functions.
Criar um aplicativo de funções
Entre no portal do Azure usando a conta que você utilizou para ativar a área restrita.
No menu do portal do Azure ou na Home page, em Serviços do Azure, selecione Criar um recurso. O painel Criar um recurso será exibido.
Procure e selecione Aplicativo de Funções. Selecione Consumo e, em seguida, selecione o botão Selecionar. O painel Criar Aplicativo de Funções é exibido.
Na guia Básico, insira os valores a seguir para cada configuração.
Configuração Valor Descrição Detalhes do projeto Subscription Assinatura do Concierge Especifica a assinatura na qual este aplicativo de funções será criado. Grupo de recursos Na lista suspensa, selecione [nome do grupo de recursos da área restrita] Especifica o nome do grupo de recursos no qual o aplicativo de funções será criado. Criaremos o aplicativo de funções no grupo de recursos de área restrita que foi atribuído quando ativamos a área restrita, ou seja, [nome do grupo de recursos de área restrita] .Detalhes da Instância Nome do aplicativo de funções [Nome globalmente exclusivo] Especifica o nome que identifica o novo aplicativo de funções. Os caracteres válidos são a-z
,0-9
e-
.Publicação Código Especifica que a função usará o código em vez de um contêiner. Pilha de runtime Node.js Especifica que o código de exemplo nesse módulo é escrito em JavaScript. Versão 20 LTS Especifica a versão da pilha de runtime. Região [Selecione na lista após esta seção] Escolha a região mais próxima de você que também seja uma das Regiões de área restrita permitidas listadas abaixo. Sistema operacional Sistema operacional Windows Especifica o sistema operacional que hospeda o aplicativo de funções. Plano A área restrita gratuita permite criar recursos em um subconjunto das regiões globais do Azure. Selecione uma região na seguinte lista ao criar recursos:
- Oeste dos EUA 2
- Centro-Sul dos Estados Unidos
- Centro dos EUA
- Leste dos EUA
- Europa Ocidental
- Sudeste Asiático
- Leste do Japão
- Brazil South
- Australia Southeast
- Índia Central
Selecione Avançar: Armazenamento.
Na guia Segurança, insira os valores a seguir para cada configuração.
Configuração Valor Descrição Storage Conta de armazenamento [Nome globalmente exclusivo] Especifica o nome da nova conta de armazenamento usada pelo aplicativo de funções (que não precisa corresponder ao nome globalmente exclusivo que você especificou para a sua função). Os nomes da conta de armazenamento devem ter entre 3 e 24 caracteres e podem conter apenas números e letras minúsculas. Essa caixa de diálogo preenche o campo de forma automática com um nome exclusivo gerado dinamicamente. No entanto, fique à vontade para usar um nome diferente ou até mesmo uma conta existente. Selecione Avançar: Rede. Aceite os padrões.
Selecione Avançar: Monitoramento.
Na guia Monitoramento, insira o valor a seguir para a configuração.
Configuração Valor Descrição Application Insights Habilitar o Application Insights Não Especifica que o Application Insights será desabilitado para esse módulo. Selecione Examinar + criar e examine as opções que você configurou. Se estiver satisfeito com suas opções, selecione Criar para provisionar e implantar o aplicativo de funções.
Aguarde a implantação ser concluída antes de continuar. A implantação pode levar alguns minutos.
Instalar o pacote npm durable-functions
Como estamos criando o Durable Functions do JavaScript, precisamos instalar o pacote npm do durable-functions
. Para isso, execute as etapas a seguir.
Escolha Ir para recursos para selecionar o novo aplicativo de funções. O painel Aplicativo de Funções é exibido.
No painel do menu à esquerda, em Ferramentas de Desenvolvimento, selecione Editor do Serviço de Aplicativo (versão prévia) e escolha Abrir editor. O painel de Início Rápido do Editor do Serviço de Aplicativo é exibido em uma nova janela do navegador.
No painel de menu à esquerda, realce a pasta WWWROOT.
No menu da barra de ferramentas à esquerda, selecione o ícone Abrir Console.
Essa ação inicia o console. Você pode usar esse console para acessar o servidor web que hospeda suas funções e escrever o código para essas funções.
Crie um arquivo package.json.
Execute os comandos a seguir no console para criar o arquivo JSON e abri-lo no editor.
touch package.json open package.json
Adicione o código seguinte:
{ "name": "example", "version": "1.0.0" }
Substitua
example
pelo nome do seu pacote. Por exemplo, você poderia usar um nome globalmente exclusivo especificado para sua função anteriormente.
Selecione Ctrl+S para salvar o arquivo e Ctrl+Q para fechar o documento.
Alterne novamente para o portal do Azure.
Na barra do menu à esquerda, em Ferramentas de Desenvolvimento, selecione Console. O painel Console é exibido para o seu aplicativo de funções.
Execute o comando a seguir:
npm install durable-functions
Esse comando instrui o gerenciador de pacotes de nós a instalar o pacote do
durable-functions
e as dependências necessárias. Esses comandos podem levar alguns minutos para serem concluídos e o gerenciador de pacotes de nós poderá mostrar alguns avisos, que você pode ignorar.Observação
Se for solicitado a instalar uma versão mais recente do npm, use o comando especificado no erro para instalar a versão mais recente e, a seguir, instale o pacote do
durable-functions
assim que a nova versão estiver instalada.Aguarde todos os pacotes concluírem a instalação.
No painel de menu à esquerda, role para cima e selecione Visão geral, e na barra de menu superior, selecione Reiniciar e Sim quando aparecer a solicitação para reiniciar.
Aguarde a reinicialização ser concluída antes de continuar.
Criar a função cliente para enviar uma proposta de design
No menu do portal do Azure ou na Página Inicial, em Recursos recentes, selecione Ver tudo e selecione seu aplicativo de funções. O painel Aplicativo de Funções é exibido.
Na página Visão geral, selecione a guia Funções no centro da tela.
Selecione o botão Criar no portal do Azure. O painel Criar função é exibido.
Na guia Selecionar um modelo, na caixa Filtro, digite inicializador HTTP do Durable Functions e selecione esse modelo na lista. Esse modelo cria uma função durável que é executada em resposta a uma solicitação HTTP.
Na guia Detalhes do modelo, para o campo Nova Função, digite HttpStart como o nome da função e, no campo Nível de autorização, selecione Função e, a seguir, selecione Criar. O painel HttpStart é exibido para sua função.
No painel de menu esquerdo, em Desenvolvedor, selecione Código + Teste. O painel Código + Teste é exibido para sua função.
O código para o arquivo index.js é exibido no editor. O arquivo deverá ser parecido com o seguinte exemplo:
const df = require("durable-functions"); module.exports = async function (context, req) { const client = df.getClient(context); const instanceId = await client.startNew(req.params.functionName, undefined, req.body); context.log(`Started orchestration with ID = '${instanceId}'.`); return client.createCheckStatusResponse(context.bindingData.req, instanceId); };
Na lista suspensa dos arquivos em sua função, selecione function.json para exibir as associações vinculadas à nova função. Essas informações especificam os requisitos de autenticação, junto com os métodos HTTP que podem disparar a função. Esse arquivo também especifica que a função é um cliente que inicia o processo de orquestração. O arquivo deverá ser parecido com o seguinte exemplo:
{ "bindings": [ { "authLevel": "function", "name": "req", "type": "httpTrigger", "direction": "in", "route": "orchestrators/{functionName}", "methods": [ "post", "get" ] }, { "name": "$return", "type": "http", "direction": "out" }, { "name": "starter", "type": "orchestrationClient", "direction": "in" } ] }
Observação
Uma associação associa recursos e outros itens a um gatilho. Trata-se de um mecanismo declarativo que remove a necessidade de incorporar ao seu código referências a outros serviços e funções.
Criar a função Orquestrador
No menu do portal do Azure ou na Página Inicial, em Recursos recentes, selecione Ver tudo e selecione seu aplicativo de funções. O painel Aplicativo de Funções é exibido.
Na página Visão geral, selecione a guia Funções no centro da tela.
Na barra de menus do Functions, selecione Criar. O painel Criar função é exibido.
Na guia Selecionar um modelo, na caixa Filtro, digite Orquestrador do Durable Functions e selecione esse modelo na lista. Esse modelo cria uma função durável que orquestra a execução de funções.
Na guia Detalhes do modelo, para o campo Nova Função, digite OrchFunction como o nome da função e, a seguir, selecione Criar. O painel da função OrchFunction é exibido.
No painel de menu esquerdo, em Desenvolvedor, selecione Código + Teste. O painel Código + Teste é exibido para sua função.
O código para o arquivo index.js é exibido no editor.
Substitua o código existente pelo código a seguir.
const df = require("durable-functions"); module.exports = df.orchestrator(function* (context) { const outputs = []; /* * We will call the approval activity with a reject and an approved to simulate both */ outputs.push(yield context.df.callActivity("Approval", "Approved")); outputs.push(yield context.df.callActivity("Approval", "Rejected")); return outputs; });
Esse código chama uma função de Atividade denominada Aprovação, que você criará em breve. O código na função Orquestrador invoca a função Aprovação duas vezes. A primeira vez simula a aceitação da proposta e a segunda vez testa a lógica de rejeição da proposta.
O valor retornado por cada chamada é combinado e transmitido de volta para a função cliente. Em um ambiente de produção, a função de orquestração chamará uma série de funções de atividade que tomam a decisão de aceitar/rejeitar e retornam o resultado dessas atividades.
Na barra de menus superior, selecione Salvar para salvar sua nova função.
Criar a função Atividade
No menu do portal do Azure ou na Página Inicial, em Recursos recentes, selecione Ver tudo e selecione seu aplicativo de funções. O painel Aplicativo de Funções é exibido.
Na página Visão geral, selecione a guia Funções no centro da tela.
Na barra de menus do Functions, selecione Criar. O painel Criar função é exibido.
Na guia Selecionar um modelo, na caixa Filtro, digite Atividade do Durable Functions e selecione esse modelo na lista. Esse modelo cria uma função durável que é executada quando uma atividade é chamada por uma função de orquestrador.
Na guia Detalhes do modelo, para o campo Nova Função, digite Aprovação para o nome da função e, a seguir, selecione Criar. O painel Aprovação é exibido para seu aplicativo de funções.
No painel de menu esquerdo, em Desenvolvedor, selecione Código + Teste. O painel Código + Teste é exibido para sua função.
O código para o arquivo index.js é exibido no editor.
Substitua o código existente pelo código a seguir.
module.exports = async function (context) { return `Your project design proposal has been - ${context.bindings.name}!`; };
Essa função retornará uma mensagem que indica o status da proposta. A expressão
context.bindings.name
éAccepted
ouRejected
, dependendo do parâmetro passado do orquestrador para a função. Em um cenário do mundo real, você adicionaria a lógica que se encarrega das operações de aceitação ou rejeição nessa função.Na barra de menus superior, selecione Salvar para salvar sua nova função.
Verificar se o fluxo de trabalho das Durable Functions é iniciado
No menu do portal do Azure ou na Página Inicial, em Recursos recentes, selecione Ver tudo e selecione seu aplicativo de funções. O painel Aplicativo de Funções é exibido.
Selecione a guia Funções no centro da página.
Selecione a função HttpStart. O painel HttpStart é exibido para sua função.
Na barra de menus superior, selecione Obter URL da Função e copie a URL. A URL deverá ser parecida com o seguinte exemplo:
https://example.azurewebsites.net/api/orchestrators/{functionName}?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
Você usará essa URL para executar suas funções.
Abra uma janela do navegador e acesse a URL copiada. Na URL, substitua o espaço reservado {functionName} por OrchFunction, que deve ser semelhante ao seguinte exemplo:
https://example.azurewebsites.net/api/orchestrators/OrchFunction?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
A mensagem de resposta contém um conjunto de pontos de extremidade de URI que você pode usar para monitorar e gerenciar a execução, que deverá ser semelhante ao seguinte exemplo:
{ "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "statusQueryGetUri": "https://example.azurewebsites.net/...", "sendEventPostUri": "https://example.azurewebsites.net/...", "terminatePostUri": "https://example.azurewebsites.net/...", "rewindPostUri": "https://example.azurewebsites.net/...", "purgeHistoryDeleteUri": "https://example.azurewebsites.net/..." }
Copie o valor statusQueryGetUri, depois use um navegador da Web para acessar essa URL. Você deverá ver uma mensagem de resposta semelhante ao seguinte exemplo:
{ "name": "OrchFunction", "instanceId": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "runtimeStatus": "Completed", "input": null, "customStatus": null, "output": [ "Your project design proposal has been - Approved!", "Your project design proposal has been - Rejected!" ], "createdTime": "2019-04-16T15:23:03Z", "lastUpdatedTime": "2019-04-16T15:23:35Z" }
Lembre-se de que a função de orquestração executa a função Atividade duas vezes. Na primeira vez, a função de atividade indica que a proposta de projeto foi aceita. Na segunda vez, a proposta é rejeitada. A função de orquestração combina as mensagens de ambas as chamadas de função e as retorna para a função cliente.