🥇 Amazon CloudFront

🍿 ¿En qué consiste el servicio Amazon CloudFront?

CloudFront un servicio global de Content Delivery Network (CDN) que se integra con otros productos de AWS para proporcionar a los desarrolladores y negocios una forma sencilla de distribuir contenido a usuarios finales con una baja latencia, alta velocidad de transferencias de datos y sin un compromiso mínimo de uso.

CloudFrount es utilizado como CND para entregar el contenido web utilizando la red global de edge locations de Amazon. Cuando un usuario solicita un contenido, es redirigido a una edge location que provee la latencia mas baja, de forma que el contenido sea entregado con el mejor performance posible.

🍿 ¿Con qué servicios se integra CloudFront?

CloudFront se integra con servicios como: S3, EC2, ELB, Route53 y con sistemas dentro de las instalaciones de la organización.

Soporta todo el contenido que pueda ser provisto mediante HTTP, o HTTPS, incluyendo HTML, JS, CSS, audio, video, media, descargas de binarios, etc.

También soporta media streaming utilizando HTTP y RMTP.

🍿 Conceptos relacionados a CloudFront

🥤 Distribution (Distribución)

Es un nombre DNS como #####.cloudfront.net en el cual se sirven archivos.

Se puede utilizar como aparece o crear un CNAME record en Route53.

🥤 Origins (Orígenes)

Cuando se crea una distribucíon se debe proporcionar algún origen:

  • el bucket de S3 (mibucket.s3.amazonaws.com).
  • la instancia de EC2 (ec2-###.compute-1.amazonaws.com).
  • el ELB (miloadbalancer-####.us-west-2.elb.amazonaws.com).
  • la dirección web (subdomain.mycompanyname.com).

🍿 Cache Control (Control del Cache)

Una ves que se sirva la petición desde cualquier edge location, los objetos estarán en el cache hasta que expiren o sean expulsados y se libere el espacio requerido por el contenido solicitado con mas frecuencia. Por default los objetos expiran a las 24 horas. Una vez que expiran CloudFront verifica si el objeto en el origen ha sido modificado y si es así realiza la actualización en el edge location.

Si se desea cambiar la fecha de caducidad de los objetos, cambie el valor “Cache-Control” definido por su servidor de origen y defina el mínimo, máximo y tiempo de vida por default (Time to Live TTL) para los objetos dentro de su distribución.

También es posible eliminar copias de los objetos en los edge locations usando en cualquier momento la llamada invalidation dentro de la API. Esto elimina el objeto del edge location sin importar la fecha de expiración.

En lugar de realizar una invalidación, es una mejor practica utilizar un identificador de versión como parte del path del archivo.

  • Nombre anterior: assets/v1/css/file.css
  • Nombre nuevo: assets/v2/css/file.css

En CloudFront cuando se utiliza el control de versiones, los usuarios siempre ven el último contenido cuando este se actualiza (sin tener que usar invalidation). Versiones viejas expirarán automáticamente del cache de forma automática.

🍿 Características avanzadas

🥤 Contenido Dinámico, Origins y Comportamientos del Cache

Además de contenido estático se puede controlar que otro tipo de contenidos se muestran a través de CloudFront mediante cache behaviors.

Un cache behavior permite configurar un serie de funcionalidades de para archivos en base al patrón de una url en su sitio web.

La funcionalidad que se puede configurar para cada cache behavior incluye lo siguiente.

  • El path del patrón.
  • A que origen redirigir la petición.
  • Si es necesario redirigir los query string al origen.
  • Si para accesar los archivos especificados se requieren signed urls.
  • Si requerir acceso HTTPS.
  • El monto de tiempo que los archivos se encuentran en el cache de cloudfront (sin importar el valor de las cabeceras Cache-Control que el origen agrega a los archivos)

Los cache behaviors son aplicados en orden si un request no coincide con el primer patrón, continúe al siguiente. Normalmente el último patrón especificado es *.

🥤 Todo el sitio (Whole Website)

Utilizando cache behaviors y multiples origins se puede utilizar CloudFront para servir el sitio completo y para soportar diferentes comportamientos para diferentes clientes.

🥤 Contenido privado (Private Content)

En muchos casos, usted desea restringir el acceso al contenido en CloudFront para subscriptores de pago, aplicaciones o usuarios en la red de la compañia. CloudFront provee diferentes mecanismos para permitir servir contenido privado.

Signed URL’s
Urls que solo funcionan por un tiempo determinado.
Signed Cookies
Require de autenticación utilizando public and private keys.
Origin Access Identities (OAI)
Restringe el acceso a un solo usuario asociado con Cloud Front para un bucket de S3. Esta es la mejor forma de asegurarse de que un bucket solo es accesado por CloudFront.

🍿 ¿Cuáles son los casos de uso recomendados para CloudFront?

Existen varios casos de uso en donde CloudFront es una opción excelente, incluyendo pero no limitándose a:

  • Servir assets para websites.
  • Servir todo un sitio o aplicación web.
  • Servir contenido a los usuarios los cuales están ampliamente distribuidos geográficamente.
  • Distribuir software o grandes archivos.
  • Servir streams de media.

🍿 ¿Cuáles son los casos de uso en donde CloudFront no es recomendado?

  • Todos o la mayoría de los requests vienen de una sola locación.
  • Todos o la mayoría de las peticiones vienen a traves de un VPN Corporativo.