Primeros pasos con Amazon Web Services: la fórmula fácil
Amazon Web Services (AWS) es un producto de Amazon que permite el uso de distintas herramientas (motores de bases de datos, ordenadores virtuales que pueden servir para alojar páginas web o para otros usos, etcétera) de computación remota: es decir, los programas y servicios que vayamos que usar se gestionarán desde nuestro ordenador, pero en realidad se ejecutarán en los servidores de Amazon.
En aras de la simplicidad, en este texto se hablará básicamente de EC2, o Elastic Cloud Computing, y de cómo usarlo para tener una página web colgada en Internet, como si de un hosting normal se tratase, pero con una serie de ventajas.
Entre estos beneficios hay el de poder ir escalando los recursos a medida que los vamos necesitando. Lo que cuesta EC2 depende básicamente de tres factores (aunque hay otros, y de hecho el sistema de facturación de este servicio es complejo, así que es conveniente leerse toda la documentación antes de lanzar ningún servicio para tener muy claros los costes). Los dos primeros son el número de horas al mes que el ordenador virtual esté encendido, que en nuestro caso, como lo queremos usar como un hosting, a va ser permanentemente; y la localización, puesto que Amazon Web Services nos permite tener un ordenador virtual, que en terminología de EC2 se denomina instancia, en Virgina, Oregon, California, Irlanda, Singapur, Tokio, Sydney o São Paulo, y los precios varian ligeramente según cuál sea la decisión.
El tercero es la potencia de computación, memoria RAM y disco duro que sea necesario para nuestra aplicación web. Este es uno de los puntos claves por los que usar EC2: uno puede empezar tomando una decisión en este sentido y, a medida que ya sea por gran cantidad de peticiones, por estar ejecutando programas que requieren muchos recursos o por otras razones, las necesidades vayan incrementándose, puede cargarse todo lo contenido en una instancia (el sistema operativo más todos los programas instalados en él, respetando todas las configuraciones guardadas) en una máquina virtual con capacidades superiores.
Hay dos forma de hacerlo:
Una es manual: haciendo un snapshot de la instancia que hace de hosting y luego lanzando un nuevo ordenador virtual al que se le especifica que debe cargar este snapshop para arrancar. Hay más información en una respuesta en Stack Overflow. Esta fórmula es interesante porque es fácil de llevar a cabo, pero hay una complicación que es que la nueva instancia tiene una IP pública diferente, por lo que cuando se hace un cambio de estas características, mientras se lleva a cabo la dispersión de las DNS, conviene tener las dos instancias en marcha. De hecho, EC2 cambia la IP de la instancia en varias ocasiones, por ejemplo cuando apagas un ordenador virtual, y la IP pública asignada hasta entonces se pierde definitivamente. Esto hay que tenerlo en cuenta al trabajar con DNS. Una opción es no apagar nunca la instancia, pero puede haber opciones mejores: hay una página de documentación de Amazon Web Services al respecto.
La otra es dinámica y muy potente. Se trata de combinar el sistema de monitorización CloudWatch, uno de los varios servicios que componen Amazon Web Services, con otro llamado Auto Scaling, que permite establecer una serie de reglas (existe una referencia) para escalar los recursos a medida que se van necesitando. Con esta opción, como es automática, muy difícilmente nuestra aplicación va a quedarse sin los recursos que necesita para funcionar, pero su puesta en marcha requiere unas cuantas horas de leer documentación y los costes finales de tener la instancia en marcha pueden ser más impredecibles.
La consola de Amazon Web services
Tras iniciar sesión en https://console.aws.amazon.com, lo que se abre por defecto suele ser la consola de pagos: ahí se puede comprobar en cada momento en qué costes se ha incurrido hasta el instante en el que se hace la consulta. En la parte superior izquierda, se puede desplegar el menú Services y ahí pulsar sobre EC2.
El menú de la izquierda tiene una opción Instances, que es el adecuado para lanzar una nueva instancia. Hay que tener en cuenta que en la lista que aparece solo se relacionan las instancias que tenemos activas únicamente en la localización que nos encontramos: en la parte superior derecha hay un menú desplegable en el que puede especificarse qué localización preferimos, si Virgina, Oregon, California, Irlanda, Singapur, Tokio, Sydney o São Paulo, pero una vez seleccionada una localización, si tenemos instancias iniciadas en otra, estas no se mostrarán. Es importante tenerlo en cuenta por una cuestión de costes.
Lanzar la instancia
El botón Launch Instance permite lanzar un nuevo ordenador virtual. En el diálogo que se abre al hacer clic, hay una opción en el menú de la izquierda llamada AWS Marketplace. Da acceso a un buscador, en el que se puede buscar CentOS, el nombre de una distribución de Linux. En realidad puede buscarse entre una gran cantidad de sistemas operativos y aplicaciones preconfiguradas, pero aquí usaremos CentOS.
Al buscar CentOS la pantalla muestra varias opciones. Algunas se identifican con una etiqueta que dice Free tier eligible: eso quiere decir que, en el plan de recursos (CPU, RAM y disco duro) más básico, y con la configuración por defecto, Amazon permite que esta instancia esté 750 horas al mes encendido sin coste para el usuario, lo que es suficiente para tenerlo permanentemente encendido de forma gratuita. Sin embargo, si durante el proceso de lanzamiento de la instancia se seleccionan según qué configuraciones específicas o servicios adicionales, éstos sí, podrían suponer costes.
De los distintos CentOS que aparecen, entre los identificados como x86_64, lo más habitual es que el más conveniente sea el más actualizado.
La siguiente opción de configuración muestra todos los planes de recursos (también identificados como tipos de instancia) disponibles, con un resumen de las capacidades de CPU, RAM y disco duro de cada una de ellas. El tipo t1.micro es el único marcado como Free tier eligible.
Luego se pueden configurar más detalles de la instancia, a través de las sucesivas opciones de configuración a las que se accede mediante el botón Next, pero para los usos más sencillos con eso es suficiente, y puede pulsarse ya el botón Review and Launch.
Todavía hay algo más que hacer: un diálogo nos invita a crear un par de claves. Solo hay que poner un nombre cualquiera, y se iniciará la descarga de un archivo con extensión .pem. Ese archivo es muy importante: es lo equivalente a una contraseña para acceder al sistema operativo del ordenador. Sin ese archivo no es posible hacerlo. Debe guardarse y transmitirse solo por medios seguros.
Conexión a la instancia
Pasados unos minutos, necesarios para que la instancia se inicie, de nuevo en la opción del menú Instances de la consola de AWS, debería aparecer la instancia recién creada.
Si se hace clic sobre ella en la lista y se pulsa el botón Connect, aparecen instrucciones para conectarse a la instancia.
En resumen, son las que siguen.
Mediate una terminal (en GNU/Linux xterm
, gnome-terminal
o konsole
son alternativas populares, en MacOS se puede encontrar buscando terminal
en spotlight), hay que hacer lo siguiente:
Conociendo la ruta al archivo pem descargado:
cd /ruta/al/directorio/del/archivo/pem
Luego:
chmod 400 archivo.pem
Y por fin:
ssh -i archivo.pem [email protected]
Donde archivo.pem
el nombre del archivo pem descargado, y donde 000.000.000.000
la IP que aparece como Public IP en el resumen de la instancia que provee la consola de Amazon Web Services.
Instalación de un panel de configuración de hostings
El comando anterior debería habernos conectado a la instancia. Todo lo ejecutado a partir de ahora en realidad sucede en el ordenador virtual remoto.
Lo primero es instalar ZPanel, un software para configurar un servidor web de modo sencillo. Para descargar el instalador se puede usar el programa wget, que no está instalado. Procedemos a instalarlo:
yum install wget
Pide confirmación dos veces, lo que se hace presionando la letra [ y ] y luego enter.
La descarga del instalador se hace mediante el comando:
wget https://raw.githubusercontent.com/zpanel/installers/master/install/CentOS-6_4/10_1_1.sh
El instalador necesita permisos de ejecución:
chmod +x 10_1_1.sh
Luego ya se puede ejecutar:
./10_1_1.sh
Presionamos [ y ] y enter de nuevo para continuar. Lo primero que se inicia es el configurador de huso horario: el de la españa peninsular se elige con la combinación 8, 44 y 1. Luego 1 de nuevo para confirmar.
El instalador posteriormente pide un FQDN (Fully qualified domain name), como por ejemplo panel.midominio.com
, para acceder más fácilmente al panel de control que se está instalando. En la zona DNS de midominio.com hay que configurar este subdominio, apuntando el registro A a la IP que la consola de Amazon Web Services identifique como Public IP, para que este servicio funcione.
Tras ello, el instalador pide los datos de la IP de la instancia de AWS. Una vez más, este dato es la IP que la consola de Amazon Web Services identifique como Public IP.
Después, pulsando las teclas [ y ] y enter, empieza la instalación.
Una vez acabado el proceso, aparecen en pantalla una serie de datos de inicio de sesión. Conviene guardarlos a buen recaudo. Pulsando [ y ] y enter, el ordenador virtual se reiniciará.
Configuración de los security groups
Por defecto, las instancias creadas en Amazon Web Services no son accesibles a través del navegador. Ello se debe a la configuración que el asistente elige para lo que la consola de AWS llama security groups: solo abre el puerto 22, que es el puerto por defecto de SSH, y es por eso que el comando ssh -i archivo.pem [email protected]
sí funciona. Sin embargo, el navegador accede al puerto 80, y ese no está abierto.
Para remediarlo, en la consola de AWS, hay que localizar la opción security groups en el menú de la izquierda, en la que debería aparecer algo como CentOS 6-5 -x86_64- – Release Media-6-5 – 2013-12-01-AutogenByAWSMP- (aunque puede ser un poco diferente según la elección hecha en el punto Lanzar la instancia). Mediante el botón Action > Edit inbound rules puede abrirse el puerto 80 eligiendo Custom TCP rule, TCP en Protocol y 80 en Port Range y Anywere en Source.
También es interesante abrir el puerto 21, el puerto por defecto para conexiones FTP, para poder transferir archivos de este modo. Para ello hay que elegir Custom TCP rule, TCP en Protocol y 21 en Port Range. En source hay 3 opciones: si solo vamos a usar FTP desde el ordenador en el que estamos conectados, lo más conveniente por motivos de seguridad es usar My IP. Si se va a usar otro ordenador siempre está la opción de conectarse de nuevo a la consola de AWS antes de transferir archivos, borrar esta regla y recrearla volviendo a elegir My IP. Alternativamente, se puede usar la opción Anywhere para dar acceso a cualquier IP, pero es más inseguro.
Asociación de un dominio y creación de cuentas FTP
Una vez hecho eso, poniendo la IP identificada en Public IP en la barra de direcciones del navegador debería aparecer un diálogo para entrar un nombre de usuario y contraseña en ZPanel. Estos datos están en la información final proporcionada por el instalador de ZPanel tal como se explica en Instalación de un panel de configuración de hostings.
A partir de aquí el uso es parecido al de un hosting tradicional. En Domains > Domain Management se puede añadir un nuevo dominio a gestionar por este servidor. Al añadir un dominio este se marca como Pending durante una hora aproximadamente. Se puede acelerar ejecutando lo que sigue en una terminal conectada a la instancia:
cd /etc/zpanel/panel/bin/
y luego
php daemon.php
En User File management > FTP accounts acounts se puede crear una nueva cuenta para gestionar los archivos mediante un cliente FTP, por ejemplo el sofware libre FileZilla.
Para acceder mediante FileZilla al servidor, basta con indicar la Public IP como host, y el nombre de usuario y contraseña del usuario FTP que se hayan establecido en el punto anterior. Sin embargo, es posible que se requiera un cambio en las preferencias de FileZilla para que las transferencias funcionen.
En concreto hay que habilitar el modo activo
Foto de Zhao !.