En esta lección te enseñaremos cómo configurar una Lambda@Egde para redireccionar los usuario dependiendo de su ubicación.
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 :
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.
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.