Exercício – Criar uma função localmente usando as Core Tools
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.
Na pasta raiz, execute
func init
para criar um projeto de funções em uma nova pastaloan-wizard
.func init loan-wizard
Quando precisar selecionar um runtime de trabalho, insira 3 para escolher node.
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!
No Cloud Shell, navegue até o novo diretório
loan-wizard
.cd ~/loan-wizard
Execute
func new
para iniciar o assistente de criação de função.func new
Quando precisar selecionar um modelo, insira 7 para escolher gatilho HTTP.
Quando precisar informar um nome de função para o gatilho HTTP, insira
simple-interest
.Execute o comando a seguir para abrir o editor do Cloud Shell.
code .
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.
No painel ARQUIVOS do editor, expanda a pasta src>functions e selecione simple-interest.js para abrir o arquivo no editor.
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
eterm
na cadeia de consulta da solicitação HTTP. Em seguida, retorna o resultado do cálculo de juros simples (principal * rate * term
).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.
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órioloan-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 processofunc
está em execução.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 HTTPhttp://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.
Feche o editor selecionando CTRL+Q.
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.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.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)
Feche o editor selecionando CTRL+Q.