

# Asociación de funciones con distribuciones
<a name="associate-function"></a>

Para utilizar una función con una distribución, asocie la función a uno o varios comportamientos de caché en la distribución. Puede asociar una función a varios comportamientos de la caché en varias distribuciones.

Puede asociar una función con cualquiera de los siguientes elementos:
+ Un comportamiento de la caché existente
+ Un nuevo comportamiento de la caché en una distribución existente
+ Un nuevo comportamiento de la caché en una distribución nueva.

Cuando asocia una función a un comportamiento de la caché, debe selecciona un *tipo de evento*. El tipo de evento determina cuándo CloudFront ejecuta la función. 

Puede elegir los siguientes tipos de evento:
+ **Solicitud del lector**: la función se ejecuta cuando CloudFront recibe una solicitud de un lector.
+ **Viewer Response (Respuesta al lector)**: la función se ejecuta antes de que CloudFront devuelva una respuesta al lector.

No se pueden utilizar tipos de eventos orientados al origen (*solicitud de origen* y *respuesta de origen*) con CloudFront Functions. En su lugar, puede utilizar Lambda@Edge. Para obtener más información, consulte [Eventos de CloudFront que pueden desencadenar una función de Lambda@Edge](lambda-cloudfront-trigger-events.md). 

**nota**  
Antes de asociar una función, debe [publicarla](publish-function.md) en la etapa `LIVE`.

Puede asociar una función a una distribución en la consola de CloudFront o con la AWS Command Line Interface (AWS CLI). En el siguiente procedimiento, se muestra cómo asociar una función a un comportamiento existente de la caché. 

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

**Asociación de una función a un comportamiento existente de la caché**

1. Inicie sesión en la consola de CloudFront en [https://console.aws.amazon.com/cloudfront/v4/home#/functions](https://console.aws.amazon.com/cloudfront/v4/home#/functions) y elija la página **Funciones**.

1. Elija la función que desee asociar.

1. En la página **Función**, seleccione la pestaña **Publicar**.

1. Elija la **función Publicar**.

1. Elija **Add association**. En el cuadro de diálogo que aparece, elija una distribución, un tipo de evento o un comportamiento de caché. 

   Para el tipo de evento, seleccione cuándo desea que se ejecute esta función:
   + **Solicitud del lector**: ejecute la función cada vez que CloudFront reciba una solicitud.
   + **Respuesta al lector**: ejecute la función cada vez que CloudFront devuelve una respuesta.

1. Para guardar la configuración, elija **Agregar asociación**.

CloudFront asocia la distribución a la función. Espere unos minutos para que la distribución asociada termine de implementarse. Puede seleccionar **Ver distribución** en la página de detalles de la función para comprobar el progreso.

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

**Asociación de una función a un comportamiento existente de la caché**

1. Abra una ventana de línea de comandos.

1. Introduzca el siguiente comando para guardar la configuración de la distribución cuyo comportamiento de la caché desea asociar a una función. Este comando guarda la configuración de distribución en un archivo llamado `dist-config.yaml`. Para utilizar este comando, haga lo siguiente:
   + Reemplace *`DistributionID`* por el ID de la distribución.
   + Ejecute el comando en una línea. En el ejemplo, se proporcionan saltos de línea para que el ejemplo sea más legible.

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

   Si el comando se ejecuta correctamente, la AWS CLI no devuelve ninguna salida.

1. Abra el archivo llamado `dist-config.yaml` que ha creado. Edite el archivo para realizar los siguientes cambios.

   1. Cambie el nombre del campo `ETag` a `IfMatch`, pero no cambie el valor del campo.

   1. En el comportamiento de la caché, busque el objeto llamado `FunctionAssociations`. Actualice este objeto para agregar una asociación de función. La sintaxis YAML para una asociación de función se parece al siguiente ejemplo.
      + En el siguiente ejemplo, se muestra un tipo de evento de solicitud del lector (disparador). Para utilizar un tipo de evento de respuesta al lector, reemplace `viewer-request` por `viewer-response`.
      + Reemplace *`arn:aws:cloudfront::111122223333:function/ExampleFunction`* por el nombre de recurso de Amazon (ARN) de la función que está asociando a este comportamiento de la caché. Para obtener el ARN de la función, puede usar el comando **aws cloudfront list-functions**.

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

   1. Después de realizar estos cambios, guarde el archivo.

1. Utilice el siguiente comando para actualizar la distribución y agregue la asociación de función. Para utilizar este comando, haga lo siguiente:
   + Reemplace *`DistributionID`* por el ID de la distribución.
   + Ejecute el comando en una línea. En el ejemplo, se proporcionan saltos de línea para que el ejemplo sea más legible.

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

   Cuando el comando se realiza correctamente verá una salida como la siguiente, que describe la distribución que se acaba de actualizar con la asociación de función. La siguiente salida de ejemplo se trunca para que sea más legible.

   ```
   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
   ```

------

El `Status` de la distribución cambia a `InProgress` mientras la distribución se vuelve a implementar. Cuando la nueva configuración de distribución llega a una ubicación periférica de CloudFront, esa ubicación periférica comienza a utilizar la función asociada. Cuando la distribución esté completamente implementada, `Status` volverá a `Deployed`. Esto indica que la CloudFront Function asociada está activa en todas las ubicaciones periféricas de CloudFront en todo el mundo. Esto normalmente dura unos minutos.