Lecciones

Cómo configurar una Lambda@Egde para redireccionar un usuario

Escrito por Alejandro López | 13 de abril de 2020

En esta lección te enseñaremos cómo configurar una Lambda@Egde para redireccionar los usuario dependiendo de su ubicación. 

¿Que es Lambda@Egde ?

Es una característica totalmente serveless de Cloudfront que permite ejecutar código, esto con la intención de mejorar el rendimiento de la aplicación y su latencia, además de un sin fin de utilidades, algunas de estas son :

  • Permite la personalización de contenido, dependiendo del lugar de ubicación (Geo Referenciación)
  • Permite agregar seguridad y privacidad a los sitios web agregando encabezados de seguridad HTTP a las respuestas del origen, sin modificar el código fuente.

Situación

Deseamos que nuestro cliente dependiendo de su lugar de ubicación pueda acceder al sitio web de Colombia, o si está en otro lugar visite el sitio web de Estados unidos. Para esto realizaremos la configuración de una Lambda@Egde que se encargará de este redireccionamiento.

Configuración de Lambda@Egde

Lo primero que hay que debemos hacer es la creación de una lambda, ingresamos entonces a la consola de Administración, nos dirigimos a los servicios y buscamos la opción lambda.

Allí seleccionamos “Create Function”

Luego se abre la opción de configuración, allí seleccionamos si deseamos crear el código desde cero ó si deseamos utilizar alguna plantilla predeterminada por AWS, para nuestro caso crearemos la función desde cero, seleccionamos nombre, tipo de lenguaje y para el caso de los permisos utilizamos el predeterminado que tiene AWS para correr la lambda, y escogemos la opción crear lambda:

Cuando la lambda esté creada se abre la pantalla de la lambda y bajamos hasta la opción “Function Code”

Allí es donde crearemos el código, para nuestro caso se va utilizar una personalización de contenido dependiendo de donde esté ubicado el usuario, a continuación comparto el respectivo script:

/* This is an origin request function */

exports.handler = (event, context, callback) => {

                   const request = event.Records[0].cf.request;

                   const headers = request.headers;

                   /*

                   * Based on the value of the CloudFront-Viewer-Country header, generate an

                   * HTTP status code 302 (Redirect) response, and return a country-specific

                   * URL in the Location header.

                   * NOTE: 1. You must configure your distribution to cache based on the

                   *      CloudFront-Viewer-Country header. F|| m||e inf||mation, see

                    *     

http://docs.aws.amazon.com/console/cloudfront/cache-on-selected-headers

                   *   2. CloudFront adds the CloudFront-Viewer-Country header after the viewer

                    *      request event. To use this example, you must create a

trigger f|| the

                    *      ||igin request event.

  */

let url = 'https://www.google.com';

console.log(JSON.stringify(headers, null, 2));

if (headers['cloudfront-viewer-country']) {

     const countryCode = headers['cloudfront-viewer-country'][0].value;

              if (countryCode === 'CO'  || countryCode === 'PE' || countryCode === 'PA'){

         url = 'https://www.google.com';

     }else if (countryCode === 'US' || countryCode === 'BR' || countryCode === 'CA' || countryCode === 'PR'){

         url = 'https://www.netflix.com';

     } else {

         url = 'https://www.google.com';

     }

   }

const response = {

     status: '302',

     statusDescription: 'Found',

     headers: {

         location: [{

             key: 'Location',

             value: url,

         }],

     },

};

callback(null, response);

};

Este script utiliza una funcionalidad propia de AWS llamada Cloudfront-Viewer-Country, su función es realizar una petición HTTP y dependiendo del lugar de ubicación del usuario, devuelve una URL específica donde se identifica su ubicación. Una vez agregado el código se debería ver así:

Posteriormente subimos a la opción “Save” y a continuación publicamos la versión, la cual es necesaria para añadir el disparador, que para el caso de Lambda@Edge normalmente es un Cloudfront:

Se abre una pestaña para seleccionar la versión, y luego hacemos clic en publicar.

Después debemos realizar la configuración del disparador(Trigger), esto es necesario para activar nuestra Lambda@Edge,entonces ingresamos a la opción “Add trigger” :


Aparece una barra de busqueda, alli seleccionamos “Cloudfront”:

Luego ingresamos la siguiente información:
- Seleccionamos nuestro cloudfront
- El behavior para nosotros es el default
- Tipo de evento, que en nuestro caso es de origin-request
- Seleccionamos los dos Checkbox y le damos agregar.

Luego, es necesario realizar la configuración del behavior en nuestro Cloudfront, el cual va ser en el encargado de realizar la activación de la Lambda@Edge


Finalmente,  realizamos la configuración de nuestra Lambda@Edge en el cloudfront:

* el ARN de nuestra Lambda@Edge la podemos encontrar en en la parte superior derecha en el servicio de Lambda

Siguiendo estos pasos logramos  la configuración de Lambda@Edge para ejecutar la función de redirección dependiendo del lugar de ubicación del usuario.