BT

Novidades O InfoQ vem desenvolvendo uma série de novas funcionalidades para melhorar sua experiência com o site. Confira!

A AWS lança o Lambda@Edge, habilitando a execução de funções do Node.js no CloudFront CDN

| por Daniel Bryant Seguir 16 Seguidores , traduzido por Delfino Gomes Seguir 0 Seguidores em 07 ago 2017. Tempo estimado de leitura: 5 minutos |

A Amazon Web Services (AWS) lançou para o público em geral o Lambda@Edge, permitindo que seus clientes executem funções lambda do Node.js em seus pontos de presença espalhados mundialmente, o que permite respostas dinâmicas com baixa latência para usuários finais.

Com o Lambda@Edge desenvolvedores podem enviar código Node.js para o AWS Lambda, um serviço "serverless" da Amazon que é executado automaticamente de forma escalável e com alta disponibilidade em um ponto de presença próximo ao usuário final, o que melhora a latência e reduz a sobrecarga na origem. O código no Lambda@Edge é disparado por eventos originados do Amazon CloudFront, uma rede de entrega de conteúdo (CDN) que entrega com segurança dados, vídeos, aplicações e APIs para usuários finais com baixa latência e alta taxa de transferência.

O Lambda@Edge é otimizado para casos de uso sensíveis a latência de rede onde os usuários finais estão distribuídos globalmente e (idealmente) toda a informação necessária para tomada de decisão está disponível em um ponto de presença do CloudFront, ou seja, dentro da função e da requisição. Este fato permite aos desenvolvedores:

  • Inspecionar cookies e reescrever URLs de forma transparente para fazer testes A/B.
  • Retornar conteúdo gerado dinamicamente no ponto de presença, por exemplo, redirecionar usuários não autenticados para uma página de login que é criada sob demanda.
  • Responder com objetos específicos de forma a customizar o website que o usuário visualiza baseado no cabeçalho HTTP User-Agent.
  • Adicionar, remover ou modificar cabeçalhos (sujeito às seguintes restrições) para direcionar usuários para diferentes objetos em cache.
  • Modificar e agrupar cabeçalhos ou URLs para otimizar a utilização do cache.
  • Fazer requisições HTTP para outros recursos na internet e utilizar os resultados para customizar a resposta (porém desenvolvedores devem tomar as devidas precauções para minimizar a latência adicional ao realizar estas requisições).

Uma função Lambda@Edge pode ser disparada em resposta a quatro eventos diferentes do CloudFront:

  • Requisição do visualizador - Este evento ocorre quando um usuário final ou um dispositivo conectado à internet realizar uma requisição HTTP para o CloudFront, e a requisição chega ao ponto de presença mais próximo ao usuário. O evento contêm a requisição HTTP.
  • Resposta ao visualizador - Este evento ocorre quando o servidor CloudFront no ponto de presença está pronto para responder ao usuário final ou dispositivo que fez a requisição. Este evento contém a resposta HTTP.
  • Requisição para a origem - Este evento ocorre quando o servidor no ponto de presença do CloudFront ainda não tem o objeto solicitado em seu cache, e a requisição do visualizador está pronta para ser enviada para o backend (e.g. Amazon EC2, ou o load balancer da aplicação, ou Amazon S3).
  • Resposta da origem - Este evento ocorre quando o servidor do CloudFront no ponto de presença recebe a resposta do backend.

O diagrama abaixo da documentação do AWS Lambda@Edge ajuda a identificar de forma gráfica os eventos que são disparados durante o ciclo requisição/resposta:

CloudFront Lambda@Edge events

Os desenvolvedores que utilizarem o Lambda@Edge devem estar familiarizados com o padrão de desenvolvimento AWS Lambda, e também devem desenvolver o código para funcionar dentro das seguintes restrições:

  • Ambiente de execução - O ambiente de execução atualmente fornece suporte apenas para funções escritas em Node.js e disponibiliza 128 MB de memória para cada função, não oferecendo suporte para bibliotecas ou acesso ao diretório /tmp.
  • Timeouts - Funções que utilizem os eventos de requisição para a origem e de resposta da origem devem terminar dentro de 3 segundos. Funções que utilizem eventos requisição do visualizador e resposta ao visualizador devem terminar dentro de 1 segundo.
  • Acesso à web service - Funções que utilizem requisição para a origem e resposta da origem, caso terminem em 3 segundos, podem acessar as APIs da AWS e buscar conteúdo via HTTP. Estas requisições sempre são feitas de forma síncrona com a requisição ou resposta originais.
  • Versionamento - Após uma atualização de código ser realizada por meio do console Lambda, uma nova versão precisa ser publicada e todos os triggers devem ser reconfigurados para esta nova versão. Após isso, os desenvolvedores devem aguardar que estas modificações sejam replicadas entre os servidores. As funções devem sempre ser referenciadas pelo seu número; $LATEST ou a utilização de um alias não são permitidos.
  • Cabeçalhos - consulte a documentação de "Restrições de cabeçalho" para saber quais cabeçalhos são acessíveis, restritos, apenas leitura ou proibidos.

Não existe limite de utilização gratuita para o Lambda@Edge - a duração da função é calculada a partir do início da execução do código até o seu retorno ou finalização de alguma forma, sendo que o cliente será cobrado $0,00005001 para cada GB-segundo usado. Visto que as funções do Lambda@Edge têm o limite fixo de 128MB disponíveis por execução, a cobrança da duração é de $0,00000625125 para cada 128MB-segundo utilizado. Note que as funções do Lambda@Edge são mensuradas em uma granularidade de 50ms, e não pelo padrão de 100ms do AWS Lambda.

Informações adicionais a respeito do AWS Lambda@Edge podem ser encontradas na seguinte publicação de Jeff Barr "Lambda@Edge - Intelligent Processing of HTTP Requests at the Edge" no blog da AWS, na documentação de produto do AWS Lambda@Edge e no guia do desenvolvedor (todos em inglês).

Avalie esse artigo

Relevância
Estilo/Redação

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Faça seu login para melhorar sua experiência com o InfoQ e ter acesso a funcionalidades exclusivas


Esqueci minha senha

Follow

Siga seus tópicos e editores favoritos

Acompanhe e seja notificados sobre as mais importantes novidades do mundo do desenvolvimento de software.

Like

Mais interação, mais personalização

Crie seu próprio feed de novidades escolhendo os tópicos e pessoas que você gostaria de acompanhar.

Notifications

Fique por dentro das novidades!

Configure as notificações e acompanhe as novidades relacionada a tópicos, conteúdos e pessoas de seu interesse

BT