Blog de Amazon Web Services (AWS)

CloudFront para la distribución de contenido estático y dinámico.

Amazon CloudFront es un servicio de entrega de contenido que cuenta con 52 ubicaciones Edge o PoP al rededor del mundo, número que se incrementa año tras  año.

Una de las características principales del servicio es que además de permitirle a los desarrolladores la entrega de contenido tanto estático como de streaming a sus usuarios finales, también puede utilizarse para entregar contenido dinámico y personalizado con mayor rapidez y con los bajos costos de los servicios de AWS.

Esto significa que puede seguir utilizando un solo nombre de dominio (www.midominio.com) para todo el sitio web sin necesidad de separar el contenido dinámico y el estático o gestionar varios nombres de dominio en el sitio web.

 

¿Qué es el contenido dinámico?

El contenido en Internet se identifica a través de un vinculo o dirección URL, cada URL identifica a un único elemento de contenido como una imagen, una página HTML o un archivo para su descarga. Por ejemplo:

http://www.midominio.com/logo.png

Las URL también pueden contener valores de parámetros o cadenas de consulta, los cuales se representan dentro de la URL después del signo de interrogación “?”. Dichos valores le permiten al servidor de origen personalizar la respuesta en base a la información recibida a través de los parámetros. Por ejemplo:

http://www.midominio.com/usuarios.php?nombre=tania

En el ejemplo anterior se ejecuta un script de PHP que recibe como parámetro el nombre del usuario y en base al valor enviado mostrará la información correspondiente a dicho usuario.

 

¿Cómo funciona?

Amazon CloudFront puede entregar todo el contenido de su sitio Web, incluyendo las partes dinámicas que cambian dependiendo de los parámetros recibidos en la URL, esto se logra mediante el uso de las siguientes características:

Configuración de múltiples orígenes

Con esta característica usted puede configurar diferentes servidores de origen para servir contenido estático y dinámico utilizando una sola distribución de CloudFront, gracias a esto usted podría usar un bucket de S3 como origen para servir contenido estático, una instancia de EC2 para contenido dinámico, y posiblemente un sitio externo para cualquier otro tipo de contenido.

Incluir los valores de parámetros o cadenas de consulta en la URL

Los valores incluidos en los parámetros de la dirección URL pueden utilizarse como llave para identificar el contenido único en las ubicaciones al borde de CloudFront que es particular a un usuario, una ciudad, o cualquier otro elemento de personalización.

Esta opción puede ser activada al momento de crear la distribución para permitir la copia de los contenidos que varían dependiendo de los valores de parámetros recibidos y acelerar la entrega de los mismos. En caso de no activarla CloudFront simplemente ignorará los valores de los parámetros.

Cookies HTTP

Además de las cadenas de consulta, otra opción que se puede seleccionar al momento de crear la distribución de Amazon CloudFront, es el reenvío de los valores almacenados en las cookies del navegador, mediante esta funcionalidad los valores que contengan dichas cookies serán considerados al momento de identificar un contenido único almacenado en la cache.

Comportamientos de la Caché

Un comportamiento de caché es un conjunto de normas que puede configurar para un patrón de URL determinado basado en extensiones de archivo, nombres de archivo o cualquier parte de una ruta de URL del sitio web (por ejemplo, *.png). Puede configurar varios comportamientos de la caché para la distribución de su sitio Web. Amazon CloudFront hará coincidir las solicitudes entrantes del visualizador con la lista de patrones de las URL, y si hay una coincidencia, el servicio respetará el comportamiento de la caché que configure para dicho patrón de URL. Cada comportamiento de caché puede incluir los siguientes valores de configuración de Amazon CloudFront: el nombre del servidor de origen, el protocolo de conexión del visualizador, el período de vencimiento mínimo, los parámetros de cadenas de consulta, cookies y los signatarios de confianza para el contenido privado.

Tiempo de vida (TTL) variable

Con esta funcionalidad se pueden definir períodos de vencimiento diferentes para los archivos almacenados en la caché, por ejemplo: para archivos dinámicos se pueden definir tiempos desde 0 segundos, donde CloudFront solicitará al origen cada petición que tenga de dicho contenido en caso de que haya cambiado. En el caso de contenido que no cambia constantemente, se pueden definir períodos de vencimiento mayores para distribuir dicho contenido desde las ubicaciones al borde sin necesidad de solicitarlo al servidor de origen.

Con el uso de las características mencionadas anteriormente usted puede utilizar un servicio de distribución como Amazon CloudFront para un sitio web que combine elementos estáticos y dinámicos al mismo tiempo y sacar el máximo provecho a la agilidad y los costos bajos de distribución que Amazon CloudFront ofrece.

Ejemplo: Crear una distribución que sirva contenido dinámico y estático

Supongamos que tenemos un bucket de S3 que alamacena archivos de imágenes en la siguiente URL:

http://mi-contenido-estatico.s3-website-us-east-1.amazonaws.com/amazon-aws-logo.png

Y una instancia de EC2 como servidor Web con Apache y PHP instalado que nos servirá para desplegar la información personal de los usuarios de acuerdo a su nombre:

http://ec2-XX-XX-XX-XXX.us-west-1.compute.amazonaws.com/usuarios.php?nombre=tania

El objetivo es que se utilice un solo nombre de dominio, por ejemplo: www.midominio.com para acceder a una distribución de CloudFront que sirva el contenido combinado de los ejemplos anteriores.

Para esto crearemos una nueva distribución Web de Amazon CloudFront desde la consola de administración de AWS que tenga los siguientes parámetros

  • Origin Domain Name: ec2-XX-XX-XX-XXX.us-west-1.compute.amazonaws.com
  • Minimum TTL: 0
  • Forward Query Strings: Yes
  • Alternate Domain Names: www.midominio.com

El resto de los parámetros se pueden dejar con los valores por defecto o modificar de acuerdo a las necesidades del sitio Web.

A continuación debemos agregar un Nuevo origen a la distribución para poder servir el contenido estático. En la pestaña de Origins en la opción Create Origin y seleccionaremos el bucket de S3 de la lista que aparecerá al posicionarse en el campo:

Nuestra distribución ya cuenta con dos orígenes diferentes, un bucket de S3 para contenido estático y una instancia de EC2 para el contenido dinámico.

 

Ahora crearemos un comportamiento de caché para que todas las solicitudes de archivos de imágenes con extension PNG, que se realicen a la distribución de Amazon CloudFront, utilicen el bucket de S3 como origen. En este caso utilizaremos los siguientes valores:

  • Path patern: *.png
  • Origin: mi-contenido-estatico.s3.amazonaws.com
  • Minimum TTL: 3600
  • Forward Query Strings: No

Con esta configuración le estamos indicando a Amazon CloudFront que todas las solicitudes que se hagan a archivos con la extension PNG se dirijan al bucket de S3 que definimos como origen previamente y que dichos archivos se guarden en la caché por un periodo de una hora antes que se vuelvan a solicitar al origen.

Una vez que la distribución haya terminado de replicarse por toda la red global de ubicaciones al borde (Edge), se podrá acceder al sitio web creado a través del nombre de dominio asignado a dicha distribución que usualmente es representado de la siguiente forma:

http://xxxxxxxxxxxxxxx.cloudfront.net

En este caso, al abrir la página usuarios.php y mandarle diferentes valores para el nombre del usuario podremos observar que el contenido que se despliega a través de CloudFront es diferente para cada nombre de usuario. Además podremos observar que las imágenes en formato PNG incluidas en la página de usuarios se despliegan correctamente aunque no existan en el servidor Web de EC2, ya que el comportamiento de caché creado anteriormente buscará esas imágenes en el bucket de S3.

El último paso sería, crear una zona alojada en Amazon Route 53 para el nombre de dominio deseado como www.midominio.com. Con eso podremos rutear todas las solicitudes al la distribución de CloudFront que acabamos de crear.

Para crear una zona alojada en Amazon Route 53 y apuntarla a una distribución de Amazon CloudFront, consulte la documentación en línea:

http://docs.aws.amazon.com/Route53/latest/DeveloperGuide/routing-to-cloudfront-distribution.html

Para mayor información acerca de la distribución de contenido dinámico en Amazon CloudFront favor de referirse al siguiente vínculo:

http://aws.amazon.com/es/cloudfront/dynamic-content/