Tu primera página web con Amazon EC2

En la actualidad, Amazon posee uno de los recursos más interesantes para el hospedaje de aplicaciones web que necesiten gran escalabilidad (tanto para aumentar la capacidad de cómputo como para disminuirla y no pagar por recursos que no nos van a hacer falta). Este recurso es un grupo de servicios web entre los cuales podemos encontrar almacenamiento en S3, bases de datos muy simples con SimpleDB o, el que nos va a centrar en este post, servidores escalables en EC2 (EC2 viene de Elastic Cloud Computing).
aws-tutorial
La explicación teórica de qué es y qué no es EC2 voy a dejarla para un posible post posterior, de la misma forma, tampoco vamos a entrar a describir el proceso de alta en una cuenta de Amazon EC2, que en el fondo se trata de una simple gestión administrativa. Por consiguiente, a partir de aquí sólo vamos a cubrir el cómo visualizar una página web simple partiendo de una cuenta “virgen” de Amazon EC2.

Prerrequisitos

Los prerrequisitos para afrontar el proceso que vamos a describir son los siguientes:

  • Tener localizadas los ficheros de certificado y clave privada del certificado X.509 que nos identifican en los servicios de Amazon.
  • Tener acceso total a la cuenta de Amazon AWS (es lógico pero no está de más comentarlo).

Escoger y arrancar la AMI

Una vez identificados en el sistema de Amazon (ALERTA: dependiendo del navegador y el sistema operativo que estemos utilizando es posible que se nos pida nuestra identificación más de una vez en el proceso) debemos dirigirnos al ‘AWS Management Console’ y dentro de este a la pestaña ‘Amazon EC2′.

Nuestro primer objetivo cuando nos encontremos en dicha pestaña será arrancar una AMI (Amazon Machine Image, en otras palabras un servidor virtual). Esto lo podemos llevar a cabo desde el Dashboard y desde las secciones de Instances y AMIs. Sea cual sea el camino escogido iremos a parar al siguiente diálogo:

aws-tutorial

Como ya hemos comentado en anteriores posts, en este blog hay un aprecio bastante grande a Ubuntu y, por tanto, basaremos esta primera instalación en nuestra distribución favorita. En la pestaña comunity AMIs seleccionaremos sólo los sistemas de 32-bits (para poder escoger la máquina más económica posible) y el sistema operativo Ubuntu. Para la realización de este proceso yo he escogido la imagen con el manifest: alestic/ubuntu-8.10-intrepid-base-20081222.manifest.xml. Es de las primeras opciones que nos aparecen con la versión 8.10 del sistema operativo. Cuando localicemos la AMI sólo tenemos que pinchar en el link “select” y pasar al siguiente paso.

En un primer momento tendremos que crear una clave para identificar nuestras instancias (en el paso ‘Create Key Pair’). Tenemos que ir con sumo cuidado a la hora de guardar esta clave porque nos permitirá el acceso a la instancia por diferentes métodos más adelante. Después de haber creado esta instancia debemos configurar el Firewall de la máquina de forma que sea lo más segura posible pero que podamos acceder a ella por SSH (en un entorno de producción dejaríamos cerrado el puerto para posteriormente dar acceso sólo desde las IP que consideráramos seguras con las herramientas de EC2).

Para acabar de arrancar la máquina virtual sólo nos quedará definir el número de instancias (poned 1), el tipo (poned small, la más barata), seleccionar la Key Pair que acabámos de crear para identificar la instancia y dejar seleccionados los dos grupos en Security groups. No vamos a entrar en las opciones avanzadas porque para mostrar una página web estática no nos afectan pero existe un gran abanico de posibilidades para configurar las AMIs que queremos arrancar.

aws-tutorial1

Una vez pulsado el botón “Launch” vamos a tener que esperar unos segundos para que la máquina arranque definitivamente.

Conectarse de forma remota a la instancia

En la sección de Instances ahora deberíamos ver un registro nuevo (con el status running) que podemos seleccionar. Una vez seleccionado, si hacemos click en el botón Connect nos dará los datos para acceder a la máquina via SSH.

El ejemplo de comando que nos ponen en el diálogo que se abre cuando hacemos click en Connect es un buen ejemplo, si sustituimos el nombredelakeypair.pem por el path completo donde está este archivo en nuestro ordenador podremos acceder a la instancia sin ningún problema. En Ubuntu el path podría ser /home/user/Keys/nombredelakeypair.pem

Instalar un servidor web

Para poder mostrar una página web deberemos instalar un servidor web en la instancia. Podemos decantarnos por Apache2 o Lighttpd para poner un par de ejemplos. En la consola de la instancia con ejecutar el siguiente comando tendríamos el servidor Lighttpd corriendo sin más problemas:
sudo apt-get install lighttpd*En el post anterior hay una explicación más extensa de las posibilidades de este servidor web.

Dar acceso a través del puerto 80 a la instancia

Una vez instalado el servidor web, si nos dirijimos a la DNS pública que nos indica el panel de instancias veremos como el navegador no acaba de encontrar la página que deseamos. Esto es porque por defecto las instancias tienen cerrados los puertos de comunicación (al pagarse por tráfico es conveniente que estén cerrados por defecto). Para poder abrir estos puertos debemos tener instaladas las herramientas de EC2 en nuestro ordenador local.

El siguiente apartado sólo está probado sobre Ubuntu 8.10 y por lo tanto no puedo asegurar que funcione ni en otras versiones de la misma distribución:

Para instalar las herramientas de EC2 en nuestra Ubuntu 8.10 debemos seguir estos pasos:

  • Instalar la versión 5 de Java (pero la versión de Sun, nada de OpenJDK)
  • Descargar la herramientas de su web (podeis encontrar el enlace en su guia)
  • Descomprimir las herramientas en un directorio accesible
  • Seguir las intrucciones de como setear las herramientas que hay en el apartado Setting up the Tools de la guía oficial. NOTA: En Ubuntu, antes de empezar a ejecutar el comando ‘export’ debemos ejecutar el comando ‘bash’ para que arranque este interprete y no intentar lanzar las instrucciones con el comando ‘sudo’ se deben introducir todas los comandos tal como se exponen en la web de Amazon.
  • bash
    export EC2_HOME=/ruta/a/las/herramientas
    export PATH=$PATH:$EC2_HOME/bin
    export EC2_PRIVATE_KEY=/ruta/a/las/claves/pk-XXXXXXXXXXXXXXXXX.pem
    export EC2_CERT=/ruta/a/las/claves/cert-XXXXXXXXXXXXXXXXX.pem
    *Esto es un recopilatorio de los comandos que se tienen que ejecutar POR SEPARADO. Para saber el significado de cada uno consulta la sección Setting up the Tools de la guía.

  • Una vez instaladas las herramientas sólo debemos correr el comando siguiente y ya podremos acceder a la página web de ejemplo del servidor que hayamos instalado en la instancia de Amazon

ec2-authorize default -p 80A partir de aquí… lo dejo a vuestra imaginación.

5 thoughts on “Tu primera página web con Amazon EC2

  1. Hola amigo. Tengo una consulta. En nic solicite un dominio y no logro nombre e ip de los servidores dns.

    En mi caso puse ec2-50-17-212-220.compute-1.amazonaws.com y la ip que seria 50.17.212.220
    y como alternativo puse dns.google.com ya que me obligan a poner 2 servidores dns.

    Bueno si entro por la DNS publica via web. Funciona perfecto, pero si entro por el dominio no. Tienes idea de como puedo conseguir los 2 servidores dns que me piden para el dominio?

    Y otra cosa, al hacer ping a esa ip publica, no responde, pero si puedo acceder via web.

    Espero me puedas ayudar
    Saludos

  2. Hola, no estoy seguro de entender qual es el problema…

    Hasta dónde yo he entendido, has contratado un dominio y quieres dirigir ese dominio al servidor con IP 50.17.212.220 (que entiendo que es una elastic IP de Amazon). ¿Es así?

    Saludos

  3. Ya tengo mi servidor de amazon, para mi que soy novato a sido difícil.
    Ya que no hay un manual que funcione todo del tirón.
    Ahora estoy buscando mi “clave privada” y mi “clave publica”.
    Entiendo que la clave privada es mi archivo .pem
    ¿Pero cual es mi clave publica?

    No consigo que wordpress suba archivos por SSH.

Leave a Reply

Your email address will not be published. Required fields are marked *