

# Adición de desencadenadores para una función de Lambda@Edge
<a name="lambda-edge-add-triggers"></a>

Un desencadenador de Lambda@Edge es una combinación de una distribución de CloudFront, un comportamiento de la caché y un evento que provoca la ejecución de una función. Por ejemplo, puede crear un desencadenador que provoque la ejecución de la función cuando CloudFront reciba una solicitud de un lector para un comportamiento de la caché específico que haya configurado para la distribución. Puede especificar uno o más desencadenadores de CloudFront. 

**sugerencia**  
Al crear una distribución de CloudFront, debe especificar la configuración que indica a CloudFront cómo responder al recibir distintas solicitudes. La configuración predeterminada se denomina *comportamiento de la caché predeterminado* para la distribución. Puede configurar más comportamientos de la caché que definen cómo responde CloudFront en circunstancias específicas, por ejemplo, cuando recibe una solicitud para un tipo de archivo específico. Para obtener más información, consulte [Configuración del comportamiento de la caché](DownloadDistValuesCacheBehavior.md).

Cuando crea por primera vez una función de Lambda, solo puede especificar un *desencadenador*. Pero se pueden agregar más desencadenadores a la misma función más adelante con la consola de Lambda o editando la distribución en la consola de CloudFront.
+ La consola de Lambda funciona bien si desea agregar más desencadenadores a una función para la misma distribución de CloudFront.
+ La consola de CloudFront puede ser mejor si desea agregar desencadenadores para varias distribuciones, ya que es más sencillo encontrar la distribución que desea actualizar. También puede actualizar otros ajustes de CloudFront simultáneamente.

**Topics**
+ [Eventos de CloudFront que pueden desencadenar una función de Lambda@Edge](lambda-cloudfront-trigger-events.md)
+ [Elección del evento para desencadenar la función](lambda-how-to-choose-event.md)
+ [Adición de desencadenadores a una función de Lambda@Edge](lambda-edge-add-triggers-console.md)

# Eventos de CloudFront que pueden desencadenar una función de Lambda@Edge
<a name="lambda-cloudfront-trigger-events"></a>

Para cada comportamiento de la caché de una distribución de Amazon CloudFront, puede agregar hasta cuatro desencadenadores (asociaciones) que harán que se ejecute una función de Lambda cuando se produzcan determinados eventos de CloudFront. Los desencadenadores de CloudFront pueden basarse en uno de los cuatro eventos de CloudFront que se muestran en el siguiente diagrama.

![\[Gráfico conceptual que muestra cómo se integran con CloudFront los eventos desencadenadores de CloudFront para las funciones de Lambda.\]](http://docs.aws.amazon.com/es_es/AmazonCloudFront/latest/DeveloperGuide/images/cloudfront-events-that-trigger-lambda-functions.png)


El eventos de CloudFront que pueden utilizarse para activar funciones de Lambda@Edge son los siguientes:

**Solicitud del lector**  
La función se ejecuta cuando CloudFront recibe una solicitud de un lector y antes de comprobar si el objeto solicitado está en la caché de CloudFront.  
La función no se ejecuta en los casos siguientes:  
+ Cuando se devuelve una página de error personalizada.
+ Cuando CloudFront redirige automáticamente una solicitud HTTP a HTTPS (cuando el valor de [Política de protocolo para lectores](DownloadDistValuesCacheBehavior.md#DownloadDistValuesViewerProtocolPolicy) es **Redirigir HTTP a HTTPS**).

**Solicitud del origen**  
La función se ejecuta *solo* cuando CloudFront reenvía una solicitud a su origen. Cuando el objeto solicitado está en la caché de CloudFront, la función no se ejecuta.

**Respuesta del origen**  
La función se ejecuta después de que CloudFront recibe una respuesta del origen y antes de almacenar el objeto en caché en la respuesta. Tenga en cuenta que la función se ejecuta aunque el origen devuelva un error.  
La función no se ejecuta en los casos siguientes:  
+ Cuando el archivo solicitado está en la caché de CloudFront y no ha caducado.
+ Cuando la respuesta se genera a partir de una función activada por un evento de solicitud al origen.

**Respuesta del lector**  
La función se ejecuta antes de devolver el archivo solicitado al espectador. Tenga en cuenta que la función se ejecuta independientemente de si el archivo ya está en la caché de CloudFront.  
La función no se ejecuta en los casos siguientes:  
+ Cuando el origen devuelve un código de estado HTTP 400 o superior.
+ Cuando se devuelve una página de error personalizada.
+ Cuando la respuesta se genera a partir de una función activada por un evento de solicitud del espectador.
+ Cuando CloudFront redirige automáticamente una solicitud HTTP a HTTPS (cuando el valor de [Política de protocolo para lectores](DownloadDistValuesCacheBehavior.md#DownloadDistValuesViewerProtocolPolicy) es **Redirigir HTTP a HTTPS**).

Si añade varios disparadores al mismo comportamiento de la caché, puede utilizarlos para ejecutar la misma función o distintas funciones para cada disparador. También puede asociar la misma función a más de una distribución.

**nota**  
Cuando un evento de CloudFront desencadena la ejecución de una función de Lambda, la función debe finalizar *antes* de que CloudFront pueda continuar.   
Por ejemplo, si una función Lambda se activa por medio de un evento de solicitud del espectador de CloudFront, CloudFront no devolverá una respuesta al lector ni reenviará la solicitud al origen hasta que la función Lambda termine de ejecutarse.   
Esto significa que cada solicitud que desencadena una función de Lambda aumenta la latencia de la solicitud, por lo que es conveniente que la función se ejecute con la mayor rapidez posible.

# Elección del evento para desencadenar la función
<a name="lambda-how-to-choose-event"></a>

A la hora de decidir qué evento de CloudFront utilizar para desencadenar una función de Lambda, tenga en cuenta lo siguiente:

**Quiero que CloudFront almacene en caché los objetos modificados por una función de Lambda**  
Para almacenar en caché un objeto modificado por una función de Lambda para que CloudFront pueda enviarlo desde la ubicación periférica la próxima vez que se solicite, utilice el evento de *solicitud de origen* o *respuesta de origen*.   
Esto reduce la carga en el origen, la latencia de las solicitudes posteriores y los costos de invocación de Lambda@Edge en las solicitudes posteriores.  
Por ejemplo, si desea agregar, eliminar o cambiar los encabezados de los objetos devueltos por el origen y que CloudFront almacene el resultado en caché, utilice el evento de respuesta del origen.

**Deseo que la función se ejecute por cada solicitud**  
Para ejecutar la función para cada solicitud que CloudFront reciba para la distribución, utilice los eventos de *solicitud del lector* o de *respuesta del lector*.   
Los eventos de solicitud al origen y respuesta del origen ocurren solo cuando un objeto solicitado no se almacena en caché en una ubicación de borde y CloudFront reenvía una solicitud al origen.

**Quiero que la función cambie la clave de caché**  
Para cambiar un valor que está utilizando como base para el almacenamiento en caché, utilice el evento de *solicitud del lector*.   
Por ejemplo, si una función cambia la URL para incluir una abreviatura de idioma en la ruta (por ejemplo, porque el usuario había elegido su idioma en una lista desplegable), utilice el evento de solicitud del espectador:  
+ **URL en la solicitud del lector**: https://example.com/en/index.html
+ **URL si la solicitud viene de una dirección IP en Alemania**: https://example.com/de/index.html
También puede utilizar el evento de solicitud del espectador si está almacenando en caché en función de cookies o encabezados de solicitudes.  
Si la función cambia cookies o encabezados, configure CloudFront para reenviar la parte aplicable de la solicitud al origen. Para obtener más información, consulte los temas siguientes:  
+ [Almacenamiento en caché de contenido en función de cookies](Cookies.md)
+ [Almacenamiento en caché de contenido en función de encabezados de solicitud](header-caching.md)

**La función afecta a la respuesta del origen**  
Para cambiar la solicitud para que afecte a la respuesta del origen, utilice el evento de *solicitud de origen*.   
Normalmente, la mayoría de los eventos de solicitud de lectores no se reenvían al origen. CloudFront responde a una solicitud con un objeto que ya está en la caché periférica. Si la función modifica la solicitud basándose en un evento de solicitud al origen, CloudFront almacena en caché la respuesta a la solicitud al origen modificada.

# Adición de desencadenadores a una función de Lambda@Edge
<a name="lambda-edge-add-triggers-console"></a>

Puede utilizar la consola de AWS Lambda o la consola de Amazon CloudFront para agregar un desencadenador a su función de Lambda@Edge.

**importante**  
Solo puede crear desencadenadores para las versiones numeradas de su función (no para las **\$1LATEST**).

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

**Agregación de desencadenadores para eventos de CloudFront a una función de Lambda@Edge**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de AWS Lambda en [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. En la lista Región de la parte superior de la página, elija **US East (N. Virginia) (EE. UU. Este (Norte de Virginia))**.

1. En la página **Functions (Funciones)**, elija el nombre de la función a la que desee añadir disparadores.

1. En la página **Información general de la función**, elija la pestaña **Versiones**.

1. Elija la versión a la que desea añadir disparadores.

   Una vez elegida una versión, el nombre del botón cambia a **Version: \$1LATEST (Versión: \$1LATEST)** o **Version:** *número de versión*.

1. Elija la pestaña **Desencadenadores**.

1. Elija **Add trigger (Añadir disparador)**.

1. En **Configuración del desencadenador**, elija **Seleccionar un origen**, introduzca **cloudfront** y, a continuación, elija **CloudFront**.
**nota**  
Si ya ha creado uno o varios desencadenadores, CloudFront es el servicio predeterminado.

1. Especifique los siguientes valores para indicar cuándo desea que se ejecute la función de Lambda.

   1. **Distribución**: elija la distribución a la que desee agregar el desencadenador.

   1. **Comportamiento de caché**: elija el comportamiento de la caché que especifica los objetos en los que desea ejecutar la función.
**nota**  
Si especifica `*` como comportamiento de la caché, la función de Lambda se implementa con el comportamiento predeterminado de la caché.

   1. **Evento de CloudFront**: elija el evento de CloudFront que provoca la ejecución de la función.

   1. **Incluir cuerpo**: marque esta casilla si desea obtener acceso al cuerpo de la solicitud en la función. 

   1. **Confirmación de la implementación en Lambda@Edge**: seleccione esta casilla para que AWS Lambda replique la función en las Regiones de AWS de forma global.

1. Elija **Agregar**.

   La función comienza a procesar solicitudes de los eventos de CloudFront especificados cuando se implementa la distribución de CloudFront actualizada. Para determinar si una distribución se ha implementado, elija **Distribuciones** en el panel de navegación. Cuando una distribución se implementa, el valor de la columna **Estado** de la distribución cambia de **Implementando** a la fecha y hora de la implementación.

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

**Agregación de desencadenadores para eventos de CloudFront a una función de Lambda@Edge**

1. Identifique el ARN de la función de Lambda para la que desee añadir disparadores:

   1. Inicie sesión en la Consola de administración de AWS y abra la consola de AWS Lambda en [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

   1. En la lista de regiones de la parte superior de la página, elija **US East (N. Virginia) (EE. UU. Este (Norte de Virginia))**.

   1. En la lista de funciones, seleccione el nombre de la función a la que desee añadir disparadores.

   1. En la página **Información general de la función**, elija la pestaña **Versiones** y seleccione la versión numerada a la que desea agregar desencadenadores.

   1. Elija el botón **Copiar ARN** para copiar el ARN en el portapapeles. El ARN de la función de Lambda tiene un aspecto similar al siguiente:

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

      El número del final (en este ejemplo es **2**) es el número de versión de la función.

1. Abra la consola de CloudFront en [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home).

1. En la lista de distribuciones, seleccione el ID de la distribución a la que desee añadir disparadores.

1. Elija la pestaña **Behaviors (Comportamientos)**.

1. Seleccione comportamiento de caché al que desee agregar desencadenadores y, a continuación, elija **Editar**.

1. En **Asociaciones de función**, en la lista **Tipo de función**, elija **Lambda@Edge** para cuando desee que se ejecute la función: para solicitudes de lector, respuestas de lector, solicitudes de origen o respuestas de origen. 

   Para obtener más información, consulte [Elección del evento para desencadenar la función](lambda-how-to-choose-event.md).

1. En el cuadro de texto **ARN/nombre de la función**, pegue el ARN de la función de Lambda que desea ejecutar cuando se produzca el evento elegido. Este es el valor que ha copiado de la consola de Lambda.

1. Seleccione **Incluir cuerpo** si desea obtener acceso al cuerpo de la solicitud en la función.

   Si simplemente desea reemplazar el cuerpo de la solicitud, no necesita seleccionar esta opción.

1. Para ejecutar la misma función con más tipos de eventos, repita los pasos 6 y 7.

1. Seleccione **Save changes (Guardar cambios)**.

1. Para agregar desencadenadores a más comportamientos de caché para esa distribución, repita los pasos del 5 al 10.

   La función comienza a procesar solicitudes de los eventos de CloudFront especificados cuando se implementa la distribución de CloudFront actualizada. Para determinar si una distribución se ha implementado, elija **Distribuciones** en el panel de navegación. Cuando una distribución se implementa, el valor de la columna **Estado** de la distribución cambia de **Implementando** a la hora y fecha de la implementación.

------