Tutorial: criação de uma função do Lambda@Edge simples - Amazon CloudFront

Tutorial: criação de uma função do Lambda@Edge simples

Este tutorial mostra como começar a usar o Lambda@Edge, ajudando a criar e adicionar um exemplo de função do Node.js que é executado no CloudFront. O exemplo que apresentamos adiciona cabeçalhos HTTP para uma resposta de segurança, o que pode melhorar a segurança e a privacidade para um site. Você não precisa de um site para esta demonstração. Nela, simplesmente adicionamos cabeçalhos de segurança a uma resposta quando o CloudFront recupera um arquivo.

Este exemplo descreve as etapas para criar e configurar uma função do Lambda@Edge. Ao criar sua própria solução Lambda@Edge, você segue etapas semelhantes e escolhe entre as mesmas opções.

Etapa 1: cadastrar-se com uma Conta da AWS

Caso ainda não o tenha feito, cadastre-se na Amazon Web Services em https://aws.amazon.com/. Escolha Cadastre-se agora e insira as informações necessárias.

Etapa 2: Criar uma distribuição do CloudFront

Antes de criar o exemplo de função do Lambda@Edge, você deve ter um ambiente do CloudFront para trabalhar com o que inclui uma origem para servir conteúdo.

Você está familiarizado com o CloudFront? O CloudFront entrega conteúdo por meio de uma rede global de pontos de presença. Ao configurar uma função do Lambda com o CloudFront, a função pode personalizar conteúdo mais próximo dos visualizadores para melhorar a performance. Se você não estiver familiarizado com o CloudFront, dedique alguns minutos antes de concluir o tutorial para ler uma breve visão geral e saber um pouco sobre como o CloudFront armazena em cache e entrega conteúdo.

Para este exemplo, crie uma distribuição do CloudFront que use um bucket do Amazon S3 como a origem da distribuição. Se já tiver um ambiente para usar, você pode ignorar esta etapa.

Como criar uma distribuição do CloudFront com uma origem do Amazon S3

  1. Crie um bucket do Amazon S3 com um ou dois arquivos, como arquivos de imagem, para exemplo de conteúdo. Para obter ajuda, siga as etapas em Fazer upload do conteúdo no Amazon S3. Certifique-se de ter definido permissões para conceder acesso público de leitura aos objetos do seu bucket.

  2. Crie uma distribuição do CloudFront e adicione o bucket do S3 como uma origem, seguindo as etapas em Criar uma distribuição na Web do CloudFront. Se você já tiver uma distribuição, pode adicionar o bucket como origem para essa distribuição.

    dica

    Anote seu ID de distribuição. Posteriormente neste tutorial, ao adicionar um trigger do CloudFront para a sua função, você deve escolher o ID da distribuição em uma lista suspensa, por exemplo, E653W22221KDDL.

Etapa 3: criar sua função

Nesta etapa, você cria uma função do Lambda, começando com um modelo de esquema que é fornecido no console do Lambda. A função adiciona o código para atualizar os cabeçalhos de segurança na distribuição do CloudFront.

Você está familiarizado com o Lambda ou com o Lambda@Edge? O Lambda@Edge permite usar triggers do CloudFront para invocar uma função do Lambda. Quando você associa uma distribuição do CloudFront a uma função do Lambda, o CloudFront intercepta solicitações e respostas nos pontos de presença do CloudFront e executa a função. As funções do Lambda podem melhorar a segurança ou personalizar informações próximas aos visualizadores, para melhorar a performance. Neste tutorial, a função que criamos atualiza os cabeçalhos de segurança em uma resposta do CloudFront.

Há várias etapas a serem executadas ao criar uma função do Lambda. Neste tutorial, você usa um esquema modelo como base para a função e, em seguida, atualiza a função com um código que define os cabeçalhos de segurança. Por fim, você adiciona e implanta um trigger do CloudFront para executar a função.

Como criar uma função do Lambda

  1. Faça login no AWS Management Console e abra o console do AWS Lambda em https://console.aws.amazon.com/lambda/.

    Importante

    Verifique se você está na região US-East-1 (N. Virginia) Leste dos EUA-1 (Virgínia do Norte) (us-east-1). Você deve estar nessa região para criar as funções do Lambda@Edge.

  2. Escolha Create function (Criar função).

  3. Na página Create function (Criar função), escolha Use a blueprint (Usar um esquema) e filtre os esquemas do CloudFront inserindo cloudfront no campo de pesquisa. A Keyword: cloudfront (Palavra-chave: cloudfront) é mostrada, e todos os esquemas marcados para o CloudFront são listados.

    nota

    Os esquemas do CloudFront estão disponíveis somente na região US-East-1 (N. Virgínia) (Leste dos EUA-1 (Norte da Virgínia)) (us-east-1).

  4. Escolha o esquema cloudfront-modify-response-header como modelo para sua função.

  5. Insira as seguintes informações sobre sua função:

    Nome

    Insira um nome para sua função.

    Função de execução

    Escolha como definir as permissões para a função. Para usar o modelo básico de política de permissões recomendado do Lambda@Edge, escolha Create a new role from AWS policy templates (Criar uma função de modelos de política da AWS).

    Nome da função

    Insira um nome para a função que o modelo de política cria.

    Modelos de política

    O Lambda adiciona automaticamente o modelo de política Basic Edge Lambda permissions (Permissões básicas do Edge do Lambda) porque você escolheu um esquema do CloudFront como a base da função. Esse modelo de política adiciona permissões de função de execução que permitem que o CloudFront execute sua função do Lambda para você em locais do CloudFront em todo o mundo. Para mais informações, consulte Definição das permissões e funções do IAM para o Lambda@Edge.

  6. Escolha Create function (Criar função). O Lambda cria a função e, na próxima página, você verá a configuração da sua função.

  7. Na seção Designer da página, escolha o nome da sua função, conforme mostrado na imagem a seguir. Neste exemplo, o nome da função é ExampleFunction.

    
								Página de função do Lambda no console do Lambda mostrando a seção do designer com o nome da função selecionado.
  8. Role para baixo até a seção Function code (Código de função) da página, conforme mostrado na imagem a seguir.

    
								Página de função do Lambda no console do Lambda mostrando a seção de código de função.

    Substitua o código do modelo por uma função que modifica os cabeçalhos de segurança que sua origem retorna. Por exemplo, você pode usar um código semelhante ao seguinte:

    'use strict'; exports.handler = (event, context, callback) => { //Get contents of response const response = event.Records[0].cf.response; const headers = response.headers; //Set new headers headers['strict-transport-security'] = [{key: 'Strict-Transport-Security', value: 'max-age= 63072000; includeSubdomains; preload'}]; headers['content-security-policy'] = [{key: 'Content-Security-Policy', value: "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; object-src 'none'"}]; headers['x-content-type-options'] = [{key: 'X-Content-Type-Options', value: 'nosniff'}]; headers['x-frame-options'] = [{key: 'X-Frame-Options', value: 'DENY'}]; headers['x-xss-protection'] = [{key: 'X-XSS-Protection', value: '1; mode=block'}]; headers['referrer-policy'] = [{key: 'Referrer-Policy', value: 'same-origin'}]; //Return modified response callback(null, response); };
  9. Selecione Save (Salvar) para salvar o código atualizado.

Prossiga para a próxima seção para adicionar um trigger do CloudFront para executar a função.

Etapa 4: adicionar um acionador do CloudFront para executar a função

Agora que você tem uma função do Lambda para atualizar os cabeçalhos de segurança, configure o trigger do CloudFront que executa a função para adicionar cabeçalhos em qualquer resposta recebida pelo CloudFront da origem para sua distribuição.

Como configurar o trigger do CloudFront para sua função

  1. Na seção Designer da página, escolha CloudFront, conforme mostrado na imagem a seguir.

    
								Página de função do Lambda no console do Lambda mostrando a seção de designer com o CloudFront selecionado.
  2. Role para baixo até a seção Configure triggers (Configurar triggers) da página e escolha Deploy to Lambda@Edge (Implantar no Lambda@Edge).

  3. Na página Deploy to Lambda@Edge (Implantar no Lambda@Edge), em Configure CloudFront trigger (Configurar o trigger do CloudFront), insira as seguintes informações:

    Distribution

    O ID de distribuição do CloudFront a ser associado à sua função. Na lista suspensa, escolha o ID da distribuição.

    Comportamento de cache

    O comportamento de cache para usar com o trigger. Para este exemplo, deixe o valor definido como *, que indica o comportamento de cache padrão da distribuição. Para obter mais informações, consulte Configurações de comportamento de cacheValores especificados ao criar ou atualizar uma distribuição no tópico.

    Evento do CloudFront

    O trigger que especifica quando a função é executada. Queremos que os cabeçalhos de segurança da função sejam executados sempre que o CloudFront retornar uma resposta da origem. Portanto, na lista suspensa, escolha Origin response (Resposta de origem). Para mais informações, consulte Adição de acionadores para uma função Lambda@Edge.

  4. Em Confirm deploy to Lambda@Edge (Confirmar implantação no Lambda@Edge), marque a caixa de seleção para confirmar que o acionador será implantado e executar sua função em todos os locais da AWS.

  5. Escolha Deploy (Implantar) para adicionar o trigger e replicar a função para os locais da AWS em todo o mundo. Se necessário, feche a página Deploy to Lambda@Edge (Implantar no Lambda@Edge).

  6. Aguarde até que a função seja replicada. Isso normalmente demora vários minutos.

    Você pode verificar se a replicação foi concluída acessando o console do CloudFront e visualizando a distribuição. Aguarde o status de distribuição mudar de In Progress (Em andamento) para Deployed (Implantado), o que significa que sua função foi replicada. Para verificar se a função funciona, siga as etapas na próxima seção.

Etapa 5: verificar se a função é executada

Agora que você criou a função do Lambda e configurou um trigger para executá-la em uma distribuição do CloudFront, verifique se a função está realizando o que você espera. Neste exemplo, verificamos os cabeçalhos HTTP que o CloudFront retorna, para garantir que os cabeçalhos de segurança estejam adicionados.

Para verificar se a sua função do Lambda@Edge adiciona cabeçalhos de segurança

  1. Em um navegador, insira o URL para um arquivo no seu bucket do S3. Por exemplo, você pode usar um URL semelhante a http://d111111abcdef8.cloudfront.net/image.jpg.

    Para obter mais informações sobre o nome de domínio do CloudFront a ser usado no arquivo URL, consulte Personalizar o formato do URL para arquivos no CloudFront.

  2. Abra seu navegador da Web da barra de ferramentas do desenvolvedor. Por exemplo, em sua janela do navegador Chrome, abra o menu de contexto (clique com o botão direito do mouse) e escolha Inspect (Inspecionar).

  3. Escolha a guia Network.

  4. Recarregue a página para visualizar sua imagem e, em seguida, escolha uma solicitação HTTP no painel esquerdo. Você vê os cabeçalhos HTTP exibidos em um painel separado.

  5. Verifique a lista de cabeçalhos HTTP para verificar se os cabeçalhos de segurança esperados são incluídos na lista. Por exemplo, você poderá ver cabeçalhos semelhantes aos mostrados na captura de tela a seguir:

    
								Os cabeçalhos de HTTP listam com os cabeçalhos de segurança em destaque esperados.

Se os cabeçalhos de segurança forem incluídos na sua lista de cabeçalhos, excelente! Você criou com êxito sua primeira função do Lambda@Edge. Se o CloudFront retornar erros ou se houver outros problemas, continue na próxima etapa para solucionar os problemas.

Etapa 6: solução de problemas

Se o CloudFront retornar erros ou não adicionar os cabeçalhos de segurança conforme esperado, você poderá investigar a execução da função verificando o CloudWatch Logs. Certifique-se de usar os logs armazenados no local da AWS que estão mais próximos do local em que a função é executada.

Por exemplo, se você visualizar o arquivo de Londres, tente alterar a região no console do CloudWatch para EU (Londres).

Como examinar os CloudWatch Logs para sua função do Lambda@Edge

  1. Faça login no AWS Management Console e abra o console do CloudWatch em https://console.aws.amazon.com/cloudwatch/.

  2. Altere a Region (Região) para o local que é mostrado quando você visualiza o arquivo no navegador. Aqui é onde a função está sendo executada.

  3. No painel esquerdo, selecione Logs para visualizar os logs da sua distribuição.

Para mais informações, consulte Monitorar o CloudFront com o Amazon CloudWatch.

Etapa 7: apagar recursos de exemplo

Se você criar um bucket do Amazon S3 e a distribuição do CloudFront apenas para este tutorial, exclua os recursos da AWS alocados para não acumular mais cobranças. Depois que você excluir os seus recursos da AWS, qualquer conteúdo que você adicionou não ficará mais disponível.

Tarefas

Exclua o bucket do S3

Antes de excluir o bucket do Amazon S3, verifique se o log está desativado para o bucket. Caso contrário, a AWS continuará gravando logs para o bucket à medida que você o excluir.

Para desabilitar o registro em log para um bucket

  1. Abra o console do Amazon S3 em https://console.aws.amazon.com/s3/.

  2. Selecione o bucket e escolha Properties (Propriedades).

  3. Em Properties (Propriedades), escolha Logging (Registro).

  4. Desmarque a caixa de seleção Enabled (Habilitado).

  5. Escolha Save (Salvar).

Agora, você pode excluir seu bucket. Para obter mais informações, consulte Exclusão de um bucket no Guia do usuário do console do Amazon Simple Storage Service.

Exclua a distribuição do CloudFront

Antes de excluir uma distribuição do CloudFront, você deve desabilitá-la. Uma distribuição desabilitada deixa de ser funcional e não acumula encargos. É possível habilitar uma distribuição desabilitada a qualquer momento. Depois que você excluir uma distribuição desabilitada, ela deixará de estar disponível.

Como desabilitar e excluir uma distribuição do CloudFront

  1. Abra o console do CloudFront em https://console.aws.amazon.com/cloudfront/v3/home.

  2. Selecione a distribuição que você deseja desabilitar e escolha Disable (Desabilitar).

  3. Quando a confirmação for solicitada, escolha Yes, Disable (Sim, desabilitar).

  4. Selecione a distribuição desabilitada e escolha Delete (Excluir).

  5. Quando a confirmação for solicitada, escolha Yes, Delete (Sim, excluir).

Recursos para aprender mais

Agora que você tem uma ideia básica de como as funções do Lambda@Edge funcionam, saiba mais lendo o seguinte: