Cloud Computing

Introducción a Heroku

Descubre Heroku, la plataforma para que los desarrolladores ejecuten y mantengan proyectos sin preocuparse por gestionar la infraestructura que la soporta.

Publicado el 12 de Febrero de 2021
Compartir

Tienes un proyecto de software en mente, quizás sea una App móvil, una Web App u otra herramienta, y en la medida que vas analizando lo que necesitas para llevarlo a cabo, te empiezan a surgir algunas dudas para las que, en ese momento, todavía no estás preparado para responder. ¿Cómo voy a gestionar la infraestructura? ¿Qué sistema Operativo utilizo? ¿Será necesario utilizar contenedores? ¿Dónde voy a almacenar los datos? ¿Cómo gestiono las redes y comunicaciones? ¿Cómo gestiono el logging y monitoreo? ¿Qué más necesito para llevar a cabo este proyecto? ¿Cómo hago cuando tenga que dar mantenimiento a todo esto?

Tratando de encontrar una respuesta a todas estas preguntas, te encuentras con Heroku, entonces…

Qué es Heroku

Las aplicaciones necesitan infraestructura, si quiere ejecutar una aplicación moderna necesitas de muchas partes que se integran entre sí. Tu aplicación es una mínima parte de esa infraestructura. Como desarrollador, conociendo esto, tienes dos opciones, aprender a manejar toda esa infraestructura o: encontrar a alguien o una plataforma que lo haga por ti.

Heroku es esa plataforma. En pocas palabras, es un servicio de los que conocemos como PaaS, Platform as a Service (Plataforma como Servicio en español), que te puede ayudar a gestionar todo lo que vimos en las preguntas anteriores.

Es decir, Heroku es una plataforma que ayuda a los desarrolladores, a ejecutar y mantener sus proyectos sin preocuparse mucho por la gestión de la infraestructura incluyendo las bases de datos, seguridad, networking, logging y monitoreo. Esto lo hace a través de un equipo que pone a disposición de quien contrate sus servicios, permitiéndote enfocarte en lo que de verdad te importa y te genera valor, tu proyecto de software.

La popularidad de Heroku ha crecido en los últimos años, principalmente por su facilidad de uso, además de que está creada por desarrolladores para los desarrolladores, lo que ha hecho que sea la mejor opción para muchos proyectos de desarrollo.

Pero…

Cómo funciona Heroku

Heroku ejecuta las aplicaciones en contenedores a las que llama “dynos”. Puedes entender los dynos como piezas de rompecabezas que pueden ponerse (encenderse) o quitarse (apagarse) según el tamaño de tu aplicación (el rompecabezas). Los dynos tienen la responsabilidad de empaquetar y ejecutar aplicaciones y servicios, funcionan como un contenedor inteligente en un entorno de ejecución confiable y completamente administrado.

Todo esto significa que, dado que Heroku administra y ejecuta aplicaciones, no hay necesidad de administrar sistemas operativos u otras configuraciones internas del sistema.

Las aplicaciones que se ejecutan en Heroku tienen nombres de dominio únicos, que se utilizan para enrutar las solicitudes HTTP al contenedor correcto.

Cuando tu aplicación necesita procesar una mayor cantidad de datos o ejecutar tareas que son mucho más pesadas y complejas, Heroku te da la opción de escalar de dos formas, realizando un escalado horizontal, es decir, agregando más dynos o un escalado vertical, aumentando el tamaño de los dynos.

Heroku te cobra una tarifa mensual basada en la cantidad y tamaño de los dynos que está utilizando tu aplicación. Por ejemplo, si tu aplicación tiene mucho tráfico, el costo de Heroku puede resultar un poco alto; cada dyno te costará desde unos $25 o más por mes, y cuando agregas opciones como bases de datos, el costo seguirá en aumento. A pesar de esto, Heroku es muchísimo más barato que contratar un equipo DevOps.

Es importante mencionar que, aunque Heroku te cobra por dyno, en realidad, estos contenedores no alojan tu aplicación. De hecho, toda la plataforma Heroku, así como todas las aplicaciones creadas en Heroku, se alojan en Amazon Web Services (AWS).

Heroku vs AWS

Antes que nada, Heroku y AWS no son lo mismo. Es muy importante diferenciar las soluciones de “Infraestructura como servicio“ y “Plataforma como servicio“ cuando estamos considerando la implementación de nuestra aplicación en algunas de estas dos soluciones.

Ya hemos visto que Heroku es una PaaS. Por el contrario, AWS es más conocido como un proveedor de IaaS, Infrastructure as a Service (Infraestructura como Servicio en español), lo que significa que es responsable de administrar grandes centros de datos.

Estos grandes centros de datos, es lo que conocemos como “el cloud”, lo que quiere decir que el enfoque de los proveedores de IaaS es principalmente por la ejecución óptima, operación y el mantenimiento de los centros de datos, y no tanto en la experiencia del desarrollador que trabaja con ellos.

Aquí es donde entra en acción Heroku, ya que es una plataforma que está orientada principalmente a los desarrolladores y a sus necesidades, haciéndoles la vida mucho más fácil. Por esto, se han preocupado por poner una extensa documentación a disposición de los desarrolladores, donde podrán buscar y encontrar cualquier información que necesiten para el desarrollo y mantenimiento de sus aplicaciones.

Heroku fue fundada en el 2007 por Orion Henry, James Lindenbaum, y Adam Wiggins, pero no fue sino hasta el 2009 que realizó su lanzamiento comercial con soporte para Ruby. Desde entonces, Heruku ha ido evolucionando e incrementando su lista de servicios y lenguajes admitidos. En 2011, Salesforce adquirió la empresa y actualmente la plataforma Heroku es parte de Salesforce Platform. La experiencia que ofrece a los desarrolladores es muy fácil, les permite saber exactamente lo que deben hacer inmediatamente inician sesión, saber exactamente cómo se ejecuta su aplicación y lo que ocurre cada segundo en la plataforma.

Con Heroku no necesitamos pensar en la administración de la infraestructura, a diferencia de cómo tendríamos que hacer si desplegamos nuestra aplicación en AWS. Solo necesitamos elegir un plan de suscripción y cambiar nuestro plan cuando nuestra aplicación o negocio así lo necesite.

Heroku se ocupa convenientemente de los detalles. De esta forma, el 100% de nuestros esfuerzos estarán dedicados al desarrollo de nuestra aplicación. Ya sea que contemos con un desarrollador o varios desarrolladores web para crear nuestra aplicación y desplegarla en Heroku usando Git. Toda la gestión se realiza a través de su CLI (interfaz de línea de comandos) o desde el panel de control (dashboard).

Cuando necesitas elegir entre AWS y Heroku, principalmente debes considerar los costos asociados a cada proveedor. Qué crees, ¿Te va a costar menos tiempo y dinero administrar la infraestructura tú mismo, o para ti será más rentable utilizar una plataforma un poco más costosa, pero que gestiona la infraestructura por ti, permitiéndote enfocarte en tu producto o negocio?

Hola Mundo en Heroku

Ahora vamos a crear nuestra primera aplicación en Heroku. Para este ejemplo, crearemos una aplicación tipo Hola Mundo en Node.js a la que he llamado hello-openwebinars. Si no tienes Node.js instalado, puedes descargarlo desde su página web

· Creamos una cuenta en Heroku

Lo primero que debemos hacer es crear una cuenta en Heroku. Esto lo puedes hacer desde la página web de Heroku. Completa el formulario, y enseguida tendrás una cuenta gratuita, que puedes utilizar de inmediato, es decir, ya podrás crear una aplicación y desplegarla en Heroku, como veremos a continuación.

· Descargamos e instalamos Heroku en nuestra computadora

Desde esta página web, The Heroku CLI

· Configuramos nuestro proyecto

1 - Creamos una carpeta para alojar los archivos de nuestro proyecto:

$ mkdir heroku_hello_openwebinars
$ cd heroku_hello_openwebinars

2 - Creamos el código de la aplicación. Primero, creamos el archivo app.js en la raíz del directorio del proyecto y copiamos el siguiente código:

// usamos el módulo http
let http = require('http'),

// buscamos el puerto como variable de entorno, 
// si no buscamos el argumento CLI,
// si no usamos el puerto 8080 por defecto
port = process.env.PORT || process.argv[2] || 8080;

// creamos un servidor simple
let server = http.createServer(function (req, res) {

        res.writeHead(200, {
            'Content-Type': 'text/plain'
        });
        res.write('Hola OpenWebinars!', 'utf-8');
        res.end();

    });

// escuchamos el puerto
server.listen(port, function () {

    console.log('app up on port: ' + port);

});

3- Creamos el archivo package.json:
Como cualquier aplicación de Node.js, la aplicación necesita un archivo package.json

$ npm init

Luego de crearlo, el archivo queda con la siguiente información.

{
  "name": "heroku_hello_openwebinars",
  "version": "0.0.1",
  "description": "Mi primera web app en heroku",
  "main": "app.js",
  "scripts": {
    "test": "echo \\ \"Error: No existen pruebas\" && exit 1 "
  },
  "keywords": [
    "heroku",
    "introduccion",
    "web",
    "app",
    "cli",
    "http"
  ],
  "author": "Marvin Lopez Mendoza",
  "license": "GPL-3.0"
}

4- Creamos el Procfile:

El Procfile es un archivo de texto que creamos en el directorio raíz de nuestro proyecto y lo llamamos solo Procfile (sin extensión), en el cual se incluyen las dependencias de tu proyecto, en nuestro ejemplo Node.js

web: node index.js

5- Convertimos nuestro directorio en un repositorio git:

$ git init
$ git add *
$ git commit -m "Mi primer commit"

Hasta el momento solo hemos creado una aplicación normal en Node.js.

6- Creamos la aplicación en Heroku y publicamos nuestro código:

$ heroku login
$ heroku create hello-openwebinars
$ git push heroku master

Puedes poner el nombre que quieras a la aplicación en Heroku, siempre y cuando esté disponible, ya que este nombre forma parte del url de tu aplicación.

Una vez completado el despliegue, es decir, cuando veas algo parecido a esto:

remote: -----> Launching...
remote:        Released v3
remote:        https://hello-openwebinars.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/hello-openwebinars.git
 * [new branch]      master -> master

Quiere decir, que todo ha ido bien y ya podrás acceder a la aplicación: https://hello-openwebinars.herokuapp.com/

A partir de este momento, cada vez que realices un cambio en el código de tu aplicación en tu entorno local y ejecutes la instrucción “git push heroku master”, tu aplicación será automáticamente actualizada y desplegada en Heroku.

Ya que hemos visto cómo funciona Heroku, podemos recapitular las…

Ventajas de Heroku

  • Es una plataforma hecha por desarrolladores para desarrolladores.

  • Heroku ayuda a los desarrolladores a concentrarse principalmente en su aplicación y su funcionamiento, aumentando así su productividad.

  • Tiene un diseño y configuración simple pero muy eficiente.

  • Heroku ayuda en la implementación rápida de aplicaciones, a proveer un proceso de integración continua muy fácil y eficiente. Simplemente crea tu aplicación, haz commit en git y ejecuta tu aplicación sin problemas.

  • Heroku ofrece planes gratuitos que te permiten experimentar la plataforma antes de seleccionar un plan de pago.

  • Heroku es agnóstico al lenguaje de programación, ofrece soporte para los principales lenguajes de programación, como Ruby, Java, PHP, Python, Node, Go, Scala y Clojure.

  • Heroku ofrece un extenso y completo Marketplace, de donde puedes seleccionar entre más de 175 Add-ons (complementos), y agregar nuevas funcionalidades a tu aplicación de una forma sencilla, tales como envío de correos, gestión de los datos en bases de datos como MongoDB, gestión del login y monitoreo, entre otros.

  • Nos evita la necesidad de dar mantenimiento a la infraestructura de nuestra app, haciéndolo ellos por nosotros.

y las…

Desventajas de Heroku

  • No podemos personalizar y optimizar la infraestructura, ya que no tenemos acceso ni control sobre ella. Las Dynos son como una caja negra que no puedes acceder vía ssh como harías en otros proveedores.

  • Como usuario te debes adaptar a sus estándares en cuanto al hardware, sistemas operativos, firewalls, etc.

  • Su costo puede considerarse alto cuando nuestra aplicación necesita escalar por alto tráfico y demanda.

  • No es recomendada para proyectos de computación pesada o compleja por su limitada configurabilidad.

  • Múltiples Dynos se ejecutan en contenedores de una misma instancia de AWS EC2; como consecuencia, en aplicaciones con mucho tráfico, es decir con una necesidad alta en infraestructura, se pueden detectar problemas de rendimiento.

A pesar de que Heroku es una muy buena opción a considerar para gestionar tu futuro proyecto de software, debes analizar bien los requerimientos básicos en cuanto a la infraestructura y evaluar si lo que te ofrecen funcionará a medida que necesitas hacer ajustes y optimizaciones.

¿Quién utiliza Heroku principalmente?

Aquel developer que:

  • Necesita implementar y probar un producto mínimo viable (MVP).

  • Necesita mejorar su aplicación rápidamente después de recibir comentarios de los usuarios.

  • No tiene experiencia, ni está en capacidad de contratar un ingeniero (o equipo) especialista en DevOps.

  • Su proyecto no requiere tantos recursos computacionales.

Conclusión

Ahora que sabes qué es Heroku y cómo funciona por el ejemplo que hemos hecho, si te sientes identificado con las características antes mencionadas, puedes aprovechar lo que te ofrece, despreocuparte de gestionar tu infraestructura y enfocarte en lo importante, que es, crear tu proyecto.

Crea el código, realiza tus commits y ejecuta git push heroku master para ver tu aplicación desplegada en Heroku.


Compartir este post

También te puede interesar...

Tecnología

Google Cloud vs Azure

31 Octubre 2019 Angel Robledano
Introducción a Cloud Computing

Curso Online de introducción a Cloud Computing

7 horas y 56 minutos · Curso

Descubre las tecnologías relacionadas con el Cloud Computing y el cambio de paradigma que se está produciendo

  • Cloud
Artículos
Ver todos