Exercício – criar um fluxo de trabalho com a Durable Functions

Concluído

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 Funções Duráveis.

Criar uma aplicação de funções

  1. Inicie sessão no portal do Azure com a mesma conta que utilizou para ativar o sandbox.

  2. No menu do portal do Azure ou na página inicial , em Serviços do Azure, selecione Criar um recurso. O painel Criar um recurso é exibido.

  3. Procure e selecione Function App. O painel Criar aplicativo de função é exibido.

  4. Na guia Noções básicas, insira os seguintes valores para cada configuração.

    Definição valor Description
    Detalhes do Projeto
    Subscrição Subscrição de Assistente Especifica a subscrição sob a qual esta nova aplicação de funções é criada.
    Grupo de Recursos Na lista suspensa, selecione [nome do grupo de recursos da área restrita] Especifica o nome do grupo de recursos no qual a sua aplicação de funções será criada. Criamos o aplicativo de função no grupo de recursos da á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 da Aplicação de Funções [Nome globalmente exclusivo] Especifica o nome que identifica a sua nova aplicação de funções. Os carateres 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 runtime 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.
    País/Região [Selecione na lista a seguir a esta secção] Escolha a região mais próxima de você que também é uma das regiões de Sandbox permitidas a seguir.
    Sistema Operativo
    Sistema operativo Windows Especifica o sistema operativo que aloja a aplicação de funções.
    Planear
    Tipo de plano Consumo (Sem servidor) Especifica o plano de alojamento que define a forma como os recursos são atribuídos à sua aplicação de funções. No Plano de Consumo predefinido, os recursos são adicionados dinamicamente, conforme necessário por parte das suas funções. Neste modelo de alojamento sem servidor, só paga pelo tempo de execução das suas funções.

    O sandbox gratuito permite-lhe criar recursos num subconjunto das regiões globais do Azure. Selecione uma região na seguinte lista quando criar recursos:

    • E.U.A. Oeste 2
    • E.U.A. Centro-Sul
    • E.U.A. Central
    • E.U.A. Leste
    • Europa Ocidental
    • Sudeste Asiático
    • Leste do Japão
    • Sul do Brasil
    • Austrália Sudeste
    • Índia Central
  5. Selecione Avançar : Armazenamento.

  6. Na guia Armazenamento, insira os seguintes valores para cada configuração.

    Definição valor Description
    Armazenamento
    Conta de armazenamento [Nome globalmente exclusivo] Especifica o nome da nova conta de armazenamento usada pelo seu aplicativo de função (que não precisa corresponder ao nome globalmente exclusivo que você especificou para sua função). Os nomes das contas de armazenamento devem ter entre 3 e 24 caracteres e podem conter apenas números e letras minúsculas. Esta caixa de diálogo preenche automaticamente o campo com um nome exclusivo que é gerado dinamicamente. No entanto, esteja à vontade para utilizar um nome diferente ou até mesmo uma conta existente.
  7. Selecione Avançar : Rede. Aceite as predefinições.

  8. Selecione Avançar : Monitoramento.

  9. Na guia Monitoramento, insira o seguinte valor para a configuração.

    Definição valor Description
    Application Insights
    Ativar o Application Insights Não Especifica que o Application Insights está desabilitado para este módulo.
  10. Selecione Rever + criar e reveja as opções que configurou. Se estiver satisfeito com suas opções, selecione Criar para provisionar e implantar o aplicativo de função.

Aguarde pela conclusão da implementação antes de continuar. A implantação pode levar alguns minutos.

Instalar o pacote npm durable-functions

Como estamos criando funções duráveis de JavaScript, precisamos instalar o durable-functions pacote npm. Para fazê-lo, realize os seguintes passos.

  1. Selecione Ir para recurso para selecionar seu aplicativo de função. O painel Aplicativo de função é exibido.

  2. No painel de menu esquerdo, em Ferramentas de Desenvolvimento, selecione Editor do Serviço de Aplicativo (visualização) e, em seguida, selecione Abrir editor. O painel Início Rápido do Editor do Serviço de Aplicativo aparece em uma nova janela do navegador.

  3. No painel de menu esquerdo, realce a pasta WWWROOT .

  4. No menu esquerdo da barra de ferramentas, selecione o ícone Abrir console .

    Esta 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 suas funções.

  5. Crie um novo arquivo package.json .

    • Execute os seguintes comandos no console para criar o novo arquivo JSON e abri-lo no editor.

      touch package.json
      open package.json
      
    • Adicione o seguinte código.

      {
        "name": "example",
        "version": "1.0.0"
      }
      

      Substitua example pelo nome do seu pacote. Por exemplo, pode utilizar o nome globalmente exclusivo que especificou anteriormente para a sua função.

  6. Selecione Ctrl+S para guardar o ficheiro e, em seguida, Ctrl+Q para fechar o documento.

  7. Regresse ao portal do Azure.

  8. Na barra de menus à esquerda, em Ferramentas de Desenvolvimento, selecione Console. O painel Console é exibido para seu aplicativo de função.

  9. Execute o seguinte comando:

    npm install durable-functions
    

    Este comando instrui o gerenciador de pacotes do nó a instalar o durable-functions pacote e quaisquer dependências necessárias. A instalação pode levar alguns minutos para ser concluída e o gerenciador de pacotes do nó pode exibir alguns avisos, que você pode ignorar. Se você for solicitado a instalar uma versão mais recente do npm, use o comando fornecido no erro para instalar a versão mais recente e, em seguida, instale o durable-functions pacote assim que a nova versão for instalada.

    Aguarde até que todos os pacotes terminem a instalação.

  10. No painel de menu esquerdo, role para cima e selecione Visão geral e, na barra de menu superior, selecione Reiniciar e, em seguida, selecione Sim quando solicitado a reiniciar.

    Aguarde pela conclusão do reinício antes de continuar.

Criar a função de cliente para submeter uma proposta de design

  1. No menu do portal do Azure ou na página inicial , em Recursos recentes, selecione Ver tudo e, em seguida, selecione seu aplicativo de função. O painel Aplicativo de função é exibido.

  2. Na página Visão geral, selecione a guia Funções no centro da tela.

  3. Selecione o botão Criar no portal do Azure. O painel de funções Criar é exibido.

  4. Em Selecione um modelo, na caixa Filtro , insira Funções duráveis HTTP starter e selecione esse modelo na lista. Este modelo cria uma função durável que é executada em resposta a um pedido HTTP.

  5. Em Detalhes do modelo, para o campo Nova Função, digite 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.

  6. No painel de menu esquerdo, em Desenvolvedor, selecione Código + Teste. O painel Código + Teste é exibido para sua função.

    O código do arquivo index.js aparece no editor. O seu ficheiro deve assemelhar-se ao 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);
    };
    
  7. Na lista suspensa dos arquivos em sua função, selecione function.json para exibir as ligações associadas à sua nova função. Estas informações especificam todos os requisitos de autenticação, juntamente com os métodos HTTP que podem acionar a função. Este ficheiro também especifica que a função é um cliente que inicia o processo de orquestração. O seu ficheiro deve assemelhar-se ao 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"
        }
      ]
    }
    

    Nota

    Um enlace associa os recursos e outros itens com um acionador. É um mecanismo declarativo que elimina a necessidade de codificar referências a outros serviços e funções em seu código.

Criar a função de orquestração

  1. No menu do portal do Azure ou na página inicial , em Recursos recentes, selecione Ver tudo e, em seguida, selecione seu aplicativo de função. O painel Aplicativo de função é exibido.

  2. Na página Visão geral, selecione a guia Funções no centro da tela.

  3. Na barra de menus Funções , selecione Criar. O painel de funções Criar é exibido.

  4. Em Selecione um modelo, na caixa Filtro , insira Orquestrador de funções duráveis e selecione esse modelo na lista. Este modelo cria uma função que orquestra a execução de funções.

  5. Em Detalhes do modelo, para o campo Nova Função , digite OrchFunction para o nome da função e selecione Criar. O painel de função OrchFunction é exibido.

  6. No painel de menu esquerdo, em Desenvolvedor, selecione Código + Teste. O painel Código + Teste é exibido para sua função.

    O código do arquivo index.js aparece no editor.

  7. 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 Activity chamada Approval, 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 a 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 de cliente. Num ambiente de produção, a sua função de orquestração chamaria uma série de funções de atividade para tomar a decisão de aceitar/rejeitar e devolveria o resultado destas atividades.

  8. Na barra de menu superior, selecione Salvar para salvar sua nova função.

Criar a função de atividade

  1. No menu do portal do Azure ou na página inicial , em Recursos recentes, selecione Ver tudo e, em seguida, selecione seu aplicativo de função. O painel Aplicativo de função é exibido.

  2. Na página Visão geral, selecione a guia Funções no centro da tela.

  3. Na barra de menus Funções , selecione Criar. O painel de funções Criar é exibido.

  4. Em Selecione um modelo, na caixa Filtro, insira a atividade Funções duráveis e selecione esse modelo na lista. Este modelo cria uma função durável que é executada quando uma atividade é chamada por uma função orquestradora.

  5. 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ção.

  6. No painel de menu esquerdo, em Desenvolvedor, selecione Código + Teste. O painel Código + Teste é exibido para sua função.

    O código do arquivo index.js aparece no editor.

  7. 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}!`;
    };
    

    Esta função devolve uma mensagem a indicar o estado da proposta. A expressão context.bindings.name é ou AcceptedRejected, 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.

  8. Na barra de menu superior, selecione Salvar para salvar sua nova função.

Verificar que o fluxo de trabalho das funções duráveis inicia

  1. No menu do portal do Azure ou na página inicial , em Recursos recentes, selecione Ver tudo e, em seguida, selecione seu aplicativo de função. O painel Aplicativo de função é exibido.

  2. Selecione a guia Funções no centro da página.

  3. Selecione a função HttpStart . O painel HttpStart é exibido para sua função.

  4. Na barra de menu superior, selecione Obter URL da função e copie o URL. O seu URL deve assemelhar-se ao seguinte exemplo:

    https://example.azurewebsites.net/api/orchestrators/{functionName}?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
    

    Você usa essa URL para executar suas funções.

  5. Abra uma nova janela do navegador e vá para o URL que você copiou. No URL, substitua o marcador de posição {functionName} por OrchFunction, o que deve assemelhar-se ao seguinte exemplo:

    https://example.azurewebsites.net/api/orchestrators/OrchFunction?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
    

    A mensagem de resposta contém um conjunto de pontos finais URI que pode utilizar para monitorizar e gerir a execução, e que pode assemelhar-se 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/..."
    }
    
  6. Copie o valor statusQueryGetUri e use seu navegador da Web para ir para essa URL. 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 de atividade duas vezes. Na primeira vez, a função de atividade indica que a proposta de 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.