Hace unos días estuve jugueteando con el servicio de Amazon EC2, que consiste en arriendo de proceso y ancho de banda en un serividor virtual dado por una imagen creada por uno, o bien una imagen predeterminada de amazon que uno puede modificar. También existe la posibilidad de juguetear con imágenes públicas hechas por otros usuarios, por ejemplo una máquina Ubuntu con LAMP + Dokeos. Con Cristian queríamos probar si el servicio era apto para Meeting.cl en cuanto a proceso en tiempo real de VOIP, así que mi buen socio abrió una cuenta y nos pusimos a hurgetear.El servicio funciona en base a un sistema de certificado digital para la parte seguridad y a una batería de comandos que funcionan en Java, por lo que hay que tener instalado JRE en tu máquina local para administrar el o los servidores virtuales.
Lo que sorprende de este servicio es lo sencillo de su uso:
Cuando uno se inscribe en el servicio te dan dos archivos: un certificado X509 que es un archivo cert-xxxxxxxxxxxxx.pem y una llave privada asociada a ese certificado que es un archivo pk-xxxxxxxxxxxxxxx.pem. Luego bajas los comandos en un archivo .zip. Es necesario definir ciertas variables de entorno como JAVA_HOME en caso que no esté definida, y tambien variables internas como EC2_HOME, además de setear las variables EC2_PRIVATE_KEY y EC2_CERT correspondiente a los paths completos de la ubicación de la llave y el certificado.
Luego debemos tener una imagen (AMI) para juguetear. Lo más recomendable es partir con alguna imagen predeterminada de Amazon, o alguna imagen pública. Para averiguar sobre AMIs disponibles usamos el comando ec2-describe-images, donde se puede buscar por dueño, o por nombre. Por ejemplo, es posible buscar "asterisk", o "LAMP", o "mambo" y las AMIs que contengan esos nombres aparecerán. Es posible tambien generar nuestra propia AMI a partir de alguna máquina o server que tengamos y que queramos virtualizar.
Las AMIs se hacen funcionar a través de instancias. Para generar una instancia, es necesario generar primero una clave pública a partir de la clave privada que tenemos y el Certificado Digital. Esto se hace fácilmente con el comando ec2-add-keypair.
Despues de haber elegido una AMI, cuyo identificador es algo así como ami-xxxxxxxx, la podemos instanciar usando el comando ec2-run-instances ami-xxxxxx -k <nuestra_clave_generada_con_ec2-add-keypair>. Este comando nos devuelve el identificador de nuestra instancia, que es algo así como i-xxxxxxxxxx, que nos aparecerá en estado "pending", que vendría siendo el período en el que se demora en "bootear" la imagen. Con ec2-describe-instances i-xxxxxxx podemos ver en todo momento el status y datos (como la URL, por ejemplo) de una o más instancias. Cuando el status esté en "running" estamos listos para continuar.
Con el comando ec2-authorize debemos abrir los puertos necesarios para nuestro server. Así, para nuestra flamante AMI elegida para meeting (una imagen de un fedora 4 nuevecita de paquete, sin nada) abrí el
puerto 22, indispensable para administrar vía SSH, el puerto 80, solo para jugar con Apache y los puertos udp y tcp 4569 que usa Asterisk para la comunicación por voz.
Y listo!! tenemos la instancia arriba. Podemos, si la imagen tiene apache, conectarnos via web con el navegador a http://<el_url_que_nos_indica_ec2-describe-instancer> y listo...!
Para conectarnos vía ssh hacemos desde la consola de Linux:
ssh -i <nuestra_clave_privada> root@domxxx.xxx.xxx.compute.amazonaws.com
y eso sería...
Después de esto en mi caso fue instalar asterisk y configurarlo. También instale Apache para hacer alguna prueba y dejar un mensaje "Hola mundo", ustedes saben, solo para sentir la satisfacción de ver funcionando todo...
Después, acá en nuestro despacho-casa-oficina-lugar_de_carrete mediante softphones logramos comunicarnos mediante VOIP:
-¿Aló, aló, me escuchai?
-Puta, la raja, weón...
El delay era despreciable y la calidad del sonido óptima. Listo. Amazon EC2 nos sirve.
Luego, para probar, creé una imagen de lo que había en ese momento en la instancia y la subí a los servidores de Amazon, para poder ocuparla cuando yo quiera.
Lo interesante de esto es que con una sola imagen podemos generar todas las instancias que queramos, lo que nos da muchas posibilidades de clustering, por ejemplo. Lo otro es que nos cobran barato y por hora, por lo que podemos tener un server para juegos, por ejemplo, que subamos solo cuando queramos jugar y que después nos cobren solo por lo que jugamos, sin necesidad de comprar un server ni instalar nada en ningun datacenter. Lo mismo para un servidor de VOIP o lo que se nos ocurra. O sea, con nuestra imagen podemos tener ahora ya 10 servers corriendo si de una urgencia se trata. Fantástico, ¿no?
Lo otro interesante es que la cuenta la hizo Cristian así que le cobran a él.
¿Y los precios? Por hora de proceso vale lo siguiente:
Instances
$0.10 - Small Instance (Default)
1.7 GB of memory, 1 EC2 Compute Unit (1 virtual core with 1 EC2 Compute Unit), 160 GB of instance storage, 32-bit platform
$0.40 - Large Instance
7.5 GB of memory, 4 EC2 Compute Units (2 virtual cores with 2 EC2 Compute Units each), 850 GB of instance storage, 64-bit platform
$0.80 - Extra Large Instance
15 GB of memory, 8 EC2 Compute Units (4 virtual cores with 2 EC2 Compute Units each), 1690 GB of instance storage, 64-bit platform
A esto hay que sumarle los precios por ancho de banda que son:
Transfer-in: US$0.1 1GB
Transfer-out: US$0.24 1GB
Algo muy bueno es que la documentación es bastante completa. Así que anímense y prueben. Es bueno, bonito y barato. Siempre que no abusen, claro está.






El NAT que tienen apesta, una mierda... mejor Slicehost.