Espelhe tráfego de produção para uma origem de teste com Functions
Construa uma função em um firewall que envia uma cópia de cada requisição correspondente para uma origem de teste e leia as respostas em Real-Time Events.
Neste tutorial, você vai construir uma função que copia as requisições de produção para uma origem de teste. A cópia permite que um software novo responda a requisições reais antes de atender os usuários. Você vai criar a função, instanciá-la em um firewall e acioná-la com uma regra do Rules Engine. Depois, você vai ler as respostas espelhadas em Real-Time Events.
Pré-requisitos
- Uma conta Azion. Para criar uma, consulte Como criar uma conta na Azion.
- A permissão Edit Functions na conta. Ela também requer a permissão View Functions.
- A permissão Edit Firewall na conta. Ela também requer a permissão View Firewall. Consulte Teams Permissions.
- Uma aplicação que recebe tráfego de produção, em um domínio que você controla. Para configurar o domínio, consulte Adicione um domínio a um workload.
- Um firewall associado a esse domínio. Para criar um, consulte Defina as configurações principais de um firewall.
- Uma origem de teste que responde por HTTPS.
1. Crie a função de espelhamento de tráfego
Uma função é executada em um firewall quando ela exporta um handler firewall. Para criar a função:
Acesse Azion Console > Products Menu > Libraries > Functions.
Digite um nome para a função. Por exemplo: traffic-mirroring.
Na aba Code, cole o código a seguir:
Substitua example.com pelo domínio da sua origem de teste.
A função é salva e fica disponível para ser instanciada em um firewall.
ctx.waitUntil() estende a execução além do ponto em que o handler retorna. A cópia sai do caminho da requisição, e a requisição original chega à origem de produção sem latência adicional. O handler nunca chama ctx.deny(), portanto nenhuma requisição é bloqueada. AbortSignal.timeout() encerra uma cópia após 5 segundos, e uma origem de teste mais lenta precisa de um valor maior.
2. Instancie a função no firewall
Uma instância de função vincula a função a um firewall, e um firewall executa uma função apenas com o módulo Functions ativado. Para criar a instância:
Em Azion Console, vá para Products Menu > Firewall > seu firewall.
Digite um nome para a instância. Por exemplo: traffic-mirroring instance.
Selecione a função traffic-mirroring. Apenas as funções com Initiator Type definido como Firewall aparecem na lista.
A instância aparece na aba Functions Instances. Ela não é executada até que uma regra do Rules Engine a selecione.
3. Adicione a regra que executa a função
Uma regra do Rules Engine define os critérios que acionam a instância. Para espelhar as requisições cuja URI começa com /api:
No mesmo firewall, vá para a aba Rules Engine.
Digite um nome para a regra. Por exemplo: Mirror traffic to the test origin.
Na seção Criteria, selecione a variável Request URI.
Digite /api como argumento.
A regra executa a instância em toda requisição cuja URI começa com /api. As mudanças podem levar alguns minutos para propagar. Aguarde antes de enviar uma requisição que corresponde aos critérios.
4. Verifique as requisições espelhadas em Real-Time Events
Envie uma requisição que corresponde aos critérios da regra:
O firewall executa a instância nessa requisição, e a função envia uma cópia para a origem de teste. Para ler o que a origem de teste respondeu:
Acesse Azion Console > Real-Time Events.
Uma cópia bem-sucedida registra o status da origem de teste e o tempo de resposta:
Uma resposta acima de 399 registra a requisição e a resposta em JSON, portanto a falha carrega o próprio contexto. Uma cópia que excede o timeout registra Test origin timeout.
Leia as entradas a partir de quatro medidas:
- Tempo de resposta: como a latência da origem de teste se compara com a de produção.
- Taxa de erro: quantas entradas carregam um status 4xx ou 5xx.
- Frequência de timeout: com que frequência uma cópia excede o timeout.
- Cobertura de requisições: se a origem de teste responde a todos os métodos que a regra corresponde, incluindo
POST,PUTeDELETE.
Quando a origem de teste responde ao tráfego de produção dentro do seu orçamento de latência e de erro, ela está pronta para atender produção.
5. (Opcional) Defina a origem de teste por uma variável de ambiente
Variáveis de ambiente guardam a origem de teste e o timeout fora do código, portanto uma função atende vários testes. Para ler ambos os valores do ambiente:
Crie TEST_ORIGIN e TEST_TIMEOUT na função, conforme descrito em Variáveis de ambiente.
Na aba Code, substitua o código pelo código a seguir:
Azion.env.get() retorna o valor de uma chave em tempo de execução. Quando TEST_TIMEOUT não carrega valor, a função usa 10000 ms.
A função lê a origem de teste em tempo de execução, portanto a próxima origem de teste não exige edição de código.