Amazon AWS & Jetpack Photon ¿la combinación perfecta?

Estos últimos días ha sido una gozada estar cacharreando con WordPress, jugando con el tema, los widgets, probando plugins… estoy aprendiendo un montón. Ha habido muchos `wow!´ de admiración, algunos pocos `wtf!´ y el balance por el momento es totalmente positivo.

Uno de los temas que más me preocupaban con la migración a WordPress era el tratamiento de las imágenes, ya que con mi anterior gestor de contenidos nosotros mismos programamos una integración con Amazon S3 y Cloudfront que funciona a las mil maravillas. Cada vez que subias una foto a una entrada o a una galería ésta y sus thumbs se almacenaba en local y al publicarse la entrada se subían a S3… luego al mostrar el post al usuario la URL de S3 se sustituía `on-the-fly´ por la URL de Cloudfront.

Las dos principales ventajas de esta solución son:

  1. En tu hosting no almacenas imágenes, lo que llegado el momento es muy útil cuando tienes que migrar de servidor… aunque no queremos cambiar nunca más.
  2. En cualquier momento puedes cambiar la distribución de Cloudfront y generar una nueva URL para tus imágenes, desconectando las antiguas: esto es muy útil cuando otras páginas están republicando tus feeds sin piedad y encima tirando de ancho de banda de tu servidor de imágenes (hot linking) con el coste que ello implica.

Con el nuevo CMS por fin he conseguido hacer algo similar gracias a Amazon AWS for WordPress, ahora cada vez que subo una imagen al servidor me la carga automáticamente en mi bucket de Amazon. Este plugin también soporta Cloudfront pero con una implementación que no me gusta, ya que re-escribe la URL de tu post y pone la de cloudfront… lo que en un futuro te impediría desactivar un cloudfront y dar de alta otro asociado al mismo bucket.

Por eso no utilizo esa funcionalidad y dejo directamente la URL de Amazon S3 en el código de mi entrada… algo a priori peligroso, ya que esa URL no la puedes cambiar con facilidad… pero ahí es donde entra en acción Photon de Jetpack `an image acceleration and editing service´ que consigue algo maravilloso: sin modificarme el código de mi entrada se copia mi imagen y actualiza la URL `on-the-fly´ de tal manera que oculta la dirección de S3 al usuario y en su lugar muestra la suya propia en wp.com.

De esta manera puedo desactivar en cualquier momento Photon sin miedo a que se me destroce todo y cambiarme a otro CDN (Content Delivery Network)… mientras mis imágenes se mantienen seguras en S3 y no en mi servidor de páginas.

Esta es una solución que recomiendo a todo el mundo, sobre todo a los que utilizan de manera muy intensa las galerías de imágenes en sus webs o blogs.

pd – Aprovecho y comparto la lista completa de plugins que tengo activos por el momento en el WP de este blog… aunque probablemente de aquí a unas semanas la habré cambiado bastante:

Moviendo todas nuestras fotos a Amazon S3

Este esquema muestra como hemos hecho para pasar todas las fotos de nuestros blogs a Amazon S3.

Siento una enorme admiración por el proyecto AWS (Amazon Web Services)… ¿quién podía pensar que Amazon, el mayor retailer online, de repente se iba a convertir en proveedor tecnológico y buque insignia del cloud computing?

Aunque utilizo S3 desde el año pasado, cuando empezamos a volcar ahí nuestras copias de seguridad, hasta la fecha nunca nos habíamos planteado usarlo como hosting de imágenes… pero ha llegado un momento en el que las imágenes de más de cinco años de publicación en todos nuestros blogs nos han desbordado y no tiene sentido que la mayoría de los recursos del servidor se desaprovechen sirviendo archivos en lugar de sirviendo webs de manera más eficaz (al fin y al cabo como su propio nombre indica un webserver es un servidor de webs).

Para mover todas las imágenes ha habido que reprogramar varios componentes de nuestro CMS para conseguir que las imágenes se carguen en Amazon S3 en lugar de en topmadrid.com, dolcecity.com…

Me centraré en cómo ha quedado ahora el proceso:

1 – La imagen es cargada por el escritor en el CMS con CKFinder, cada escritor tiene una carpetas con sus imágenes que ellos gestionan, todo ello en enzo.es que es donde está instalado nuestro CMS.

2 – Cuando se publica el post, se realiza una copia de cada imagen en otra carpeta que hemos llamado “cache” y desde ahí se sube a Amazon S3 (utilizando el API REST de Amazon S3 y todo programado en el arcaico vbscritp… que tiene mérito)

3 – Una vez todas las imágenes están subidas se inicia el asintente para crear las thumbs para este proceso necesitamos tener la foto en el servidor donde está instalado el componente con el que las hacemos ASPjpeg, por eso el CMS revisa la carpeta de caché para ver si sigue ahí la foto y sólo en el caso de no encontrarla se la descarga de vuelta desde S3 (esto es necesario porque la carpeta caché se vacía cada noche y a veces quieres rehacer una thumb de un post que colgaste hace tiempo por lo que la foto original ya no está en la carpeta cache y hay que traerla de S3).

4 – Las thumbs se guardan en enzo.es durante el tiempo suficiente para poderlas pasar también a Amazon S3, después se borrán.

A diferencia de antes ya ninguna foto pasa a los blogs de destino, todo está o temporalmente en enzo.es o en su emplazamiento defitivo en Amazon S3 quedando todos los archivos de cada blog organizados en buckets independientes:

Aprovechando que teníamos que hacer este cambio hemos solucionado un problema que habíamos heredado de blogger:

Las imágenes de los posts en lugar de colocarlas todas en la carpeta /uploaded_images/ ahora van clasificadas por años y mes, igual que los posts.

Por su parte las thumbs, para no tenerlas todas juntas como antes en la carpeta /img_thumbs/ se van distribuyendo de manera automática en carpetas de 100 en 100, con lo que evitamos los problemas de la situación anterior: tener carpetas con más de 30.000 imágenes y creciendo que sólo para conseguir listar sus archivos ya era todo un reto.

Sólo nos falta un último empujón para que las galerías entren en el nuevo circuito de S3 y con eso la “migración” estará completa. Los beneficios del cambio son claros, como se puede leer en este post de Amit Agarwal mover todas tus imágenes a Amazon S3 descarga enormemente de trabajo a tu servidor:

En servidores donde corremos aplicaciones hemos comprobado que algunos procesos se ejecutan ahora muchísimo más rápido, tenemos por ejemplo un cron que llama a una página a las 20:00 y que solía terminar cerca de las 22:20… ahora el mismo proceso termina a las 21:45 lo que supone más de media hora de diferencia.

 

Amazon CloudFront: sirviendo contenido en S3 más rápido

Con Amazon CloudFront podemos distribuir nuestro contenido alojado en Amazon S3 mucho más rápido y con menor latencia. Aquí explicamos cómo implementarlo en nuestro site para mostrar un video flv.

Llega un momento en donde tu cliente pronuncia las temidas palabras: “quiero videos en mi web”… y tú ya empiezas a sudar pensando en ancho de banda, concurrencia de usuarios, ralentización de servidores y sobre todo en aumento de costes. Cuando confluyen las palabras archivos grandes y mucho tráfico, casi todos nos echábamos a temblar… hasta que llegó Amazon Web Services.

Con Amazon S3 podemos alojar ficheros de gran tamaño y pagar un precio muy razonable por la transferencia consumida, con la gran ventaja de que las descargas ya no estresarán nuestro servidor, que podrá centrarse en generar y servir las páginas rápidamente.

Pero cuando uno habla de videos y archivos de 27 Mb como el que nos ocupa, no sólo quieres que el coste no se te dispare, también necesitas rapidez: lo último que deseas es que tu cliente pulse “Play”… y que no ocurra nada. CloudFront nos asegura que la descarga será mucho más rápida y que la latencia se verá reducida al mínimo.

Vamos a ver con un ejemplo práctico lo sencillo que es usar CloudFront sobre S3, para ello voy a compartir con vosotros un video en formato FLV que he editado con algunos buenos momentos jugando al Gears of War 2:

Paso 1 – Lo primero es darse de alta tanto en S3 como en CloudFront, en mi caso sólo he tenido que darme de alta en el segundo porque ya utilizo a diario S3 para realizar las copias de seguridad de la empresa. Como ya sabréis darse de alta no conlleva ningún coste, Amazon sólo te cobra por lo que consumes.

Paso 2 – Utilizando CloudBerry Explorer o similar, nos vamos a crear un bucket para la ocasión. Un bucket es el nombre que se le da a las carpetas en el raiz de tu cuenta S3, tendrás que encontrar un nombre aun disponible porque éste es a su vez el nombre del subdominio que te asignará S3. En mi caso creo “fernandoplaza” y por tanto mi subdominio en Amazon será: fernandoplaza.s3.amazonaws.com.

Subimos a una carpeta dentro de nuestro bucket el fichero que queremos compartir, en mi caso un FLV:

 

Paso 3 – Mientras que se sube vamos a aprovechar para ir creando una “Distribution”, para ello nos descargaremos en Firefox un programa gratuito S3 Organizer (con esta herramienta puedes hacer también el paso anterior si quieres). Configúrala para que acceda a tu cuenta S3 y puedas visualizar tus bucket, después haz clic con el botón derecho del ratón sobre el bucket recien creado y elige “Manage Distributions”… después pulsa el botón “Create Distribution”:

Con esto Amazon creará otro subdominio pero esta vez en cloudfront.net que es una imagen del nuestro, es decir, puedes acceder a los mismos ficheros que en tu bucket original pero ya a través de CloudFront y por tanto mucho más rápido.

Este proceso puede tardar unos cinco minutillos, el status de la petición pasará de “InProgress” a “Deployed” (hay que pulsar sobre el icono de refrescar) y entonces ya sabremos que ha terminado:

Paso 4 – Por último sólo tenemos que asegurarnos de que al fichero FLV que hemos subido se puede acceder públicamente, para ello revisaremos los permisos y comprobaremos que “Todos lo usuarios” pueden “Leer” el archivo. Esto se puede hacer también con CloudBerry Explorer:

Listo! Ya sólo queda ver el resultado, para ver si es tan rápido como dicen.

Para reproducir los FLV desde la web yo utilizo JW Player, que para uso no lucrativo es gratuito, incrustaremos el código necesario y llamaremos al video utilizando la URL en “clodufront.net”.

Este es el resultado final, a mi se me carga muy rápido teniendo en cuenta que son casi 30 Mb… ¿y a vosotros?



CloudBerry Explorer, un explorador gratuito para Amazon S3

Los que usamos Amazon S3 estamos de suerte, hasta el momento los navegadores que existían no estaban muy conseguidos o eran de pago como Bucket Explorer. Pero se acaba de lanzar la beta de CloudBerry.

Se trata de un explorador muy sencillito, tiene aspecto de terminal FTP y te permite realizar las funcionalidades básicas de un explorador: copiar ficheros, cambiarlos de nombre, crear buckets, crear carpetas…

También puedes modificar los permisos de una carpeta o archivo para hacerlos de acceso público y así poder tirar directamente de ellos en tu web -como hace twitter con las fotos de los perfiles- o ayudándote de un `intermediario´ como el nuevo Amazon CloudFront que te permite distribuir tu contenido con una menor latencia y a mayor velocidad algo especialmente útil si hablamos de contenido multimedia (estamos pendientes de probarlo, puedes leer más en error500).

Entre sus funcionalidades más avanzadas podemos destacar la posibilidad de transferir contenido desde un bucket de Amazon S3 a otro, o incluso desde una cuenta de Amazon S3 a otra.

Y poco más… la verdad es que todavía está un poquito verde, pero funciona perfectamente. Como podéis ver el interface es muy simple: a la izquierda mi equipo y a la derecha mi cuenta Amazon S3 donde tengo creados todos mis bucket (algunos no los utilizo pero he reservado el nombre para que no me lo quiten), los que tienen nombres raros son los bucket creados por Jungle Disk para las copias de seguridad que están encriptados.

 
Como ya comentamos el ecosistema de aplicaciones, proveedores y usuarios que se está creando entorno a los Amazon Web Services es treméndamente rico. Algunas empresas están aprovechando la oportunidad y pegándose a Amazon en esta aventura, consiguiendo un número importante de usuarios que no deja de crecer y andan como locos buscando aplicaciones.

Yo como usuario estoy totalmente enganchado ya a Dropbox que ha cambiado mi forma de trabajar y estoy seguro de que Jungle Disk -que recientemente fue adquirido por Rackspace- no tardará en sacar su propio navegador completando su funcionalidad de copias de seguridad.

En definitiva es The Cloud Computing Revolution que estamos viviendo en primera persona, el blog de Jungle Dave es un buen lugar para mantenernos al día sobre todos estos temas.