Cómo configurar una Lambda@Egde para redireccionar un usuario
por Alejandro López, el 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.