Restrições das funções de borda - Amazon CloudFront

Restrições das funções de borda

Os tópicos a seguir descrevem as restrições aplicáveis ao CloudFront Functions e ao Lambda@Edge. Algumas restrições aplicam-se a todas as funções de borda, enquanto outras são válidas apenas para o CloudFront Functions ou o Lambda@Edge.

Para obter mais informações sobre cotas (anteriormente chamadas de limites), consulte Cotas no CloudFront Functions e Cotas do Lambda@Edge.

Restrições de todas as funções de borda

As restrições a seguir aplicam-se a todas as funções de borda, tanto ao CloudFront Functions quanto ao Lambda@Edge.

Propriedade da Conta da AWS

Para associar uma função de borda a uma distribuição do CloudFront, a função e a distribuição devem pertencer à mesma Conta da AWS.

Combinação do CloudFront Functions ao Lambda@Edge

Para um determinado comportamento de cache, as seguintes restrições são aplicáveis:

  • Cada tipo de evento (solicitação do visualizador, solicitação de origem, resposta de origem e resposta do visualizador) pode ter apenas uma associação de função de borda.

  • Não é possível combinar o CloudFront Functions e o Lambda@Edge em eventos do visualizador (solicitação do visualizador e resposta do visualizador).

Todas as demais combinações de funções de borda são permitidas. A tabela a seguir explica as combinações permitidas.

Funções do CloudFront

Solicitação do visualizador

Resposta do visualizador

Lambda@Edge

Solicitação do visualizador

Não permitido

Não permitido

Solicitação da origem

Permitido

Permitido

Resposta da origem

Permitido

Permitido

Resposta do visualizador

Não permitido

Não permitido

Códigos de status de HTTP

O CloudFront não invocará funções de borda para eventos de resposta do visualizador se a origem retornar um código de status HTTP 400 ou superior.

As funções de borda para eventos de resposta do visualizador não podem modificar o código de status HTTP da resposta, independentemente de a resposta ter vindo da origem ou do cache do CloudFront.

As funções do Lambda@Edge para eventos de resposta de origem são chamadas para todas as respostas de origem, incluindo quando a origem retorna um código de status HTTP 400 ou superior. Para obter mais informações, consulte Atualização de respostas de HTTP em acionadores de resposta da origem.

Cabeçalhos HTTP

Alguns cabeçalhos HTTP específicos não são permitidos, o que significa que eles não estão expostos a funções de borda e funções não podem adicioná-los. Outros cabeçalhos são somente leitura, o que significa que as funções podem lê-los, mas não podem adicioná-los ou modificá-los.

Cabeçalhos não permitidos

Os cabeçalhos HTTP a seguir não são expostos a funções de borda e as funções não podem adicioná-los. Se sua função adicionar um desses cabeçalhos, o CloudFront não a validará e retornará o código de status HTTP 502 (gateway inválido) para o visualizador.

  • Connection

  • Expect

  • Keep-Alive

  • Proxy-Authenticate

  • Proxy-Authorization

  • Proxy-Connection

  • Trailer

  • Upgrade

  • X-Accel-Buffering

  • X-Accel-Charset

  • X-Accel-Limit-Rate

  • X-Accel-Redirect

  • X-Amz-Cf-*

  • X-Amzn-Auth

  • X-Amzn-Cf-Billing

  • X-Amzn-Cf-Id

  • X-Amzn-Cf-Xff

  • X-Amzn-Errortype

  • X-Amzn-Fle-Profile

  • X-Amzn-Header-Count

  • X-Amzn-Header-Order

  • X-Amzn-Lambda-Integration-Tag

  • X-Amzn-RequestId

  • X-Cache

  • X-Edge-*

  • X-Forwarded-Proto

  • X-Real-IP

Cabeçalhos somente leitura

Os cabeçalhos a seguir são somente leitura. Sua função pode lê-los ou usá-los como entrada para a lógica da função, mas ão podep alterar os valores. Se sua função adicionar ou editar um cabeçalho somente leitura, a solicitação falhará na validação do CloudFront, o qual retornará o código de status HTTP 502 (gateway inválido) para o visualizador.

Cabeçalhos somente leitura em eventos de solicitação do visualizador

Os cabeçalhos a seguir são somente leitura em eventos de solicitação do visualizador.

  • Content-Length

  • Host

  • Transfer-Encoding

  • Via

Cabeçalhos somente leitura em eventos de solicitação de origem (somente Lambda@Edge)

Os seguintes cabeçalhos são somente leitura em eventos de solicitação de origem, os quais existem apenas no Lambda@Edge.

  • Accept-Encoding

  • Content-Length

  • If-Modified-Since

  • If-None-Match

  • If-Range

  • If-Unmodified-Since

  • Transfer-Encoding

  • Via

Cabeçalhos somente leitura em eventos de resposta de origem (somente Lambda@Edge)

Os seguintes cabeçalhos são somente leitura em eventos de resposta de origem, os quais existem apenas no Lambda@Edge.

  • Transfer-Encoding

  • Via

Cabeçalhos somente leitura em eventos de resposta do visualizador

Os cabeçalhos a seguir são somente leitura em eventos de resposta do visualizador.

  • Content-Encoding

  • Content-Length

  • Transfer-Encoding

  • Warning

  • Via

Strings de consulta

As restrições a seguir aplicam-se a funções que leem, atualizam ou criam uma string de consulta em um URI de solicitação.

  • (Somente Lambda@Edge) Para acessar a string de consulta em uma solicitação de origem ou função de resposta de origem, sua política de cache ou política de solicitação de origem deve ser definida como All (Todas) para Query strings (Strings de consulta).

  • Uma função pode criar ou atualizar uma string de consulta para eventos de solicitação do visualizador e solicitação da origem (eventos de solicitação da origem existem apenas no Lambda@Edge).

  • Uma função pode ler uma string de consulta, mas não pode criar ou atualizar uma, para eventos de resposta da origem e resposta do visualizador (eventos de resposta da origem existem apenas no Lambda@Edge).

  • Se uma função criar ou atualizar uma string de consulta, as seguintes restrições se aplicarão:

    • A string de consulta não pode incluir espaços, caracteres de controle ou o identificador de fragmento (#).

    • O tamanho total do URI, incluindo a string de consulta, deve ser menor que 8.192 caracteres.

    • Recomendamos o uso de codificação percentual para o URI e a string de consulta. Para obter mais informações, consulte Codificação do URI e da string de consulta.

URI

Se uma função alterar o URI para uma solicitação, o comportamento do cache da solicitação e a origem para a qual a solicitação é encaminhada não serão alterados.

O tamanho total do URI, incluindo a string de consulta, deve ser menor que 8.192 caracteres.

Codificação do URI e da string de consulta

Os valores de string de consulta e URI passados para as funções de borda são codificados em UTF-8. Sua função deve usar codificação UTF-8 para o URI e os valores da string de consulta retornados. A codificação percentual é compatível com a codificação UTF-8.

A lista a seguir explica como o CloudFront lida com a codificação de valores de URI e string de consulta:

  • Quando os valores na solicitação são codificados em UTF-8, o CloudFront encaminha os valores para a função sem alterá-los.

  • Quando os valores na solicitação são codificados em ISO-8859-1, o CloudFront os converte para a codificação UTF-8 antes de encaminhá-los para sua função.

  • Quando os valores na solicitação são codificados usando qualquer outra codificação de caracteres, o CloudFront assume que eles estão codificados em ISO 8859-1 e tenta convertê-los de ISO-8859-1 para UTF-8.

    Importante

    A versão convertida pode ser uma interpretação imprecisa dos valores da solicitação original. Isso pode fazer com que sua função ou origem produzam um resultado indesejado.

Os valores de URI e de string de consulta encaminhados pelo CloudFront para sua origem dependem se uma função altera os valores:

  • Se uma função não alterar o URI ou a string de consulta, o CloudFront encaminhará para sua origem os valores que recebeu na solicitação.

  • Se uma função alterar o URI ou a string de consulta, o CloudFront encaminhará os valores codificados em UTF-8.

Microsoft Smooth Streaming

Não é possível usar funções de borda com uma distribuição do CloudFront utilizada em streaming de arquivos de mídia transcodificados no formato Microsoft Smooth Streaming.

Marcação

Não é possível adicionar tags a funções de borda. Para saber mais sobre a marcação no CloudFront, consulte Marcar distribuições do Amazon CloudFront.

Restrições do CloudFront Functions

As restrições a seguir aplicam-se somente ao CloudFront Functions.

Logs

Os logs de função no CloudFront Functions são truncados em 10 KB.

Corpo da solicitação

O CloudFront Functions não pode acessar o corpo da solicitação HTTP.

Tempo de execução

O ambiente de tempo de execução do CloudFront Functions não oferece suporte à avaliação dinâmica de código e restringe o acesso à rede, ao sistema de arquivos e aos temporizadores. Para obter mais informações, consulte Recursos restritos.

Utilização de recursos de computação

O CloudFront Functions tem um limite de tempo para executar, o qual é medido como Utilização de recursos de computação. A utilização de recursos de computação é um número entre 0 e 100 que indica a quantidade de tempo que a função levou para ser executada como um percentual do tempo máximo permitido. Por exemplo, uma utilização de computação de 35 significa que a função foi concluída em 35% do tempo máximo permitido.

Quando você testa uma função, é possível ver o valor de utilização de recursos de computação na saída do evento de teste. Para funções de produção, você pode visualizar a compute utilization metric (métrica de utilização de recursos de computação) na Página de monitoramento no console do CloudFront ou no CloudWatch.

Restrições ao Lambda@Edge

As restrições a seguir aplicam-se somente ao Lambda@Edge.

Versionamento da função do Lambda

Você deve usar uma versão numerada da função do Lambda, e não $LATEST nem aliases.

Região do Lambda

A função do Lambda deve estar na região Leste dos EUA (Norte da Virgínia).

Permissões de função do Lambda

A função de execução do IAM associada à função do Lambda deve permitir que os principais de serviço lambda.amazonaws.com e edgelambda.amazonaws.com assumam a função. Para obter mais informações, consulte Definição das permissões e funções do IAM para o Lambda@Edge.

Recursos do Lambda e tempos de execução compatíveis

Os seguintes recursos do Lambda não são compatíveis com o Lambda@Edge:

O Lambda@Edge oferece suporte a funções do Lambda com os seguintes tempos de execução:

Node.js

Python

  • Node.js 16

  • Node.js 14

  • Node.js 12

  • Node.js 10²

  • Node.js 8¹

  • Node.js 6¹

  • Python 3.9

  • Python 3.8

  • Python 3.7

¹Essa versão do Node.js chegou ao fim da vida útil. Não é possível criar nem atualizar funções com esta versão. Caso você já tenha uma função com essa versão, poderá associá-la a uma distribuição do CloudFront. Funções com essa versão que já estão associadas a uma distribuição continuam a ser executadas. No entanto, recomendamos mover sua função para uma versão mais recente do Node.js. Para obter mais informações, consulte Política de descontinuação de tempo de execução no Guia do desenvolvedor do AWS Lambda e a Agenda de versões do Node.js no GitHub.

²Essa versão do Node.js chegou ao fim da vida útil e chegará ao fim da fase de suporte 2 no Lambda em 30 de agosto de 2021. A partir de 30 de agosto de 2021, não será possível criar nem atualizar funções com essa versão. Caso você já tenha uma função com essa versão, poderá associá-la a uma distribuição do CloudFront. Funções com essa versão que já estão associadas a uma distribuição continuam a ser executadas. No entanto, recomendamos mover sua função para uma versão mais recente do Node.js. Para obter mais informações, consulte Política de descontinuação de tempo de execução no Guia do desenvolvedor do AWS Lambda e a Agenda de versões do Node.js no GitHub.

Cabeçalhos do CloudFront

As funções do Lambda@Edge podem ler, editar, remover ou adicionar qualquer um dos seguintes cabeçalhos do CloudFront:

  • CloudFront-Forwarded-Proto

  • CloudFront-Is-Desktop-Viewer

  • CloudFront-Is-Mobile-Viewer

  • CloudFront-Is-SmartTV-Viewer

  • CloudFront-Is-Tablet-Viewer

  • CloudFront-Viewer-Country¹

Observe o seguinte:

  • Para que o CloudFront adicione esses cabeçalhos, configure-o para adicioná-los usando uma política de cache ou política de solicitação de origem.

  • O CloudFront adiciona os cabeçalhos após o evento de solicitação do visualizador, o que significa que eles não estão disponíveis para o Lambda@Edge em uma função de solicitação do visualizador.

  • Se a solicitação do visualizador incluir cabeçalhos que têm esses nomes e você configurou o CloudFront para adicionar esses cabeçalhos usando uma política de cache ou política de solicitação de origem, o CloudFront substituirá os valores de cabeçalho que estavam na solicitação do visualizador. As funções voltadas para o visualizador veem o valor do cabeçalho da solicitação do visualizador, enquanto as funções voltadas para a origem veem o valor do cabeçalho adicionado pelo o CloudFront.

  • ¹Cabeçalho CloudFront-Viewer-Country: se uma função de solicitação do visualizador adicionar esse cabeçalho, a validação falhará e o CloudFront retornará o código de status HTTP 502 (gateway inválido) para o visualizador.

Restrições do corpo da solicitação com a opção de incluir corpo

Ao escolher a opção Include Body (Incluir corpo) para expor o corpo da solicitação à função do Lambda@Edge, as informações e cotas de tamanho a seguir se aplicam às partes do corpo que são expostas ou substituídas.

  • O CloudFront sempre codifica em base64 o corpo da solicitação antes de expô-lo ao Lambda@Edge.

  • Se o corpo da solicitação for grande, o CloudFront o truncará antes de expô-lo ao Lambda@Edge da seguinte forma:

    • Para eventos de solicitação do visualizador, o corpo é truncado em 40 KB.

    • Para eventos de solicitação da origem, o corpo é truncado em 1 MB.

  • Se você acessar o corpo da solicitação como somente leitura, o CloudFront enviará o corpo da solicitação original completo à origem.

  • Se a função do Lambda@Edge substituir o corpo da solicitação, as cotas de tamanho a seguir se aplicarão ao corpo retornado pela função:

    • Se a função do Lambda@Edge retornar o corpo como texto simples:

      • Para eventos de solicitação do visualizador, o corpo é truncado em 40 KB.

      • Para eventos de solicitação da origem, o corpo é truncado em 1 MB.

    • Se a função do Lambda@Edge retornar o corpo como texto codificado em base64:

      • Para eventos de solicitação do visualizador, o corpo é truncado em 53,2 KB.

      • Para eventos de solicitação da origem, o corpo é truncado em 1,33 MB.