Personalizar na borda com funções - Amazon CloudFront

Personalizar na borda com funções

Com o Amazon CloudFront, você pode escrever seu próprio código para personalizar como suas distribuições do CloudFront processam solicitações e respostas HTTP. O código é executado perto dos visualizadores (usuários) para minimizar a latência e você não precisa gerenciar servidores ou outra infraestrutura. Você pode escrever código para manipular as solicitações e respostas que fluem pelo CloudFront, executar autenticação e autorização básicas, gerar respostas HTTP na borda e muito mais.

O código que você escreve e anexa à sua distribuição do CloudFront é chamado de função da borda. O CloudFront oferece duas maneiras de escrever e gerenciar funções da borda:

  • CloudFront Functions: com o CloudFront Functions, você pode escrever funções leves em JavaScript para personalizações de CDN de alta escala e sensíveis à latência. O ambiente de tempo de execução do CloudFront Functions oferece tempos de startup de submilissegundos, é dimensionado imediatamente para lidar com milhões de solicitações por segundo e é altamente seguro. O CloudFront Functions é um recurso nativo do CloudFront, o que significa que você pode criar, testar e implantar seu código inteiramente no CloudFront.

  • Lambda@Edge: o Lambda@Edge é uma extensão do AWS Lambda que oferece computação poderosa e flexível para funções complexas e lógica completa de aplicações mais perto de seus visualizadores, além de ser altamente seguro. As funções do Lambda@Edge são executadas em um ambiente de tempo de execução Node.js ou Python. Você publica funções em uma única região da AWS, e ao associar a função a uma distribuição do CloudFront, o Lambda@Edge replica automaticamente seu código no mundo inteiro.

Como escolher entre o CloudFront Functions e o Lambda@Edge

O CloudFront Functions e o Lambda@Edge fornecem uma maneira de executar código em resposta aos eventos do CloudFront. No entanto, existem diferenças importantes que os distinguem. Essas diferenças podem ajudar você a escolher o que é certo para o seu caso de uso. A tabela a seguir lista algumas das diferenças importantes entre o CloudFront Functions e o Lambda@Edge.

CloudFront Functions Lambda@Edge
Linguagens de programação JavaScript (compatível com ECMAScript 5.1) Node.js e Python
Origens de eventos
  • Solicitação do visualizador

  • Resposta do visualizador

  • Solicitação do visualizador

  • Resposta do visualizador

  • Solicitação da origem

  • Resposta da origem

Dimensionar 10.000.000 de solicitações por segundo ou mais Até 10.000 solicitações por segundo por região
Duração da função Submilissegundo

Até 5 segundos (solicitação do visualizador e resposta do visualizador)

Até 30 segundos (solicitação da origem e resposta da origem)

Memória máxima 2 MB 128 a 3.008 MB
Tamanho máximo do código de função e bibliotecas incluídas 10 KB

1 MB (solicitação do visualizador e resposta do visualizador)

50 MB (solicitação da origem e resposta da origem)

Acesso à rede Não Sim
Acesso ao sistema de arquivos Não Sim
Acesso ao órgão de solicitação Não Sim
Acesso a dados de geolocalização e dispositivos Sim

Não (solicitação do visualizador)

Sim (solicitação da origem, resposta da origem e resposta do visualizador)

Pode criar e testar inteiramente no CloudFront Sim Não
Registro em log de funções e métricas Sim Sim
Definição de preços Nível gratuito disponível; cobrado por solicitação Sem nível gratuito; cobrado por solicitação e duração da função

O CloudFront Functions é ideal para funções leves e curtas para casos de uso, como os exemplos a seguir:

  • Normalização da chave de cache: você pode transformar atributos de solicitação HTTP (cabeçalhos, sequências de caracteres de consulta, cookies, até mesmo o caminho da URL de solicitação) para criar uma chave de cache ideal, que pode melhorar a taxa de acertos do cache.

  • Manipulação de cabeçalho: você pode inserir, modificar ou excluir cabeçalhos HTTP na solicitação ou resposta. Por exemplo, você pode adicionar um cabeçalho True-Client-IP a cada solicitação.

  • Redirecionamento ou regravações de URL: você pode redirecionar os visualizadores para outras páginas com base nas informações da solicitação ou regravar todas as solicitações de um caminho para outro.

  • Solicitar autorização: você pode validar tokens de autorização com hash, como Tokens Web JSON (JWT), por meio da inspeção dos cabeçalhos de autorização ou outros metadados de solicitação.

Para começar a usar o CloudFront Functions, consulte Como personalizar a borda com o CloudFront Functions.

O Lambda@Edge é um bom ajuste para os seguintes cenários:

  • Funções que levam vários milissegundos ou mais para serem concluídas.

  • Funções que exigem CPU ou memória ajustável.

  • Funções que dependem de bibliotecas de terceiros (incluindo o SDK da AWS para integração com outros serviços da AWS).

  • Funções que exigem acesso à rede para usar serviços externos para processamento.

  • Funções que exigem acesso ao sistema de arquivos ou acesso ao corpo de solicitações HTTP.

Para começar a usar o Lambda@Edge, consulte Personalizar o conteúdo na borda com o Lambda@Edge.