Tutorial: criar uma função básica do Lambda@Edge - Amazon CloudFront

Tutorial: criar uma função básica do Lambda@Edge

Este tutorial mostra como começar a usar o Lambda@Edge criando e configurando um exemplo de função do Node.js que é executado no CloudFront. Este exemplo adiciona cabeçalhos de segurança HTTP a uma resposta quando o CloudFront recupera um arquivo. (Isso pode melhorar a segurança e a privacidade de um site.)

Você não precisa de seu próprio site para esse tutorial. No entanto, ao optar por criar sua própria solução do Lambda@Edge, você segue etapas semelhantes e escolhe entre as mesmas opções.

Etapa 1: cadastrar-se com uma Conta da AWS

Se ainda não tiver feito isso, cadastre-se para uma Conta da AWS. Para ter mais informações, consulte Cadastre-se em uma Conta da AWS.

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.

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 acionador do CloudFront para a 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 no console do Lambda. A função adiciona o código para atualizar os cabeçalhos de segurança na distribuição do CloudFront.

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 da AWS US-East-1 (Norte da Virgínia) (us-east-1). Você deve estar nessa região para criar as funções do Lambda@Edge.

  2. Escolha a opção 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.

    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 Modify HTTP response header (Modificar cabeçalho de resposta HTTP) como modelo para sua função.

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

    Nome da função

    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, selecione 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íticas

    O Lambda adiciona automaticamente o modelo de política Permissões básicas do Lambda@Edge 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 ter mais informações, consulte Configurar permissões e perfis do IAM para o Lambda@Edge.

  6. Escolha a opção Criar função.

  7. No painel Implantar no Lambda@Edge exibido, escolha Cancelar. (Para este tutorial, você deve modificar o código da função antes de implantá-la no Lambda@Edge.)

  8. Role para baixo até a seção Code source (Origem do código) da página.

  9. 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.request; 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); };
  10. Selecione File (Arquivo), 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. No console do Lambda, na página de Function overview (Visão geral da função) da função, escolha Add trigger (Adicionar acionador).

  2. Em Trigger configuration (Configuração do acionador), escolha CloudFront.

  3. Escolha Implantar no Lambda@Edge.

  4. No painel Implantar no Lambda@Edge, em Configurar acionador 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 cacheReferência de configurações da 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. Então, na lista suspensa, escolha Resposta da origem. Para ter mais informações, consulte Adicionar acionadores para uma função do Lambda@Edge.

  5. Marque a caixa de seleção Confirmar implantação no Lambda@Edge.

  6. Escolha Deploy (Implantar) para adicionar o trigger e replicar a função para os locais da AWS em todo o mundo.

  7. 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 Implantando para uma data e hora, 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 https://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 a barra de ferramentas do desenvolvedor da Web do navegador. 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 ter mais informações, consulte Monitorar métricas do 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.

Excluir a função Lambda

Para ter instruções sobre como excluir a associação da função do Lambda e, opcionalmente, a própria função, consulte Excluir funções e réplicas do Lambda@Edge.

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/v4/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: