Guía Amazon EC2: Creación de instancias
La misión de este pequeño howto es explicar de forma detallada la creación de una máquina en Amazon EC2, una vez explicado esto esta guía se utilizará como base para crear un sistema de backup sencillo de instalar y de administrar, sin grandes pretensiones pero funcional y sencillo de mantener.
Esta guía se dividirá en dos capítulos, este primero que es el que estás leyendo que trata sobre la configuración y despliegue de una máquina en la nube de Amazon y un segundo capítulo aun por publicar que, partiendo de lo aprendido e instalado en esta primera parte, configurará todo lo necesario para disponer de un backup que ofrezca la siguiente funcionalidad:
Backup incremental diario, con completos semanales almacenados en volumen EBS de Amazon.
Archivado de backups y posterior volcado a Amazon S3 y Dropbox para almacenar a bajo coste gran cantidad de información.
Archivos fácilmente recuperables y accesibles desde cualquier parte
De forma opcional estos archivos podrán estar cifrados para evitar problemas de seguridad.
El "material" necesario para estas dos guías es el siguiente:
Micro instancia de Amazon con Ubuntu Linux de 64 bits.
2 Volúmenes EBS de Amazon, uno para sistema y el otro para almacenar las copias.
1 bucket de Amazon S3 para almacenar los archivados.
Backup de respaldo de los archivados a Dropbox.
Conocimientos previos sobre la nube de Amazon
Amazon ofrece para las nuevas cuentas que se den de alta en el servicio de Amazon AWS 12 meses gratuitos de una serie de recursos los cuales podemos consultarlos en el siguiente enlace:
http://aws.amazon.com/free/
Aclarar un tema que a veces induce a error, este “free usage tier” no es una máquina gratis la uses como la uses, tienes que respetar los límites reflejados en el anterior enlace, si te pasas en alguno te facturarán lo que te pases, que será muy poco dinero, pero es importante tener claro esto para luego no llevarnos sorpresas o sentirnos engañados.
Amazon EC2 o Amazon Elastic Compute Cloud es un servicio ofrecido por Amazon en el cual podemos crearnos máquinas virtuales (llamadas instancias) con una serie de recursos disponibles para ella. Amazon divide las máquinas por “tamaños”, actualmente tienen disponibles los siguientes:
http://aws.amazon.com/ec2/instance-types/
En Amazon podemos tener discos duros virtuales y tratarlos en nuestro sistema operativo como un disco duro físico normal y corriente. Estos discos son persistentes entre reinicios y se pueden conectar a cualquier instancia de la misma zona y sección, pero no a la vez.
S3 es el almacenamiento masivo de Amazon. No es un volumen como puede ser EBS, aquí se usan "buckets". Los buckets son contenedores donde almacenar ficheros. Es un almacenamiento lento y que para usarlo se necesitan aplicaciones capaces de entender ese formato, por lo que no se pueden usar como volumen de arranque de una máquina, pero si para almacenar información a un coste muy bajo.
Podemos ver más información en: http://aws.amazon.com/es/s3/
Desplegando una instancia el Amazon EC2
Este howto está pensado para poder realizarse desde Linux, Mac y Windows, los requisitos para cada sistema operativo son:
Windows: Suite completa de putty con putty.exe y puttygen.exe (enlace para su descarga)
Vamos a crear paso a paso una instancia gratuita en Amazon, es tan sencillo que hasta asusta que se pueda crear una máquina en tan pocos pasos :)
Para empezar tenemos que decidir una serie de cosas antes de tirarnos a la piscina, básicamente tenemos que decidir la zona donde estará nuestra máquina, el sistema operativo y si este va a ser de 64 bits o de 32bits.
En este documento vamos a generar una máquina con las siguientes características:
Ubuntu Linux 10.04 de 64 bits.
Cuando vamos a crear una instancia en Amazon EC2 nos sale un asistente bastante sencillo, pero puede ocurrir que no seleccionemos la máquina correctamente y sobre todo que nos confundamos en el tipo de almacenamiento que tendrá nuestra instancia, ya que podemos elegir entre almacenamiento en la propia instancia o lo que sin duda es más interesante, en volúmenes EBS.
Lo primero de todo es entender el concepto AMI, en Amazon una AMI es una Amazon Machine Image, es decir, una imagen de una máquina lista para funcionar, esto quiere decir que realmente nosotros no instalamos una máquina como lo hacemos con máquinas físicas reales o cuando desplegamos una máquina virtual en VmWare, sino que seleccionamos una AMI con el sistema operativo que queremos o con las características que buscamos y la desplegamos.
Tenemos que ser cuidadosos con el tema de las AMI y usar AMI’s de orígenes fiables, ya que aunque es raro y seguramente nunca te pase, al ser un sistema instalado puede estar configurado de una forma que no queremos o tener algún problema, por lo que siempre, o al menos al principio o para máquinas que van a dar una producción hagamos uso de las AMI oficiales.
Ubuntu tiene un listado de las AMI oficiales generadas por ellos, podemos consultar ese listado en la siguiente dirección:
http://cloud.ubuntu.com/ami/
En dicha lista podemos filtrar por tipo de máquina, zona, etc, vamos a buscar una AMI que esté en la zona de Europa, con Ubuntu 10.04 de 64 bits y almacenamiento en EBS, es decir que tenemos que buscar lo siguiente: “lucid amd64 eu ebs”, aunque como siempre nada mejor que una captura para que nos hagamos a la idea de lo que vamos a ver:
Una vez localizada la AMI nos apuntamos el id de la misma, ya que es la que vamos a desplegar en Amazon, el ID de esta ami es: ami-edc6fe99
Una vez que tenemos el ID, es el momento de desplegar nuestra máquina, llegamos a la parte divertida :)
Para desplegar la máquina tenemos que pulsar sobre launch instance y tenemos que asegurarnos que estamos en la zona que queremos, en nuestro caso hemos buscado y queremos la máquina en la zona de Europa, por lo que tendremos que ver algo así y luego pulsar a launch instance:
Una vez que pulsemos nos mostrará un asistente, algo parecido a esto:
Nosotros que somos unos clásicos, seleccionamos el Wizard clásico, donde nos permitirá buscar la ami que previamente hemos apuntado, la buscamos y pulsamos sobre Community Ami, para posteriormente poner en el buscador el id que guardamos y cuando nos salga la instancia pulsamos sobre select:
Una vez seleccionada pasamos a la siguiente pantalla, donde podemos elegir algunos parámetros como el número de instancias que queremos crear, el tipo de instancia que es y la subzona dentro de la zona que hemos seleccionado.
En este ejemplo vamos a seleccionar la micro instancia, con 1 sola instancia y nos da igual la subzona dentro de la zona que hemos elegido, por lo que nos quedará algo de este estilo:
Una vez que aceptamos estos parámetros nos sale un pequeño resumen, dejamos todo por defecto salvo lo siguiente:
Termination Protection: Lo activamos. Con esto activo evitamos terminar por accidente una instancia, ya que terminate en Amazon significa borrar la instancia, no pararla.
Shutdown Behavior: Cuando paremos la máquina, que está se pare y no se elimine.
Pulsamos a siguiente, nos saldrá una nueva ventana donde poner una un id sencillo de recordar a la máquina, para nuestro caso no aplica, por lo que pulsamos a siguiente de nuevo y llegamos al paso de definir los keyfile.
Tenemos que crear un conjunto de claves públicas / privadas o seleccionar uno existente para asociarlo a esta instancia, creo que esto es un paso importante y que puede llevar a errores, por lo que especial atención en este punto.
Lo primero de todo, ¿para qué necesitamos este “keyfile”? pues una respuesta sencilla y muy clara, para poder conectar por ssh a nuestra máquina la primera vez que la iniciemos, sin este keyfile no vamos a poder entrar por ssh a la máquina, no podríamos administrarla ni hacer nada con ella.
Para crear un nuevo Keyfile pulsamos a la opción de create new key pair, ponemos un nombre al mismo y pulsamos sobre descargar, muy importante guardar ese fichero con seguridad y no compartirlo con nadie, ya que con ese fichero podremos entrar a nuestra máquina sin contraseña.
Una vez que nos bajamos el fichero, automáticamente el asistente saltará al siguiente paso, que es el de la definición de las reglas de firewall para poder acceder a la máquina. Como seguramente no tendremos ningún grupo de seguridad creado, creamos uno y le damos acceso por ssh (puerto 22), algo así:
Añadimos la regla dando a Add Rule y ya casi estamos listos.
Una vez creado el grupo nos saldrá un resumen de la máquina, pulsamos aceptamos y ya tenemos nuestra máquina creada lista para funcionar.
3. Asignando una ip “elastica” a la máquina.
Cada vez que paremos y arranquemos la máquina, va a tener una ip pública diferente, lo cual es un fastidio, pero esto se puede solucionar fácilmente para ello usaremos la opción que nos ofrece Amazon de asignar ip's públicas a nuestra instancia.
Dentro del panel de control pulsamos a Elastic ip’s y en el asistente seleccionamos EC2 y nuestra instancia, la ip que nos salga será la ip pública asociada a nuestra instancia.
4. Arrancando la instancia.
Ya tenemos creada la máquina, ahora falta arrancarla y hacer login por primera vez, para ello primero tenemos que iniciarla, eso se hace desde la consola de EC2, pulsamos sobre instances, seleccionamos la instancia recién creada y pulsamos a Lauch Instance.
Con esto nuestra máquina comenzará a arrancar y ya estaremos listos para acceder a ella por ssh haciendo uso del keyfile que nos hemos bajado hace unos cuantos pasos.
Para acceder desde Windows necesitamos un paso extra, tenemos que generar un fichero de identidad que entienda el Putty, para ello una vez instalado el putty abrimos el programa puttygen y generamos la clave, para posteriormente usarla con putty, tenemos que cargar la clave pulsando a load y luego generarla con generate private key
Una vez generada la clave, abrimos putty y tecleamos los datos de nuestra máquina y como usuario ponemos ubuntu y antes de dar a conectar añadimos el fichero que hemos generado aquí:
Una vez añadido pulsamos a open y conectaremos con la máquina.
Ya tenemos la máquina creada y hemos podido conectar a ella, es el momento de hacer una serie de ajustes para prepararla para lo que la hemos pensando, ser la máquina que gestione el backup en nuestra red.
Lo primero de todo, vamos a preparar la máquina para tener usuario root, así como crearnos un usuario para nosotros y bloquear el acceso directo como root, para añadir algo de seguridad, vamos por partes.
Asignar contraseña a root:
tecleamos sudo passwd y asignamos la clave a root.
Permitir login con usuario y contraseña:
Editamos el fichero: /etc/ssh/sshd_config y en la opción de PasswordAuthentication la ponemos a yes
Denegar el login directo como root:
Editamos el fichero: /etc/ssh/sshd_config y en la opción de PermitRootLogin la ponemos a no.
Generación de nuevo volumen EBS para los backups
Cuando utilizas una ami el tamaño del volumen EBS por defecto es 8gb, lo cual para la propia instalación de Linux es más que de sobra, pero no para almacenar los backup, es por ello que vamos a crear otro volumen EBS desde la consola de Amazon para posteriormente añadirlo a la máquina en caliente y sin tener que reiniciar :)
Primero nos conectamos en nuestra cuenta de amazon AWS:
Una vez dentro de la cuenta nos vamos a la sección de EC2:
y vemos los volúmenes EBS:
Al entrar en la gestión de los volúmenes EBS veremos la gestión de EBS de Amazon, pulsamos sobre crear volumen ( Create Volume) y veremos algo de este estilo:
Aquí añadimos los datos del volumen que queremos crear, para el ejemplo crearé uno de 1gb, seleccionamos el tamaño, la zona y dejamos por defecto el campo de Snapshot ( No Snapshot). Cuando esté creado el volumen veremos algo así en el listado:
Una vez creado, tenemos un volumen sin formato listo para añadirse a alguna instancia de las que tengamos en Amazon, ya esté corriendo o parada, para dar algo más de espectáculo vamos a añadirla con la máquina encendida, ya que la gracia de estas cosas es poder añadir discos en caliente, sin parar el servicio, para ello pulsamos sobre more y dentro de ese menú en Attach Volume:
Para mostrarnos algo así:
Nos tenemos que fijar en un par de cosas:
instancia a la que vamos a añadir el disco
nombre de dispositivo que tendrá
En este caso nuestro nuevo disco se llamará en Linux /dev/sdg.
Una vez enganchado el disco en Linux, comienza la “magia” :). Si entramos a nuestro servidor, en este caso la máquina se llama Mordin, espero que alguno sepa qué personaje es Mordin ;) y ejecutamos un dmesg veremos algo como esto:
Si nos fijamos, veremos en la última línea que Linux se ha enterado que le hemos enganchado un nuevo disco y que este se llama sdg, como decía Amazon O_O
Pues bien, ya tenemos el volumen creado, enganchado a la máquina pero el propio kernel de linux nos dice, oye cuidado que este disco no tiene una tabla de particiones válida, lo cual es lógico puesto que realmente no tiene tabla de particiones alguna, vamos a solucionar esto para poder usar el disco, que ya es hora.... es el momento de Fdisk.
Fdisk es un estupendo creador de particiones desde linea de comando, sencillo de usar y bien documentado, vamos a ver en menos de 1 minuto tenemos nuestra tabla de particiones lista en el nuevo volumen EBS, para ello ejecutamos fdisk pasándole como parámetro el dispositivo, es decir: fdisk /dev/sdg
Para crear el disco podemos seguir la ayuda que nos muestra Fdisk pero vamos a ir más directos, la tecla para crear una nueva partición es n, una vez que la pulsemos el propio Fdisk nos irá pidiendo cosas, algo como esto es lo que tendríamos que escribir para crear una partición utilizando todo el espacio del volumen:
Una vez definida la particiones pulsamos a w y salimos del programa, con este comando se salvará la tabla de particiones y saldrá de Fdisk.
Una vez creada la partición tendremos que darle formato para poder usarla, yo os recomiendo usar el sistema de ficheros ext4, es un sistema de ficheros resistente, rápido y maduro, además de estar soportado por todas las distribuciones actuales, para generar el sistema de ficheros en la nueva partición tenemos que utilizar el comando mkfs.ext4, pero antes quiero aclarar una cosa sobre el nombre de los dispositivos en Linux.
Si nos hemos fijado, el nuevo volumen Ebs se llama sdg, pero al crear la partición, esta no se llama sdg, sino se llama sdg1, es decir, que en nuestra máquina si hacemos un ls a /dev/ veremos dos ficheros sdg, uno que es el propio sdg y el otro sdg1. Sdg es el disco como tal y sdg1 es el disco sdg, primera partición. Aclaro esto para que se entienda bien la creación del sistema de ficheros que vamos a ejecutar ahora mismo.
Generar un sistema de fichero en Linux es muy sencillo y rápido, sin entornos gráficos ni gaitas, para ello simplemente tecleamos:
Y ya tendremos nuestro sistema de ficheros generado, en escasos segundos :)
Una vez creado el sistema de ficheros la partición está lista para poder ser montada y lista para recibir los backup que se realizarán en la parte 2 de esta pequeña guía.
Bueno pues ya tenemos la máquina creada, configurada y lista para recibir backups, por lo que podemos dar por terminada esta primera guía.
Si ves algún error en esta guía o algo no queda claro no dudes en contactar conmigo.
Espero que os resulte útil, muchas gracias por visitar mi blog.