Impulsione a Qualidade de Software: Desenvolvimento Local com Azion CLI

Veja como impulsionar a qualidade de software com o desenvolvimento local de serverless functions usando a Azion CLI. Explore os benefícios, o funcionamento e como testar Edge Functions localmente.

Gabriel França - Technical Writer
Impulsione a Qualidade de Software: Desenvolvimento Local com Azion CLI

A Azion CLI é uma ferramenta de código aberto eficiente para configurar ambientes de teste locais para Edge Functions. Você pode executar facilmente sua aplicação localmente ao executar o comando azion dev, iniciando o processo de desenvolvimento local. Esta capacidade impulsiona a qualidade do software possibilitando o teste de Edge Functions antes de integrá-las ao produto em produção, prevenindo erros e comportamentos inesperados.

Principais Benefícios do Desenvolvimento Local com a Azion CLI

  • Prevenção de erros: teste novos recursos ou modificações antes de irem ao vivo, reduzindo o risco de introduzir erros no sistema de produção.
  • Depuração melhorada: depure código de forma mais eficaz e rápida em um ambiente controlado, podendo analisar os logs em tempo real.
  • Otimização de desempenho: teste o comportamento da aplicação sob diferentes cargas ou cenários de usuário únicos.
  • Aprimoramentos de segurança: identifique e corrija vulnerabilidades de segurança antes que a aplicação entre em vigor.
  • Custo-benefício: evite correções pós-produção que consomem muitos recursos, economizando tempo e dinheiro ao lidar com possíveis problemas antes do lançamento.

Pré-requisitos para Usar a Azion CLI


Como a Azion CLI Local Dev Funciona

Fluxo de Dados

  1. Através da Azion CLI, o usuário executa o comando azion dev [flags].
  2. A Azion CLI invoca o Vulcan, que gerencia a construção e o desenvolvimento local.
  3. O Vulcan inicializa um servidor e este servidor instancia o runtime. Este runtime suporta uma lista de Web APIs e emula o Azion Edge Runtime atual.

Responsabilidades

Azion CLI: serve como o principal ponto de interação entre o usuário e o sistema. Ele gerencia todo o processo de implantação da aplicação, garantindo um fluxo de trabalho suave e eficiente.

Vulcan: o motor que impulsiona a inicialização do projeto, a construção e a adaptação. Ele adapta o projeto baseado no modelo selecionado, garantindo que a aplicação seja configurada para o uso pretendido. Para o desenvolvimento local, o Vulcan:

  • Inicia um servidor.
  • Instancia o Edge Runtime.
  • Lida com alterações no código fonte, implementando hot reload.

A Ciência por trás das Edge Functions

As Azion Edge Functions são usadas para melhorar as edge applications ou para aumentar a segurança em um edge firewall. Ambas são executadas no Azion Edge Runtime, reduzem a latência e ajudam a implementar uma abordagem distribuída. Ok, mas qual é a diferença entre elas?

A diferença reside em como as funções são estruturadas. Vamos mergulhar mais fundo nisso.

Funções de Edge Application

Primeiro, as Edge Functions para Edge Application funcionam com base em um fetch event. Elas são inicializadas com uma função addEventListener, passando fetch como tipo de evento e um evento. Por exemplo:

addEventListener('fetch',event=>{
event.respondWith(handleRequest(event.request));
});

Em segundo lugar, é necessário definir o comportamento da função handleRequest. Esta função tem event.request como assinatura. Esses dados podem ser usados posteriormente para implementar a lógica necessária, como:

  • Manipular cookies.
  • Implementar um comportamento com base no método da solicitação HTTP (POST, GET, PUT, DELETE).
  • Acessar metadados da requisição.

A função handleRequest pode ser definida como:

const html=`<!DOCTYPE html>
<body>
<h1>Hello World</h1>
<p>This markup was generated by Azion - Edge Functions.</p>
</body>`
async function handleRequest(request){
return new Response(html,{
headers:{
"content-type":"text/html;charset=UTF-8",
},
})
}

Neste exemplo, a resposta será o conteúdo HTML, declarado anteriormente pela const html. Os cabeçalhos podem ser manipulados e, no exemplo, o tipo de conteúdo foi definido.

Exemplo completo:

const html=`<!DOCTYPE html>
<body>
<h1>Hello World</h1>
<p>This markup was generated by Azion - Edge Functions.</p>
</body>`
async function handleRequest(request){
return new Response(html,{
headers:{
"content-type":"text/html;charset=UTF-8",
},
})
}
addEventListener('fetch',event=>{
event.respondWith(handleRequest(event.request));
});

Saiba mais sobre funções de Edge para Edge Applications.

Funções de Edge Firewall

As Edge Functions para Edge Firewall funcionam com base em um evento de firewall. Eles são inicializados usando a função addEventListener, passando ‘firewall’ como tipo de evento e um evento. Por exemplo:

addEventListener('firewall',event=>{
event.deny();
});

Neste caso, o sistema envia uma negação em resposta ao evento de firewall que foi acionado. Poderiam haver outras reações a eventos, como event.continue() e event.drop(), dependendo das circunstâncias específicas ou da lógica desejada.

É necessário definir os potenciais comportamentos para diferentes reações de eventos dentro do event listener de firewall. A resposta exata depende da condição encontrada. Por exemplo:

  • Detectar níveis de ameaça.
  • Bloquear ou permitir listas de endereços IP.
  • Implementar comportamentos com base em padrões de tráfego.

Um exemplo onde a função event.deny é definida e usada:

// Define a list of blocked IP addresses
const blockedIPs=["192.0.2.0","203.0.113.0","198.51.100.0"]
addEventListener('firewall',event=>{
let ip = event.request.clientIP;
if(blockedIPs.includes(ip)){
event.deny();
}else{
event.continue();
}
});

Neste exemplo, o ouvinte de eventos de firewall verifica o endereço IP que desencadeou o evento contra a lista de IPs bloqueados. Se o IP estiver na lista, o evento é negado. Se o IP não estiver na lista, o evento continuará o processamento. Ele mostra como você pode usar o event.deny(), event.continue() e event.drop() em cenários de aplicação reais. Também é possível a implementação de event.respondWith(<Response>).

Como não é possível executar nenhum outro método após a execução de um evento finalizador, é recomendado usar um return logo após o evento para deixar claro que nada mais será executado.

Saiba mais sobre funções de Edge para Edge Firewall.


Testando Edge Application Functions

Para iniciar um ambiente de teste local:

  1. Abra o terminal, crie um novo diretório e acesse-o.
  2. Na linha de comando, inicie uma aplicação através do azion init
  3. Nomeie sua aplicação ou aceite a sugestão.
  4. Selecione JavaScript como o template.

Você pode iniciar a aplicação com base no template que deseja. Para este exemplo, JavaScript é usado.

  1. Inicie o desenvolvimento local respondendo yes ao questionamento.
  2. Instale as dependências.
  3. Após um processo de build, Azion retornará a porta para acessar a aplicação.
  4. Envie solicitações para o servidor e verifique o comportamento.

Nota: você sempre pode terminar o processo do terminal e executar o comando azion dev para executar a aplicação localmente. As mudanças aplicadas à função são reconstruídas usando hot reload.

O comando azion dev inicia um ambiente local onde você pode testar e monitorar a funcionalidade e eficiência de sua edge function.

As Edge Functions da Azion são executadas no Edge Runtime da Azion e possuem compatibilidade com Web APIs e Azion APIs.

Testando Firewall Functions

Se você implementou funções de firewall em seu sistema, você precisará considerar condições especiais de teste.

Para fazer isso, você deve executar o comando azion dev com a flag --firewall. Ele informa ao sistema que você está testando uma função de Edge Firewall.


Conclusão

Usar ambientes de teste locais melhora o processo de desenvolvimento do produto e a qualidade do software. Aproveitar ferramentas como Azion CLI facilita a construção de soluções de software confiáveis, eficientes, seguras e de alto desempenho. Ao realizar testes com Edge Functions com o comando azion dev, e opcionalmente adicionando uma flag --firewall quando necessário, os desenvolvedores podem navegar por possíveis armadilhas antes de implementar seu código em produção.

Inscreva-se na nossa Newsletter