

# Adicionar acionadores para uma função do Lambda@Edge
<a name="lambda-edge-add-triggers"></a>

Gatilho do Lambda@Edge é uma combinação de distribuição do CloudFront, comportamento de cache e evento que faz com que a função seja executada. Por exemplo, você pode criar um trigger que faça com que a função seja executada quando o CloudFront receber uma solicitação de um visualizador para um determinado comportamento do cache de sua configuração da distribuição. Você pode especificar um ou mais acionadores do CloudFront. 

**dica**  
Ao criar uma distribuição do CloudFront, você especifica as configurações que informam ao CloudFront como responder ao receber diferentes solicitações. As configurações padrão são chamadas de *comportamento de cache padrão *para a distribuição. Você pode configurar comportamentos de cache adicionais que definem como o CloudFront responde em circunstâncias específicas, por exemplo, quando recebe uma solicitação para um tipo de arquivo específico. Para obter mais informações, consulte [Configurações de comportamento de cache](DownloadDistValuesCacheBehavior.md).

Ao criar uma função do Lambda pela primeira vez, é possível especificar apenas *um* acionador. É possível adicionar mais acionadores à mesma função mais tarde usando o console do Lambda ou editando a distribuição no console do CloudFront.
+ O console do Lambda funciona bem para adicionar mais acionadores a uma função da mesma distribuição do CloudFront.
+ O console do CloudFront pode ser melhor para adicionar acionadores a várias distribuições, pois é mais fácil encontrar a distribuição que você deseja atualizar. Também é possível atualizar outras configurações do CloudFront ao mesmo tempo.

**Topics**
+ [Eventos do CloudFront que podem acionar uma função do Lambda@Edge](lambda-cloudfront-trigger-events.md)
+ [Escolher o evento para acionar a função](lambda-how-to-choose-event.md)
+ [Adicionar acionadores a uma função do Lambda@Edge](lambda-edge-add-triggers-console.md)

# Eventos do CloudFront que podem acionar uma função do Lambda@Edge
<a name="lambda-cloudfront-trigger-events"></a>

Para cada comportamento do cache em uma distribuição do Amazon CloudFront, é possível adicionar até quatro acionadores (associações) que fazem com que uma função do Lambda seja executada quando ocorrem eventos específicos do CloudFront. Os triggers de CloudFront podem ser baseados em um dos quatro eventos do CloudFront, conforme mostrado no diagrama a seguir.

![\[Gráfico conceitual que mostra como eventos acionadores do CloudFront para funções do Lambda integram-se ao CloudFront.\]](http://docs.aws.amazon.com/pt_br/AmazonCloudFront/latest/DeveloperGuide/images/cloudfront-events-that-trigger-lambda-functions.png)


Os eventos do CloudFront que podem ser usados para acionar as funções do Lambda@Edge são os seguintes:

**Solicitação do visualizador**  
A função é executada quando o CloudFront recebe uma solicitação de um visualizador antes de ele verificar se o objeto solicitado está no cache do CloudFront.  
A função não é executada nos seguintes casos:  
+ Ao buscar uma página de erro personalizada.
+ Quando o CloudFront redireciona automaticamente uma solicitação HTTP para HTTPS (quando o valor de [Política de protocolo do visualizador](DownloadDistValuesCacheBehavior.md#DownloadDistValuesViewerProtocolPolicy) é **Redirecionar HTTP para HTTPS**).

**Solicitação da origem**  
A função é executada *apenas* quando o CloudFront encaminha uma solicitação para a origem. Quando o objeto solicitado está no cache do CloudFront, a função não é executada.

**Resposta da origem**  
A função é executada depois que o CloudFront recebe uma resposta da origem e antes de ele armazenar o objeto em cache na resposta. Observe que a função é executada mesmo se um erro for retornado da origem.  
A função não é executada nos seguintes casos:  
+ Quando o arquivo solicitado está no cache do CloudFront e não expirou.
+ Quando a resposta é gerada de uma função acionada por um evento de solicitação de origem.

**Resposta do visualizador**  
A função é executada antes de retornar o arquivo solicitado para o visualizador. Observe que a função é executada independentemente de o arquivo já estar no cache do CloudFront.  
A função não é executada nos seguintes casos:  
+ Quando a origem retorna um código de status HTTP 400 ou posterior.
+ Quando uma página de erro personalizada é retornada.
+ Quando a resposta é gerada de uma função acionada por um evento de solicitação do visualizador.
+ Quando o CloudFront redireciona automaticamente uma solicitação HTTP para HTTPS (quando o valor de [Política de protocolo do visualizador](DownloadDistValuesCacheBehavior.md#DownloadDistValuesViewerProtocolPolicy) é **Redirecionar HTTP para HTTPS**).

Ao adicionar vários triggers para o mesmo comportamento do cache, você pode usá-los para executar a mesma função ou executar funções diferentes para cada trigger. Você também pode associar a mesma função para mais de uma distribuição.

**nota**  
Quando um evento do CloudFront aciona a execução de uma função do Lambda, a função deve ser concluída *antes* que o CloudFront possa continuar.   
Por exemplo, se uma função do Lambda for acionada por um evento de solicitação do visualizador do CloudFront, este não retornará uma resposta ao visualizador nem encaminhará a solicitação à origem enquanto a execução da função do Lambda não for concluída.   
Isso significa que cada solicitação que aciona uma função do Lambda aumenta a latência da solicitação. Portanto, é conveniente executar a função o mais rapidamente possível.

# Escolher o evento para acionar a função
<a name="lambda-how-to-choose-event"></a>

Ao decidir qual evento do CloudFront você deseja usar para acionar uma função do Lambda, considere:

**Quero que o CloudFront armazene em cache objetos que são alterados por uma função do Lambda**  
Para armazenar em cache um objeto que foi modificado por uma função do Lambda para que o CloudFront possa fornecer o objeto no local da borda na próxima vez que ele for solicitado, use os eventos de *solicitação da origem* ou de *resposta da origem*.   
Isso reduz a carga na origem, a latência de solicitações subsequentes e o custo de chamar o Lambda@Edge em solicitações subsequentes.  
Por exemplo, para adicionar, remover ou alterar os cabeçalhos dos objetos retornados pela origem e quiser que o CloudFront armazene o resultado em cache, use o evento de resposta da origem.

**Quero que a função seja executada em todas as solicitações**  
Se quiser executar a função para todas as solicitações que o CloudFront recebe para a distribuição, use os eventos de *solicitação do visualizador* ou de *resposta do visualizador*.   
Os eventos de solicitação e de resposta da origem ocorrem somente quando um objeto solicitado não é armazenado em cache em um ponto de presença, e o CloudFront encaminha uma solicitação para a origem.

**Quero que a função altere a chave de cache**  
Para alterar um valor que está sendo usado como base para o armazenamento em cache, use o evento de *solicitação do visualizador*.   
Por exemplo, se uma função altera o URL para incluir a abreviação de um idioma no caminho (por exemplo, porque o usuário escolheu o idioma em uma lista suspensa), use o evento de solicitação do visualizador:  
+ **URL na solicitação do visualizador**: https://example.com/en/index.html
+ **URL quando a solicitação é proveniente de um endereço IP na Alemanha**: https://example.com/de/index.html
O evento de solicitação do visualizador também pode ser usada se você estiver armazenando em cache com base em cookies ou cabeçalhos de solicitação.  
Se a função alterar cookies ou cabeçalhos, configure o CloudFront para encaminhar a parte aplicável da solicitação à origem. Para saber mais, consulte os seguintes tópicos:  
+ [Conteúdo em cache com base em cookies](Cookies.md)
+ [Conteúdo em cache com base nos cabeçalhos de solicitação](header-caching.md)

**A função afeta a resposta da origem**  
Para alterar a solicitação de maneira a afetar a resposta da origem, use o evento de *solicitação de origem*.   
Normalmente, a maioria dos eventos de solicitação do visualizador não é encaminhada para a origem. O CloudFront responde a uma solicitação com um objeto que já está no cache da borda. Se a função alterar a solicitação com base em um evento de solicitação de origem, o CloudFront armazenará em cache a resposta à solicitação de origem alterada.

# Adicionar acionadores a uma função do Lambda@Edge
<a name="lambda-edge-add-triggers-console"></a>

É possível usar o console do AWS Lambda ou o console do Amazon CloudFront para adicionar um acionador à função do Lambda@Edge.

**Importante**  
É possível criar acionadores somente para versões numeradas da função (não para **\$1LATEST**).

------
#### [ Lambda console ]<a name="lambda-edge-add-triggers-procedure"></a>

**Como adicionar acionadores para eventos do CloudFront a uma função do Lambda@Edge**

1. Faça login no Console de gerenciamento da AWS e abra o console AWS Lambda em [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Na lista Region (Região) na parte superior da página, escolha **US East (N. Virginia) (Leste dos EUA (Norte da Virgínia))**.

1. Na página **Functions**, selecione o nome da função à qual você deseja adicionar triggers.

1. Na página de **Function overview** (Visão geral da função), escolha a guia **Versions** (Versões).

1. Escolha a versão à qual você deseja adicionar triggers.

   Depois de escolher uma versão, o nome do botão mudará para **Version: \$1LATEST** ou para **Version:** *número da versão*.

1. Selecione a guia **Triggers**.

1. Escolha **Add trigger**.

1. Em **Configuração do gatilho**, escolha **Selecione uma origem**, insira **cloudfront** e selecione **CloudFront**.
**nota**  
Se você já tiver criado um ou mais triggers, o CloudFront será o serviço padrão.

1. Especifique os seguintes valores para indicar quando você deseja que a função Lambda seja executada.

   1. **Distribuição**: escolha a distribuição à qual você deseja adicionar o acionador.

   1. **Comportamento de cache**: escolha o comportamento de cache que especifica os objetos nos quais você deseja executar a função.
**nota**  
Se você especificar `*` para o comportamento do cache, a função do Lambda será implantada no comportamento do cache padrão.

   1. **Evento do CloudFront**: escolha o evento do CloudFront que faz com que a função seja executada.

   1. **Incluir corpo**: marque essa caixa de seleção se quiser acessar o corpo da solicitação na função. 

   1. **Confirmar implantação no Lambda@Edge**: marque essa caixa de seleção para que o AWS Lambda replique a função para Regiões da AWS globalmente.

1. Escolha **Adicionar**.

   A função começará a processar solicitações para os eventos do CloudFront especificados quando a distribuição atualizada do CloudFront for implantada. Para determinar se uma distribuição foi implantada, escolha **Distributions** no painel de navegação. Quando uma distribuição estiver implantada, o valor da coluna **Status** da distribuição mudará de **Deploying** (Implantando) para a data e hora da implantação.

------
#### [ CloudFront console ]<a name="lambda-create-functions-add-triggers-cloudfront-console-procedure"></a>

**Como adicionar acionadores para eventos do CloudFront a uma função do Lambda@Edge**

1. Obtenha o Nome de região da Amazon (ARN) da função do Lambda à qual você deseja adicionar triggers:

   1. Faça login no Console de gerenciamento da AWS e abra o console AWS Lambda em [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

   1. Na lista de regiões na parte superior da página, escolha **US East (N. Virginia) (Leste dos EUA (Norte da Virgínia))**.

   1. Na lista de funções, selecione o nome da função à qual você deseja adicionar triggers.

   1. Na página **Function overview** (Visão geral da função), escolha a guia **Versions** (Versões) e escolha a versão numerada à qual você deseja adicionar acionadores.

   1. Selecione **Copy ARN** (Copiar ARN) para copiar o código para a área de transferência. O ARN da função do Lambda tem a seguinte aparência:

      `arn:aws:lambda:us-east-1:123456789012:function:TestFunction:2`

      O número no final (**2**, no exemplo) é o número da versão da função.

1. Abra o console do CloudFront em [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. Na lista de distribuição, selecione o ID da distribuição à qual você deseja adicionar triggers.

1. Escolha a guia **Behaviors**.

1. Selecione o comportamento do cache ao qual você deseja adicionar acionadores e, em seguida, escolha **Edit** (Editar).

1. Em **Function associations** (Associações da função), na lista **Function type** (Tipo da função), escolha **Lambda@Edge** para quando a função deve ser executada: para solicitações do visualizador, respostas do visualizador, solicitações da origem ou respostas da origem. 

   Para obter mais informações, consulte [Escolher o evento para acionar a função](lambda-how-to-choose-event.md).

1. Na caixa de texto **Function ARN / Name** (Função ARN/Nome), cole o ARN da função do Lambda que você deseja executar quando o evento escolhido ocorrer. Esse é o valor copiado do console do Lambda.

1. Selecione **Include body** (Incluir corpo) se quiser acessar o corpo da solicitação na sua função.

   Se deseja apenas substituir o corpo da solicitação, você não precisa selecionar essa opção.

1. Para executar a mesma função em outros tipos de evento, repita as etapas 6 e 7.

1. Escolha **Salvar alterações**.

1. Para adicionar acionadores em outros comportamentos de cache para essa distribuição, repita as etapas 5 a 10.

   A função começará a processar solicitações para os eventos do CloudFront especificados quando a distribuição atualizada do CloudFront for implantada. Para determinar se uma distribuição foi implantada, escolha **Distributions** no painel de navegação. Quando uma distribuição estiver implantada, o valor da coluna **Status** da distribuição mudará de **Deploying** (Implantando) para a data e hora da implantação.

------