Exercício – Criar um fluxo de trabalho usando As Funções Duráveis
Neste exercício, você usa o cenário de exemplo da unidade anterior para aprender a criar um fluxo de trabalho de aprovação no portal do Azure usando o Durable Functions.
Criar um aplicativo de funções
Entre no portal do Azure usando a mesma conta usada para ativar a área restrita.
No menu do portal do Azure ou na home page, nos serviços do Azure, selecione Criar um recurso. O painel Criar um recurso é exibido.
Pesquise e selecione Aplicativo de Funções. Selecione Consumo e, em seguida, clique no botão Selecionar. O painel Criar Aplicativo de Funções é exibido.
Na guia Noções básicas, insira os valores a seguir para cada configuração.
Configurações Valor Descrição Detalhes do projeto Subscrição Assinatura do Concierge Especifica a assinatura na qual este aplicativo de funções será criado. Grupo de Recursos Na lista suspensa, selecione o [nome do grupo de recursos da área restrita] Especifica o nome do grupo de recursos no qual criar seu aplicativo de funções. Criamos 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 da área restrita] .Detalhes da instância Nome do aplicativo de funções [Nome global exclusivo] Especifica o nome que identifica seu novo aplicativo de funções. Os caracteres válidos são a-z
,0-9
e-
.Publicar Código Especifica que a função usa código em vez de um contêiner. Pilha de tempo de execução Node.js Especifica que o código de exemplo neste módulo é escrito em JavaScript. Versão 20 LTS Especifica a versão da pilha de runtime. Região [Selecione na lista a seguir esta seção] Escolha a região mais próxima de você que também seja uma das regiões de Sandbox permitidas a seguir. 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 EUA
- Centro dos EUA
- Leste dos EUA
- Europa Ocidental
- Sudeste Asiático
- Leste do Japão
- Brasil Sul
- Sudeste da Austrália
- Índia Central
Selecione Avançar: Armazenamento.
Na guia Armazenamento , insira os seguintes valores para cada configuração.
Configurações Valor Descrição Armazenamento Conta de armazenamento [Nome global exclusivo] Especifica o nome da nova conta de armazenamento usada pelo aplicativo de funções (que não precisa corresponder ao nome global exclusivo especificado para 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 automaticamente o campo com um nome exclusivo que é 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ções Valor Descrição Application Insights Habilitar Application Insights Não Especifica que o Application Insights está desabilitado para este módulo. Selecione Examinar + criar e examinar as opções que você configurou. Se você 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 de funções duráveis
Como estamos criando funções duráveis JavaScript, precisamos instalar o durable-functions
pacote npm. Para fazer isso, execute as etapas a seguir.
Selecione Ir para o recurso para selecionar seu aplicativo de funções. O painel Aplicativo de Funções é exibido.
No painel de menu à esquerda, em Ferramentas de Desenvolvimento, selecione Editor do Serviço de Aplicativo (versão prévia) e, em seguida, selecione Abrir editor. O painel 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 gravar o código para suas funções.
Crie um novo arquivo package.json.
Execute os comandos a seguir no console para criar o novo 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 pacote. Por exemplo, você pode usar o nome global exclusivo especificado para sua função anteriormente.
Selecione Ctrl+S para salvar o arquivo e, em seguida, Ctrl+Q para fechar o documento.
Alterne novamente para o portal do Azure.
Na barra de menus à esquerda, em Ferramentas de Desenvolvimento, selecione Console. O painel Console é exibido para 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. A instalação pode levar alguns minutos para ser concluída e o gerenciador de pacotes de nós pode exibir alguns avisos, que você pode ignorar.Observação
Se for solicitado que você instale uma versão mais recente do npm, use o comando fornecido no erro para instalar a versão mais recente e instale o
durable-functions
pacote assim que a nova versão for instalada.Aguarde até que todos os pacotes terminem de ser instalados.
No painel de menu à esquerda, role para cima e selecione Visão geral e, na barra de menus superior, selecione Reiniciar e selecione Sim quando solicitado a reiniciar.
Aguarde a reinicialização ser concluída antes de continuar.
Criar a função de cliente para enviar uma proposta de design
No menu do portal do Azure ou na home page, 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.
Em Selecionar um modelo, na caixa Filtrar, digite Durable Functions HTTP starter e selecione esse modelo na lista. Esse modelo cria uma função durável que é executada em resposta a uma solicitação HTTP.
Em detalhes do modelo, para o campo Nova Função , insira HttpStart para o nome da função e, no campo Nível de Autorização , selecione Função e, em seguida, selecione Criar. O painel HttpStart é exibido para sua função.
No painel de menu à esquerda, em Desenvolvedor, selecione Código + Teste. O painel Código + Teste é exibido para sua função.
O código do 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 todos os requisitos de autenticação, juntamente 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 vincula recursos e outros itens a um gatilho. É um mecanismo declarativo que remove a necessidade de fazer referências de código rígido a outros serviços e funções em seu código.
Criar a função de orquestrador
No menu do portal do Azure ou na home page, 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.
Em Selecionar um modelo, na caixa Filtrar , insira o 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.
Em detalhes do modelo, para o campo Nova Função , insira OrchFunction para o nome da função e selecione Criar. O painel de funções OrchFunction é exibido.
No painel de menu à esquerda, em Desenvolvedor, selecione Código + Teste. O painel Código + Teste é exibido para sua função.
O código do 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 chamada Aprovação, que você cria em breve. O código na função de orquestrador invoca a função Aprovação duas vezes. A primeira vez simula a aceitação da proposta e, na segunda vez, testa a lógica de rejeição da proposta.
O valor que cada chamada retorna é combinado e passado 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 home page, em Recursos recentes, selecione Ver tudo e selecione seu aplicativo de funções. O painel do seu 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.
Em detalhes do modelo, para o campo Nova Função , insira Aprovação para o nome da função e selecione Criar. O painel Aprovação é exibido para seu aplicativo de funções.
No painel de menu à esquerda, em Desenvolvedor, selecione Código + Teste. O painel Código + Teste é exibido para sua função.
O código do 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 retorna uma mensagem indicando o status da proposta. A expressão
context.bindings.name
éAccepted
ouRejected
, dependendo do parâmetro passado para a função do orquestrador. Em um cenário do mundo real, você adicionaria a lógica que manipula as 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 de funções duráveis é iniciado
No menu do portal do Azure ou na home page, 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==
Use essa URL para executar suas funções.
Abra uma nova janela do navegador e vá para a URL copiada. Na URL, substitua o espaço reservado {functionName} por OrchFunction, que deve ser semelhante ao exemplo a seguir:
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 e use o 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 do projeto é 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.