Este fin de semana y gracias a una introducción de mi amigo Martin Gangkofer he estado leyendo y probando muchas cosas sobre Amazon Aws: los servicios web de Amazon dedicados al desarrollo en la nube. La verdad es que es un tema apasionante que todos miramos de reojo pero pocos se lanzan a experimentar.
En este post resumiré un poco para los profanos -y me incluyo dentro de esta categoria- que nos ofrece esta tecnología. Espero que a muchos se os ocurran formas de sacarle partido y no olvideis que Amazon nos ofrece para casi todos los servicios una versión gratuita para poder probarlos antes de pagar nada.
Empecemos por lo más importante…
1) Amazon EC2: Servidores en la nube
El servicio principal que nos ofrece Amazon es el Elastic Compute Cloud, abreviado como EC2. Se trata de un sistema por el que podemos, mediante APIs o una cómoda interfaz web, declarar maquinas virtuales del tipo que deseemos. En su base no es algo muy distinto a usar VMWare o similares para emular otra maquina en nuestro ordenador. Simplemente es más limitado y orientado a la web y a ser usado con una API.
Amazon nos explica paso a paso como empezar con EC2. Básicamente, lo primero con cualquier servicio es darse de alta. El alta es gratuita y Amazon nos da acceso a algunos recursos gratis para probar su sistema durante un año (¡no está nada mal!). A partir de ahí -en recursos o tiempo- toca pagar. Con EC2 lo primero que hacemos es crear una o varias «AMIs»: maquinas virtuales a partir de una de las ISOs de Amazon o de una propia; y con ellas creamos una «instancia», le asignamos una IP para conectarnos y ya tenemos un servidor virtual para nuestras webs que funciona como cualquier VPS que contratemos en nuestro hosting habitual.
¿Qué tiene entonces de especial? Pues básicamente que…
– Amazon pone por detrás una infraestructura brutal que nos permite ampliar, reducir o duplicar nuestras maquinas -AMIs- en cuestión de minutos. Los que hayáis trabajado en proyectos con bastante tráfico habréis vivido momentos en los que una maquina se satura. No aguanta más y no hay forma de solucionar el problema en un corto espacio de tiempo: comprar una maquina mejor y migrar las webs, comprar varias maquinas y balancear, etc. Amazon nos permite solucionar estas incidencias en pocos clicks.
– Pagamos por lo que usamos. Si nuestro proyecto es medio muchas veces estamos pagando mucha más maquina de la que necesitamos. Si es de carga de trafico oscilante, debemos pagar para poder aguantar el pico máximo de trafico todo el tiempo. Con EC2 pagamos por cantidades brutas de trafico y por uso de la CPU . Esto es muchas veces una ventaja aunque no siempre, ya que tampoco nos regalan nada y quizas buscando mucho y dimensionando perfectamente nuestro proyecto podríamos ahorrar con servidores normales y sin intermediarios.
– Disponemos de muchos servicios web extra (de los que ahora hablaremos) que permiten dotar a EC2 de cualidades mucho mas interesantes que el propio EC2.
Por lo demás se trata simplemente de un servicio de hosting bastante peculiar pero que manejaremos como siempre (no hay tanto que aprender).
Seguidamente veremos otros servicios pero Amazon no hace una separación entre cuales solo funcionan dentro de EC2 y cuales podemos querer usar independientemente de su servicio padre. Por lo tanto, antes de cerrar el tema de EC2 permitirme nombrar los servicios destacados que solo se pueden asociar dentro de una instancia en EC2.
– Elastic Block Store: Son discos virtuales (como si fuesen discos duros) muy peculiares. Un EBS se «monta» en una instancia de EC2 (y solo en una a la vez) para que esta tenga acceso a todos sus datos. Aparte de lo obvio (datos separados, clonar el EBS o ir conectandolo de una instancia a otra) EBS tiene su punto fuerte del backup automatico. Esto se hace por dos vías: una automatica que nos permite desde el panel de control volver a cualquier momento de una unidad EBS hasta 8 días atrás (lo que garantiza que podrás recuperarte de un desastre con tus webs) y otra manual con la que creamos «instantaneas» que son copias completas del volumen que podremos reutilizar como como copia de seguridad o usar para montar nuevos volumenes EBS partiendo de ahí. No es obligatorio usar EBS con un EC2 pero no me negareis que librarse de backups y manejar la información de esta forma no tiene sus ventajas.
– Amazon CloudWatch y Auto Scaling: Estos dos servicios van de la mano. El primero nos permite monitorizar el rendimiento de nuestras instancias (vamos conectandolo a las instancias que nos preocupen) y el segundo nos permite definir reglas para que nuestras instancias ganen más recursos (CPU, Memoria o incluso se dupliquen) si pasamos ciertos umbrales. Es la solución definitiva para la gestión de recursos de los servidores. Si se configura bien, el escalado de nuestros proyectos ya nunca más será un problema.
– Ubicaciones: No voy ni a poner link. Simplemente saber que podemos escoger Data Center entre varias regiones. Europa es toda una región, así que salvo que te lances a proyectos muy internacionales poco más hay que saber.
– Elastic IP Adresses: Simplemente saber que en Amazon las IPs se ligan a la cuenta y no a las instancias. Por lo tanto podemos jugar entre como se resuelven las peticiones hacia cualquier cosa que manejemos, si añadimos el Elastic Load Balancig pocas necesidades más nos van a quedar.
– Otras opciones más serias: Y las menciono solo para la gente de sistemas. Virtual Private Cloud (VPC) nos permite unir la red de Amazon a la nuestra por VPN. Elastic Load Balancing (ELB) Es un balanceador de carga entre las distintas instancias que respeta las sesiones de usuario y mira el rendimiento de las maquinas a la hora de distribuir peticiones. Por último los Clústeres High Performance Computing (HPC) son un modo de alto rendimiento para nuestras instancias.
Y con esto acabamos con los servicios que solo tienen sentido dentro de EC2. Ahora pasaremos al resto de servicios…
– Tutorial para crear tu primera instancia en EC2
Sobre el resto de servicios de Amazon y EC2
La mayor parte del resto de servicios de Amazon pueden usarse dentro de instancias EC2 o llamados desde nuestros propios servidores. Sin embargo no es comparable el rendimiento que podemos sacarles de una forma u otra.
Simplemente debes saber dos cosas:
– La velocidad de transferencia de datos (archivos, consultas, peticiones, etc.) desde nuestro servidor se hará por internet (lento hasta el punto de que muchas cosas pierden el sentido) y desde una maquina EC2 se hará en la red interna de Amazon (mucho más rápido).
– Amazon cobra por todo. Entre otras cosas suele cobrarse por datos transferidos. Estos cobros solo afectan cuando los datos salen de Amazon o de la Ubicación en la que estas (moviendose de una instancia en Europa a otra en USA, por ejemplo). Esto significa que si llamamos a los servicios desde EC2 nos «ahorramos» esta transferencia.
Sabido esto, sigamos…
2) Amazon S3: almacenamiento de archivos en la nube.
Un servicio que podemos contratar con EC2 o sin el pero que como tantos otros cobra especial interés al integrarse en el primero.
Simple Storage System, abreviado como S3, es una API muy sencilla que nos permite guardar y recuperar archivos del tipo que sean. Solo eso.
La api (REST o SOAP) nos permite funciones tan ‘tontas’ como guardar y recoger archivos de hasta 5 gigas pero no servirlos directamente en una url (debemos pedirlos y servirlos nosotros o usar otros servicios de Amazon para que los sirvan).
La gracia de S3 está en que te garantizan en un 99,999999999% que tu archivo no se corromperá (ya que tienen un sistema de integridad de datos muy bueno) y que lo tendrás dispobible rápidamente con lo que por si solo es un sistema genial para almacenar datos poco reclamados.
Por otro lado Amazon nos ofrece exacamente lo mismo pero sin tanta integridad de datos (solo el 99,99% que quieras que no es 1 mal de cada 10.000) con Reduced Redundancy Storage (RRS), por si el maestro de esos datos es tuyo y no te preocupa tanto que amazon los pierda (este servicio es mucho más barato).
– Ejemplo de uso de Amazon S3 en PHP
3) Amazon CloudFront: El servidor web de S3
Como solución para aquellos que necesitan S3 para liberar a su servidor de servir archivos estáticos grandes (imágenes, audio, video, etc.) tenemos a CloudFront que no es otra cosa que un sistema para que amazon los sirva directamente.
Con CloudFront creamos «distribuciones» que son subdominios de «.cloudfront.net» o dominios/subdominios que nosotros le asignemos (por ejemplo static.nuestrodominio.com). En estas podremos ir sirviendo los objetos guardados en S3.
4) Amazon SimpleDB: Un concepto de base de datos muy especial
SimpleDB es una especie de base de datos con serias limitaciones y algunos puntos interesantes.
– Para empezar no hablamos de tablas sino de «dominios». Nos conectamos a un dominio y seleccionamos ahi los datos. Eso obliga a que no existan las Queries llamando a varias tablas a la vez. Como ellos mismos dicen, «son bases de datos no relacionales».
– Seguimos con que cada registro pasa a ser un «item» con nombre propio y en vez de campos tenemos «atributos». Esto simplifica enormemente el uso de esta base de datos. Yo meto un nuevo registro que tiene por atributos «nombre», «apellido» e «email» y ya puedo lanzar consultas del tipo «SELECT * FROM miDominio WHERE email = ‘xxx’».
– No hay indices. El servicio está hecho precisamente para que las consultas por cualquier campo sean igual de rápidas.
– Su velocidad no se ve afectada por el tamaño de la tabla. Esta es su principal virtud.
– Cada campo «atributo» puede medir un máximo de 1000 bytes.
Todo esto hace que el uso de esta «base de datos» acabe destintado a aplicaciones muy especificas: logs, tracking de datos, registros de usuarios, etc. Cualquier cosa de la que tenemos campos pequeños y un gran volumen de datos que podría ser consultado por cualquier campo.
Buscando por internet veremos también algunas aplicaciones que se empeñan en usar SimpleDB conjuntamente con S3. Usando en SimpleDB los datos por los que buscar y en S3 el bruto de contenido parece que se llega a un mix válido y así podemos crear blogs, clasificados, etc. Es una forma de hacerlo, no hay duda, pero la verdad es que a mi no me parece optimo hacer eso… si necesitas una base de datos de verdad: usa una base de datos de verdad.
Sobre su velocidad, no he podido probarlo con grandes cantidades de datos (donde debería demostrar su potencial) pero básicamente podemos decir que dentro de EC2 es muy rápido y en nuestro propio servidor perdemos el tiempo de conexión y algo más. Hablaban de 300ms incluso optimizando consultas lo cual en muchos casos hace que sea mejor usar tu base de datos de toda la vida si no estas dentro de EC2.
– Cliente de Amazon SimpleDB hecho con javascript (solo hace falta incluirlo en un html)
– Creación de SELECTS en Amazon SimpleDB
– Clase PHP y ejemplos para probar Amazon SimpleDB
5) Amazon Relational Database Service: Un MySQL Vitaminado en la nube
Por último, comentaremos el servicio de Bases de datos relacionales (RDS) de Amazon. Se trata de un servicio que se comporta al usarlo exactametne como una base de datos MySQL. Simplemente tendremos que configurar nuestras conexiones a esta base de datos con los datos de Amazon RDS y a trabajar.
Pero RDS no es exactametne una base de datos MySql sino un poco más que eso. Amazon hace que estas bases de datos realicen funciones que muchas veces tenemos que configurar con varios servidores para poder tener entornos con seguridad en los datos y rápida respuesta.
– Como los EBS las bases de dato RDS tienen un backup constante que nos permite ir hasta a 8 días atrás en los datos garantizando que podremos actuar ante una catastrofe con nuestra página.
– De la misma forma (y al igual que los EBS) podemos crear instantaneas de una base de datos para copiarlas o guardar su estado más de 8 días y recuprarlas cuando las necesitemos.
– Implementaciones especiales para Lectura y escritura: También se nos posibilitan formas para que nuestras tablas no se bloqueen o repondan lentas ante una gran demanda de actualización o lectura. La primera se hace poniendo una «implementación Multi-AZ» que permite acceder a una copia de la BBDD mientras se actualizan datos. La seguna pone varias tablas replicacadas para que se pueda balancear la lectura de las mismas.
Las RDS se inician como «instancias» pero de base de datos y por lo tanto como con SimpleDB la velocidad de RDS dentro de EC2 es claramente muy superior al acceso exterior. Además al ser RDS una instancia es un contrasentido no usar EC2… ¿no?
– Precio de Amazon Relational Database Service
6) Otros Servicios de Amazon AWS
Con esto no acaba la lista de servicios disponibles. Solo he comentado aquellos que me han parecido interesantes antes de valorar si merece la pena o no realizar un desarrollo web (o parte de este) dentro del entorno de Amazon.
Amazon nos aporta otros servicios que podemos ver en su lista de productos. Destacan entre ellos los productos de notificaciones/email y los de ayuda al comercio electronico: de Pagos y facturación y de distribución de productos. Se trata de servicios muy especificos pero merece la pena al menos leer sus descripciones y saber que existen. También podemos contratar su soporte tecnico (24×365) y así solucionar cualquier duda en el menor espacio de tiempo.
7) Recomendaciones
Amazon AWS soluciona muchos de los problema que podemos tener en proyectos web serios que van a ir escalandose. Sus servicios estan muy bien pensados y sirven muy bien a sus propositos. Podemos cubrir casi todas las necesidades de sistemas de un entorno web con un correcto uso de sus servicios web e incluso ir más allá a un coste decente que resultaría prohibitivo si lo trabajasemos de la forma tradicional.
Por otro lado, las limitaciones que tiene AWS hacen que resulte estupido entrar en su sistema solo por «estar en la nube». Todo esto no deja de ser un sistema de hosting. Más versatil, muy orientado al rendimiento, a a una rápida respuesta y con muchas configuraciones profesionales a pocos clicks. Pero AWS no hace milagros con su configuración básica ni tiene muchas ventajas para pequeños proyectos (proyectos personales, webs individuales para PYMES, etc). Con AWS seguimos necesitando de alguien que entienda lo suficiente de sistemas como para trabajar o al menos configurar todo esto.
Además debemos entender que para sacarle provecho deberemos en muchos casos orientar todo nuestro desarrollo a sus servicios. Una vez demos ese paso, si no lo hacemos bien, nos va a obligar a seguir en AWS aunque no nos convenza. Por lo tanto es importante desarrollar de una forma lo suficientemente modular como para que si algún día queremos irnos de AWS no tengamos que reescribir todo el código para que deje de usar S3 o SimpleDB, simplemente una serie de adaptadores intermedio.
Como un dato muy positivo hay que decir que la documentación es amplia, especifica y llena de ayudas: no debemos tener miedo a las barreras para empezar a usarlo. Además, los servicios van evolucionando ganando funcionalidades. Como ejemplo, parece que lo proximo que veremos serán bases de datos Oracle (que no pinta nada mal).
Si encuentras en un momento en el que plantear el crecimiento de tus proyectos es obligatorio echarle un ojo a Amazon AWS, por otro lado no hay que volverse loco. Toda tecnología tiene su momento.
11 respuestas a “Desarrollo Web en ‘la Nube’: Una iniciación a Amazon AWS”
Woaww, impresionante Iñaki, te lo has currado mucho, sobre la Amazon Relational Database Service, dices que puede funcionar por ejemplo para wordpress?, tengo una base de datos mysql a punto de petar por falta de espacio (1and1 limita las bases de datos a 100 mb 🙁 ), y pensaba si podría migrar mi base de datos a esa plataforma sin demasiados contratiempos, lo ves posible?, es una buena opción?, tienes alguna sugerencia para esta consulta?
Muchas gracias de verdad, estos servicios de Amazon son muy profesionales y dan ganas de probar :), un saludo Iñaki!!
Fran
1) Tienes amigos con apellidos raros
2) ¿Cómo vas a programar «en la nube»?¿es que no ves que se va a caer el ordenador? ¡¡¡ainnnnsssssss!!!
NOTA: otro muy buen post más «a la saca» compañero 😉
Hola Jose!
Es un tio Aleman con el que curre en mis inicios. En su empresa están llevando el desarrollo a Amazon AWS y me explicó unas cuantas cosas. En realidad me da envidia! 😛
Fran,
Aun no puedo hablar desde la experiencia. Estoy entrando todavía y cada pasito parece un mundo. En teoría no debería haber problema: te das de alta en el servicio y te conectas con los nuevos datos de host, user, pass y db… En la practica no se decirte que ganas y que pierdes con ese movimiento. Un VPS parece la solución más segura para poder configurar tu tus propios requisitos para mySQL, amazón pinta a que también te irá bien pero no puedo garantizartelo.
Muchas gracias :), estaré atento a tus nuevos articulos.
Saludos y enhorabuena por el blog, es de lo mejorcito de la red.
A pesar del tiempo es una muy buena explicación de los servicios que presta amazon… muchas gracias!
Hoy me eh hecho una cuenta y estoy usando s3, de ahí enlace las imágenes de mi web, hasta los archivos .css y la verdad que mi web va mas rápida, tengo un promedio de 1.1mb de peso por pagina por lo que necesitaba conseguir de alguna manera acelerar la transferencia, cosa que con mi hosting compartido no podría lograr. Tengo 10 webs mas y pienso hacer lo mismo con ellas, ya que podría reducir la cuota de mi alojamiento, pagar amazon y me sobrarían dolares, y todavía acelero la velocidad de mis sitios!
Maravilloso… muy explicativo… me aclaró muchas cosas.
Gracias!
Buenas, encontre este post viendo que mi proveedor de hosting, utiliza estos servicios de amazon.
La consulta es… ¿puedo con esto crear un servidor que funcione como hosting web? ¿como puedo implementar el uso de Cpanel para cada sitio? tienen alguna info al respecto?
Gracias de antemano!
Imagina que son servidores de verdad… Asi pues todo lo que se puede hacer en un servidor normal ahi tambien se puede: cpanel, virtualización o hosting a lo bruto.
Otro tema es que tenga sentido meterte en amazon aws para montar eso… La verdad es que creo que va a salirte mucho más caro que con un dedicado de toda la vida.
Hola como estan, dos preguntas acerca de su servicio que vamos a adquirir en Cloud service:
Se requiere de algun documento especial para el contrato con ellos para instancias por demanda.
Si tenemos Instancias por demanda, podemos pasarnos a instancias reservadas? que clase de documentos se requieren para pasarnos a intancias reservadas?
Si se hace cambio de Instancia por demanda a una instancia reservada, nosotros no tendriamos problemas de rendimiento u otros relacionados por que el servicio no continue en operacion?