

# Associar funções a distribuições
<a name="associate-function"></a>

Para usar uma função com uma distribuição, associe a função a um ou mais comportamentos de cache na distribuição. Você pode associar uma função a vários comportamentos de cache em várias distribuições.

É possível associar uma função a qualquer um dos seguintes itens:
+ Um comportamento de cache existente.
+ Um novo comportamento de cache em uma distribuição existente.
+ Um novo comportamento de cache em uma nova distribuição.

Quando você associa uma função a um comportamento de cache, você deve selecionar um *tipo de evento*. O tipo de evento determina quando o CloudFront executa a função. 

É possível escolher entre os seguintes tipos de evento:
+ **Solicitação do visualizador**: a função é executada quando o CloudFront recebe uma solicitação de um visualizador.
+ **Resposta do visualizador**: a função é executada antes que o CloudFront retorne uma resposta ao visualizador.

Não é possível usar tipos de evento voltados para a origem (*solicitação de origem* e *resposta de origem*) com o CloudFront Functions. Em vez disso, você pode usar o Lambda@Edge. Para ter mais informações, consulte [Eventos do CloudFront que podem acionar uma função do Lambda@Edge](lambda-cloudfront-trigger-events.md). 

**nota**  
Antes de associar uma função, você deve [publicá-la](publish-function.md) na fase `LIVE`.

É possível associar uma função a uma distribuição no console do CloudFront ou à AWS Command Line Interface (AWS CLI). O procedimento a seguir mostra como associar uma função a um comportamento de cache existente. 

------
#### [ Console ]

**Como associar uma função a um comportamento de cache existente**

1. Faça login no console do CloudFront em [https://console.aws.amazon.com/cloudfront/v4/home#/functions](https://console.aws.amazon.com/cloudfront/v4/home#/functions) e selecione a página **Funções**.

1. Escolha a função que você deseja associar.

1. Na página **Função**, selecione a guia **Publicar**.

1. Selecione a **função Publish** (Publicar).

1. Escolha **Add association**. Na caixa de diálogo exibida, selecione uma distribuição, um tipo de evento e/ou um comportamento de cache. 

   Para o tipo de evento, selecione quando deseja que essa função seja executada:
   + **Solicitação do visualizador**: execute a função sempre que o CloudFront receber uma solicitação.
   + **Resposta do visualizador**: execute a função sempre que o CloudFront exibir uma resposta.

1. Para salvar a configuração, selecione **Adicionar associação**.

O CloudFront associa a distribuição à função. Aguarde alguns minutos para que a distribuição associada termine a implantação. É selecionar **Visualizar distribuição** na página de detalhes da função para conferir o andamento.

------
#### [ CLI ]

**Como associar uma função a um comportamento de cache existente**

1. Abra a janela de linha de comando.

1. Insira o comando a seguir para salvar a configuração da distribuição cujo comportamento de cache você deseja associar a uma função. Esse comando salva a configuração de distribuição em um arquivo chamado `dist-config.yaml`. Para usar esse comando, faça o seguinte:
   + Substitua *`DistributionID`* pelo ID da distribuição.
   + Execute o comando em uma linha. No exemplo, as quebras de linha são fornecidas para tornar o exemplo mais legível.

   ```
   aws cloudfront get-distribution-config \
       --id DistributionID \
       --output yaml > dist-config.yaml
   ```

   Quando o comando é bem-sucedido, a AWS CLI não retorna nenhuma saída.

1. Abra o arquivo chamado `dist-config.yaml` que você criou. Edite o arquivo para fazer as alterações a seguir.

   1. Renomeie o campo `ETag` para `IfMatch`, mas não altere o valor do campo.

   1. No comportamento do cache, localize o objeto chamado `FunctionAssociations`. Atualize esse objeto para adicionar uma associação de função. A sintaxe YAML para uma associação de função se parece com o exemplo a seguir.
      + O exemplo a seguir mostra um tipo de evento de solicitação de visualizador (trigger). Para usar um tipo de evento de resposta do visualizador, substitua `viewer-request` por `viewer-response`.
      + Substitua *`arn:aws:cloudfront::111122223333:function/ExampleFunction`* pelo nome do recurso da Amazon (ARN) da função que você está associando a esse comportamento de cache. Para obter o ARN da função, você pode usar o comando **aws cloudfront list-functions**.

      ```
      FunctionAssociations:
        Items:
          - EventType: viewer-request
            FunctionARN: arn:aws:cloudfront::111122223333:function/ExampleFunction
        Quantity: 1
      ```

   1. Depois de fazer essas alterações, salve o arquivo.

1. Use o comando a seguir para atualizar a distribuição, adicionando a associação de função. Para usar esse comando, faça o seguinte:
   + Substitua *`DistributionID`* pelo ID da distribuição.
   + Execute o comando em uma linha. No exemplo, as quebras de linha são fornecidas para tornar o exemplo mais legível.

   ```
   aws cloudfront update-distribution \
       --id DistributionID \
       --cli-input-yaml file://dist-config.yaml
   ```

   Quando o comando é bem-sucedido, você vê uma saída como a seguinte que descreve a distribuição que foi atualizada apenas com a associação de função. O exemplo de saída a seguir é truncado para legibilidade.

   ```
   Distribution:
     ARN: arn:aws:cloudfront::111122223333:distribution/EBEDLT3BGRBBW
     ... truncated ...
     DistributionConfig:
       ... truncated ...
       DefaultCacheBehavior:
         ... truncated ...
         FunctionAssociations:
           Items:
           - EventType: viewer-request
             FunctionARN: arn:aws:cloudfront::111122223333:function/ExampleFunction
           Quantity: 1
         ... truncated ...
     DomainName: d111111abcdef8.cloudfront.net
     Id: EDFDVBD6EXAMPLE
     LastModifiedTime: '2021-04-19T22:39:09.158000+00:00'
     Status: InProgress
   ETag: E2VJGGQEG1JT8S
   ```

------

O `Status` da distribuição muda para `InProgress` enquanto a distribuição é reimplantada. Quando a nova configuração de distribuição atingir um local da borda do CloudFront, esse local começará a usar a função associada. Quando a distribuição estiver totalmente implantada, o `Status` mudará de volta para `Deployed`. Isso indica que a função do CloudFront associada está ativa em todos os locais da borda do CloudFront no mundo todo. Normalmente, isso demora alguns minutos.