Si eres desarrollador, seguramente has oído hablar de los servicios web de Amazon (AWS). Y bueno, si no has oído exactamente algo de Amazon seguro que sí has oído hablar del Cloud Computing, microservicios, serverless, y otros muchos conceptos que, de primeras, sabemos que implican tener una máquina sin acceso físico a ella. Puedes conectarte, administrarla, configurarla, instalar software, y mil cosas más; pero no puedes tocarla.

Para concretar un poquito más, debes saber que, si te creas cuenta nueva en AWS, tienes 12 meses de acceso al programa gratuíto. Este programa incluye, entre otras muchas cosas, la posibilidad de usar una máquina virtual 750 horas al mes. Bueno, o 10 máquinas virtuales 75 horas al més, depende cómo te organices.

Lo que te voy a enseñar en este tutorial es algo que, una vez descubierto, es una tontería enorme. Sin embargo, aprender esto desde cero sin alguien que te guíe y sin tener experiencia en entornos en la nube puede convertirse en algo un poco decepcionante.

Crear cuenta y acceder al panel de gestión

Puedes acceder directamente desde aquí y, cuando llegues, créate cuenta si no la tienes. Cuando tengas tu cuenta creada, puedes hacer click sobre el botón naranja que aparece arriba a la derecha y dice «Iniciar sesión en la consola». Y listo, ya has accedido a tu santo grial de AWS. Desde este panel puedes gestionar todos tus servicios, facturación, etc.

La primera recomendación que tengo que dar es que gastemos tiempo en trastear con este panel de administración para comenzar a familiarizarnos con el entorno y conocer qué funcionalidad puede ofrecernos.

Panel administracion consola Amazon AWS web services

Consola de administración de Amazon Web Services

Levantar una nueva instancia de máquina virtual

Si desplegamos la pestañita de «todos los servicios», el primero (o uno de los primeros) que aparece es EC2. Este es el servicio que nos permite levantar y gestionar las instancias que queramos. Si accedemos a este servicio, podemos encontrar un botón que, muy claramente, nos dice «Lanzar instancia».

launch instance EC2 AWS

Detalle del panel de administración: lanzar instancia

Al pulsar para crear una nueva instancia lo primero que debemos elegir es qué sistema operativo deseamos instalar en nuestra máquina. Para este ejemplo he elegido Ubuntu Server 18.04 LTS. Tras seleccionar el software, el siguiente paso es configurar el hardware. Nos aparece una lista en la que fácilmente vemos qué tipo de máquina podemos solicitar con el plan gratuito. Tiene un único procesador virtual y un GB de memoria RAM (el almacenamiento va despues). Suficiente para trastear y dar los primero pasos.

Tipo de instancia aws

Detalle de la lista de máquinas disponibles

Posteriormente debemos configurar otros detalles de la instancia. Como el número de máquinas que queremos levantar iguales a esta, configuraciones de red, etc. No hace falta profundizar mucho en este paso por ahora, yo lo dejaría como está.

A continuación debemos configurar cuánto almacenamiento deseamos. Esto depende en parte del tipo de máquina que hayamos instanciado. Como vimos al elegir el tipo de máquina, nuestra configuración disponía de almacenamiento «EBS only». Es decir, debemos asignar un espacio y se virtualizará. Si quisiéramos, podríamos haber elegido una opción con uno o múltiples SSDs pertenecientes totalmente a esta máquina. Eso sí, pasando por caja.

En este campo de configuración de almacenamiento podemos elegir la cantidad que nos dé la gana, pero solo hasta 30 GB para continuar sin pagar nada. Yo he elegido 16.

El siguiente paso es opcional en nuestro caso. Podemos dar nombre a nuestra máquina para diferenciarla de otras. Es importante cuando trabajamos gestionando múltiples máquinas, pero en nuestro caso, totalmente inútil.

Lo último que nos pide es configurar el grupo de seguridad. Si ya tienes uno creado puedes elegirlo y se autoaplicará. Por defecto, tenemos abierto un canal de comunicación SSH en el puerto 22 al que pueden acceder todas las máquinas del mundo. Podemos abrir más puertos. Por ejemplo, si queremos alojar un servidor web, abriremos el 80. Si vamos a montar un entorno de integración continua con Jenkins, GitLab CI, SonarQube, Nexus o herramientas de este tipo, podemos abrir sus puertos correspondientes (5000, 9000, 80801, 90001 …).

En cada regla de puerto podemos asignar qué IPs pueden acceder. Por defecto tendremos 0.0.0.0/0. Es decir: cualquier máquina que tenga acceso podría intentar conectarse. Es lo menos seguro pero, a su vez, lo más fácil y útil.

Ya podemos pulsar en el botón definitivo que nos permite lanzar nuestra máquina y veremos que nos sale una página a modo de resumen. La lanzamos con su respectivo botón y nos saldrá una ventana emergente similar a esta:

archivo clave conexion ssh aws

Detalle de configuración de claves para conexión SSH

Este paso es muy, MUY importante. Si es la primera vez que creas una instancia, debes seleccionar «Create new key pair». Le das un nombre y te bajas el archivo. Este archivo, con extensión pem, contiene la clave pública que permitirá conectarnos por ssh desde la terminal y acceder así a nuestra máquina. Si no tienes archivo de claves y no lo creas, estarás creando una máquina a la que no puedes acceder. Repito: es MUY importante. Es importantísimo tambien que guardes bien este archivo, ya que no podrás descargarlo posteriormente.

Accediendo a nuestra máquina

Supongo que si lees esto ha sido la primera máquina que has montado y, por tanto, acabas de bajarte el archivo *.pem. (Repito: guárdalo lo mejor que puedas!). Así que, tras esto, ya podemos ver nuestra máquina corriendo en el panel de administración de instancias de AWS.

Ahora abrimos una terminal en nuestro sistema local. A ver, yo uso Mac y estos comandos van a funcionar al 99% en cualquier distribución Linux. Si tienes Windows, siento mucho decirte esto, pero vas a necesitar instalarte putty o algún otro software. No tengo mucha idea de cómo va esto en Windows (ni quiero). Así que continuemos con lo nuestro.

Para conectarte a tu máquina debes saber con qué usuario tienes que conectarte. Por defecto, en las instancias de Ubuntu Server, el usuario es «ubuntu». Debes conocer, además, el DNS pública de tu máquina, que puedes encontrarlo seleccionando la instancia a la que quieres conectarte y viendo, abajo, los detalles en la descripción. Como muestra la siguiente imagen:

informacion detallada instancia EC2 AWS

Panel de administración con la información básica de la instancia en la parte inferior

Y, por supuestísimo, debes tener bien localizado el archivo que te has descargado con extensión *.pem. En sistemas Linux y MacOS, te saldrá un error parecido a este si intentas conectarte con el archivo tal cual te lo has bajado:

error archivo pem AWS

Error por archivo público

Este error es porque, por seguridad, el archivo con la clave solo puede tener permisos para el usuario que intenta utilizarlo. Para evitar este error, ejecuta el siguiente comando:

chmod 400 nombreDeTuArchivo.pem

Ahora tu archivo tiene los permisos justos y Amazon no se va a quejar.

Todo listo. Para conectarte, ejecuta el comando SSH indicándole el archivo de seguridad, el usuario y el DNS de tu máquina:

ssh -i tuArchivo.pem ubuntu@dnsDeTuMaquina

Seguramente te avise de que no puede certificar que esa máquina no sea segura, muy común. Tu dile «yes» siempre, of course!

Ahora ya tienes acceso a la terminal de tu máquina. Puedes crear archivos con vi, o bien trasferirlos por scp. Puedes instalar Java, Python, una base de datos. ¡Lo que te de la gana! La máquina es tuya. Eso sí, PASE LO QUE PASE: jamás pierdas el archivo .pem.