Exercício – Criar uma função localmente usando as Core Tools

Concluído

O Azure Functions Core Tools permite que você desenvolva funções localmente no seu próprio computador ao:

  • Criar arquivos e pastas necessários para um projeto de funções.
  • Fornecer um host do Functions que é executado localmente no diretório raiz do seu projeto.

Você decidiu iniciar seu trabalho localmente com o Azure Functions desenvolvendo uma função que calcula juros simples. Em última análise, você pode criar funções mais complexas que funcionam juntas e chamar outros serviços e bancos de dados. Usar o Core Tools para criar uma função que faz um cálculo básico de empréstimo é um bom começo. Também convém tentar executar a função em seu computador antes de publicá-la no Azure. Você pode fazer tudo isso do Azure Cloud Shell usando o Core Tools.

O Azure Cloud Shell vem com o Core Tools, a CLI do Azure e um editor que você pode usar para escrever código. Selecione Ativar área restrita acima antes de continuar.

Criar um projeto local do Azure Functions

Neste exercício, use o Cloud Shell para desenvolver sua primeira função JavaScript usando o Core Tools. O Cloud Shell já tem as versões corretas do Core Tools e do Node.js instaladas.

  1. Na pasta raiz, execute func init para criar um projeto de funções em uma nova pasta loan-wizard.

    func init loan-wizard
    
  2. Quando precisar selecionar um runtime de trabalho, insira 3 para escolher node.

  3. Quando precisar selecionar uma linguagem, insira 1 para escolher javascript.

    A saída lista os arquivos que estão sendo gravados em disco, incluindo estes arquivos:

    • host.json dá suporte à configuração de nível de aplicativo para a instância de runtime e tipos específicos de gatilho e associação.
    • local.settings.json define comportamentos somente locais e configurações de aplicativo (variáveis de ambiente locais).
    • O package.json é um arquivo específico de JavaScript que controla todos os pacotes instalados e usados em seu código.
    • .gitignore e extensions.json são arquivos de configuração usados pela ferramenta de controle de versão do Git e pelo Visual Studio Code, respectivamente. Você pode ignorá-los por enquanto.

Criar uma função disparada por HTTP

É hora de criar sua função!

  1. No Cloud Shell, navegue até o novo diretório loan-wizard.

    cd ~/loan-wizard
    
  2. Execute func new para iniciar o assistente de criação de função.

    func new
    
  3. Quando precisar selecionar um modelo, insira 7 para escolher gatilho HTTP.

  4. Quando precisar informar um nome de função para o gatilho HTTP, insira simple-interest.

  5. Execute o comando a seguir para abrir o editor do Cloud Shell.

    code .
    

    Screenshot showing the simple-interest folder with the function.json file open in Cloud Shell code editor.

    O assistente cria um arquivo no projeto de funções em src/functions chamado simple-interest.js, que tem um conteúdo de modelo padrão. Esse código dá suporte ao modelo de programação Node.js v4 para o Azure Functions. Reserve um momento para explorar os arquivos de projeto no editor. A captura de tela mostra a pasta expandida com simple-interest.js aberto no editor.

Implementação da função simple-interest

A implementação da função padrão criada pelo Core Tools em simple-interest.js procura uma entrada chamada name na cadeia de consulta ou no corpo da solicitação HTTP de entrada e retorna a cadeia de caracteres Hello, [name]. Essa é uma boa ilustração de como usar um gatilho HTTP, mas você quer substituir esse código por um código que calcule os juros simples de três parâmetros de entrada.

  1. No painel ARQUIVOS do editor, expanda a pasta src>functions e selecione simple-interest.js para abrir o arquivo no editor.

  2. Substitua o conteúdo completo de simple-interest.js pelo seguinte código:

    const { app } = require('@azure/functions');
    
    app.http('simple-interest', {
        methods: ['GET','POST'],
        authLevel: 'anonymous',
        handler: async (request, context) => {
            const principal = parseFloat(request.query.get('principal'));
            const rate = parseFloat(request.query.get('rate'));
            const term = parseFloat(request.query.get('term'));
    
          if ([principal, rate, term].some(isNaN)) {
            // If any empty or non-numeric values, return a 400 response with an
            // error message
            return {
              status: 400,
              body: "Please supply principal, rate and term in the query string"
            };
          } else {
            // Otherwise set the response body to the product of the three values
            return { body: principal * rate * term };
          }
        }
    });
    

    Esse script procura parâmetros chamados principal, rate e term na cadeia de consulta da solicitação HTTP. Em seguida, retorna o resultado do cálculo de juros simples (principal * rate * term).

  3. Salve o arquivo pressionando CTRL+S e feche o editor pressionando CTRL+Q.

Executar a função no Cloud Shell

Para executar a nova função localmente e experimentá-la, use func start para iniciar o runtime do Functions (func.exe) em um processo em segundo plano para usar a linha de comando enquanto ela estiver em execução. Em seguida, use uma ferramenta de linha de comando, curl, para interagir com a função.

Se você estiver usando o Core Tools no computador, basta usar curl em uma segunda janela do terminal ou em um navegador da Web. A saída produzida pelo Core Tools aparece em tempo real na primeira janela do terminal. No Cloud Shell, você está limitado a um só terminal, portanto, precisa executar o Core Tools (func.exe) em um processo em segundo plano.

  1. Execute o comando a seguir para iniciar o host do Functions silenciosamente em segundo plano.

    func start &> ~/output.txt &
    

    Assim como em func new, o Cloud Shell ainda deve estar no diretório loan-wizard.

    O host do Functions agora grava a saída no arquivo ~/output.txt. Você pode continuar usando a linha de comando enquanto ela está em execução.

    Use o comando ps para verificar se o processo func está em execução.

  2. Insira o comando a seguir para exibir o log de saída.

    code ~/output.txt
    

    Na saída, você verá uma mensagem que lista que Functions: simple-interest: está disponível como uma solicitação GET e POST HTTP http://localhost:7071/api/simple-interest.

    Observação

    Se você vir uma mensagem de erro, selecione CTRL+C para interromper o host. Verifique se o conteúdo do arquivo de código é o mesmo da amostra.

    Essa URL de localhost não é publicada na Web, ela só pode ser acessada por meio de ferramentas em execução na sua sessão do Cloud Shell.

  3. Feche o editor selecionando CTRL+Q.

  4. Execute o comando a seguir para enviar uma solicitação HTTP GET à função em execução local.

    curl "http://localhost:7071/api/simple-interest" -w "\n"
    

    A saída, Please supply principal, rate and term in the query string, indica que a função foi invocada com êxito e pode retornar uma resposta, mas você não a está chamando como pretendido. Você precisa fornecer os parâmetros como parte da solicitação HTTP.

  5. Invoque a função novamente. Desta vez, forneça um valor para cada um dos parâmetros de cadeia de consulta.

    curl "http://localhost:7071/api/simple-interest?principal=5000&rate=.035&term=36" -w "\n"
    

    Desta vez, a saída é 6300. A função está funcionando conforme o esperado.

  6. Insira o comando a seguir novamente para exibir o log de saída.

    code ~/output.txt
    

    Após as entradas de log de inicialização, você verá acrescentado um conjunto de entradas de log com carimbo de data/hora para cada vez que você chamou a função com curl:

    [2024-02-20T06:25:56.700Z] Executing 'Functions.simple-interest' (Reason='This function was programmatically called via the host APIs.', Id=5daf20c3-f204-41bb-a5b9-021acaf17c04)
    [2024-02-20T06:25:56.893Z] Executed 'Functions.simple-interest' (Succeeded, Id=5daf20c3-f204-41bb-a5b9-021acaf17c04, Duration=228ms)
    
    
  7. Feche o editor selecionando CTRL+Q.