1 of 20
2 of 20
3 of 20
4 of 20
5 of 20
6 of 20
7 of 20
8 of 20
9 of 20
10 of 20
11 of 20
12 of 20
13 of 20
14 of 20
15 of 20
16 of 20
17 of 20
18 of 20
19 of 20
20 of 20

Edge Functions

Edite no GitHub

O Azion Edge Functions permite que você crie aplicações serverless orientadas a eventos, no edge da rede, mais perto dos usuários.

Com Edge Functions você pode executar funções serverless em resposta a eventos em Edge Nodes de nossa rede distribuída, sem precisar provisionar nem gerenciar servidores. O Azion Edge Functions faz isso automaticamente para você.

Explore, a seguir, como utilizar e extrair ao máximo os benefícios de Edge Functions.

  1. Sobre o Edge Functions
  2. Como Funciona
  3. Conceitos Básicos
  4. Passo a passo para Criar uma Edge Function
  5. Edge Functions com múltiplos arquivos
  6. Ativar suas Configurações
  7. Documentação de Suporte

1. Sobre o Edge Functions

Você encontra aqui algumas das soluções proporcionadas pelo Azion Edge Functions.

Com Edge Functions, você pode manipular HTTP nas seguintes fases de Request e HTTP Response:

  • assim que a requisição de um usuário for recebida no Edge Node (Viewer Request);
  • antes que o Azion Edge Node encaminhe a requisição à Origin (Origin Request);
  • assim que o Edge Node receber a resposta da Origin (Origin Response);
  • antes que o Azion Edge Node encaminhe a resposta para o usuário (Viewer Response).

Você pode também gerar responses sem necessariamente ter que encaminhar a requisição para a origem.

Com o uso de Edge Functions escritas em Lua e JavaScript na plataforma de Edge Computing da Azion, você poderá criar uma variedade de soluções, por exemplo:

  • inspecionar cookies para rewrite de URLs para diferentes versões de seu site em experimentos A/B Test;
  • enviar objetos diferentes para seus usuários baseado em User-Agent header, que contém informação sobre o device que enviou a Request. Por exemplo, você pode enviar imagens em diferentes resoluções baseadas no dispositivo dos usuários;
  • inspecionar Headers e Authorized Tokens, inserindo um Header e permitindo Access Control antes de encaminhar a request à origem;
  • adicionar, remover ou modificar cabeçalhos e rewrite de path, direcionando usuários para diferentes objetos em cache;
  • gerar HTTP responses para tarefas como redirecionar usuários não autenticados para páginas de login, ou criar e entregar webpages estáticas geradas diretamente no edge.

Veja mais formas de uso de Edge Functions em Casos de Uso.


2. Como Funciona

Crie suas próprias funções personalizadas ou escolha entre as já existentes disponibilizadas pela Azion, tanto para Edge Application quanto para Edge Firewall.

Atualmente, as linguagens suportadas pela plataforma são Lua e JavaScript.

As Edge Functions executam no tratamento/atendimento da requisição. A plataforma de Edge provê um modelo de Rules Engine que pode ser usado para vincular a execução do código das Edge Functions de acordo com as fases de tratamento.

O runtime específico de cada linguagem provê uma interface de programação para interagir e manipular os objetos de request e response para implementar a lógica necessária.

Ao instanciar uma Edge Function, você pode informar parâmetros que serão passados para a função, em formato JSON, por meio de argumentos, podendo ainda definir e executar testes online para validar sua construção.

As Edge Functions são executadas diretamente na infraestrutura de edges da Azion. Para utilizá-las, basta que estejam associadas a um Behavior no Rules Engine. Assim, quando uma requisição satisfizer os critérios definidos nas regras da Rule Engine, o trigger para execução da Edge Function será acionado.

Na sequência, você conhece mais detalhes sobre o Azion Edge Functions.


3. Conceitos Básicos

Você pode criar Edge Functions e manter um repositório de funções que poderão ser utilizadas em Edge Application ou Edge Firewall. Consulte a Runtime API de acordo com o Runtime escolhido para escrita da Edge Function.

Além de personalizar suas funções, você também pode escolher entre as funções prontas para uso, disponibilizadas tanto pela Azion, quanto pelos Independent Software Vendors (ISV). Explore o catálogo do Azion Marketplace no Real-Time Manager.

Criar Edge Functions

Utilize a Runtime API da linguagem de sua preferência para escrever Edge Functions.

Linguagem JavaScript

Ao criar Edge Functions usando o Runtime Enviroment JavaScript, as Edge Functions escritas pelo próprio usuário entram direto em produção sem passar por uma revisão interna, uma vez que o código é executado isoladamente e limitado a recursos isolados.

Linguagem Lua

O código das Edge Functions escritas em Lua passa por uma revisão minuciosa de nossos engenheiros de software antes de entrar em produção. Nosso objetivo é garantir a segurança e uso correto da plataforma de Edge Computing. Seu código poderá ser revisado em critérios como:

  • uso de variáveis globais que não são permitidas. Por conta do ambiente multi-tenant, o código da Edge Function Lua deve evitar uso de variáveis globais e shared memory;
  • chamadas HTTP bloqueantes. Toda chamada a serviço externo deverá usar o protocolo HTTP por meio de APIs assíncronas para que o processo não seja bloqueado;
  • o Código ou Lib também deve passar nos testes luacheck.

Para mais detalhes de cada Runtime API e exemplos de código, consulte a documentação de Runtime APIs

Instanciar Edge Functions

Antes de associar um trigger de execução à Edge Function, ela deve ser instanciada de acordo com o seu initiator type, em Edge Application ou Edge Firewall. Para isso, o módulo Edge Functions deve ser previamente habilitado. Então, através aba Functions, você poderá instanciar suas Edge Functions para posterior uso em uma Rule do Rules Engine.

Para saber mais sobre Edge Functions Instances acesse a documentação de Edge Application e Edge Firewall

Métricas para Edge Functions

Por meio do Real-Time Metrics, você obtém informações em tempo real sobre o desempenho das suas Edge Functions.

Para acessar os gráficos, proceda conforme a seguir:

  1. Acesse o Real-Time Manager. No menu Products, superior esquerdo, selecione Real-Time Metrics do menu de Edge Analytics e clique em Edge Functions.
  2. Selecione as Edge Functions e o Time Range, o período, que deseja analisar. Clique em Filter.
  3. Você obterá, por exemplo, o total de Invocations por instância de Edge Functions de Edge Firewall.

Consulte a documentação do Real-Time Metrics para conhecer mais detalhes do produto.


4. Passo a passo para criar uma Edge Function

Você está a um passo de criar e executar funções serverless em Edge Nodes da poderosa rede distribuída da Azion.

Para que sua Edge Function entre efetivamente em produção, basta escrever, instanciar e associar a um Behavior Run Function, em uma Rule no Rules Engine:

  1. Acesse o Real-Time Manager. No menu Edge Computing, selecione Edge Functions.

  2. Clique em Add Function para adicionar uma nova Edge Function.

  3. Defina um nome para sua função no campo Edge Function Name e poder salvar suas configurações.

  4. Em Language, selecione JavaScript. Copie este exemplo para o campo da aba Code:

    async function handleRequest(request) {
     return new Response("Hello World!",
       {
           status:200
       })
    }
    addEventListener("fetch", event => {
     event.respondWith(handleRequest(event.request))
    })
    
  5. No campo Function to run, coloque o nome da principal função a ser executada no código-fonte.

  6. Selecione o Initiator Type, que é o tipo de módulo onde a função será instanciada e executada. Neste exemplo, refere-se a Edge Application.

  7. Clique em Save para salvar suas configurações. Você retorna à página inicial de Edge Functions, onde visualiza sua lista de Edge Functions.

  8. Então, acesse Products, menu superior esquerdo, e selecione uma Edge Application da sua lista.

  9. Na aba Main Settings, habilite o módulo Edge Functions da seção Edge Application Modules.

  10. Na aba Rules Engine, crie ou edite uma Rule e na seção Behavior, no campo Then, selecione Run Function. Então, associe a Edge Function desejada.

  11. Exemplo de Resposta ao executar o Behavior Run Function:

    Hello World!
    
  12. Acompanhe suas métricas. Com o Real-Time Metrics, você poderá obter a quantidade de invocações de instâncias de Edge Functions, por exemplo.

Campos assinalados com asterisco são obrigatórios.


5. Edge Functions com múltiplos arquivos

O Edge Functions da Azion opera com um único arquivo JS. Caso sua Edge Function tenha mais de um ou utilize módulos JS, será necessário agrupá-los. Uma das formas de proceder é utilizar Webpack — isso permite que você agrupe arquivos JavaScript em um único arquivo.

Apenas arquivos JS são suportados.

Node/Deno API não são suportados. Seu código deve resolver todas as dependências.

Leia nossa documentação para saber mais sobre a API Runtime da Azion.

Exemplo:

Se você tem uma Edge Function com módulo para coletar dados:

  • o index.js tem o event listener e módulos de importação;

  • a pasta de módulos tem todos os modules requisitados para sua function;
  • o webpack.config.js tem as configurações de como agrupar sua function.

Requisitos: NodeJS

webpack-cli

Agrupamento e upload:

Depois de desenvolver o código de sua function, você precisa agrupá-la utilizando o seguinte comando:

 webpack-cli --config webpack.config.js

Será gerado um diretório chamado dist com um arquivo único chamado main.js. Você deve copiar o conteúdo deste arquivo e colá-lo no Real-Time Manager.

Estrutura do arquivo:

 your_function/
         modules/
 	             data.js
         index.js
         Webpack.config.js
 

Content:

index.js

 import fetchData from "./modules/data"

 addEventListener("fetch", (event) => {
   event.respondWith(fetchData())
 })

modules/data.js

 async function fetchData() {
   let data = await fetch("https://httpbin.org/get?username=azionuser&name=Azion&last_login=2021-03-10")
   let json = await data.json()
   return new Response(JSON.stringify(json["args"]), {"status": 200})
 }

 export default fetchData

webpack.config.js

O target deve ser “webworker” e o mode deve ser “production”.

module.exports = {
 target: "webworker",
 entry: "./index.js",
 mode: "production",
 }

Arquivo gerado:

dist/main.js

(()=>{"use strict";addEventListener("fetch",(t=>{t.respondWith(async function(){let t=await fetch("https://httpbin.org/get?username=azionuser&name=Azion&last_login=2021-03-10"),e=await t.json();return new Response(JSON.stringify(e.args),{status:200})}())}))})();


6. Ativar suas Configurações

Na parte inferior da tela, você encontra as seguintes opções:

  • Active: esta opção habilita ou desabilita suas configurações no sistema.
  • Cancel: com essa opção, você retorna à página inicial do Edge Functions, também descarta qualquer edição.
  • Save: concluídas as suas seleções, clique em Save para salvar suas configurações.

Ao salvar suas configurações, você retorna à página inicial de Edge Functions, onde visualiza sua lista de Edge Functions classificadas conforme estas opções: name, language, initiator type, last editor, last modified, ref. count and active. Ao clicar nas setas dessas abas, você altera o modo de exibição da sua lista.


7. Documentação de Suporte


Não encontrou o que procurava? Abra um ticket.