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
- Azion CLI instalada.
- Node.js ≥ 18.
- Acesso à linha de comando.
Como a Azion CLI Local Dev Funciona
Fluxo de Dados
- Através da Azion CLI, o usuário executa o comando
azion dev [flags]
. - A Azion CLI invoca o Azion Bundler, que gerencia a construção e o desenvolvimento local.
- O Azion Bundler 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.
Azion Bundler: 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 Azion Bundler:
- 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:
- Abra o terminal, crie um novo diretório e acesse-o.
- Na linha de comando, inicie uma aplicação através do
azion init
- Nomeie sua aplicação ou aceite a sugestão.
- Selecione JavaScript como o template.
Você pode iniciar a aplicação com base no template que deseja. Para este exemplo, JavaScript é usado.
- Inicie o desenvolvimento local respondendo yes ao questionamento.
- Instale as dependências.
- Após um processo de build, Azion retornará a porta para acessar a aplicação.
- 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.
- Primeiros passos das Edge Functions
- Web APIs
- Lista completa de Web APIs e tipos suportados pela Azion Edge Runtime
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.