Seidor
Personas hablando

January 30, 2023

What is Heroku? What is it for? How does it integrate with Salesforce?

Within Salesforce: Could you have an integration using message queuing? What if I need to open a WebSocket for communication? And could facial recognition be implemented? Yes, yes and yes! And all this without leaving the Salesforce ecosystem, as Heroku has been part of it since 2010.

¿Qué es Heroku?

Heroku es una solución de Plataforma como Servicio (PaaS) basada en la nube para que el cliente solo se preocupe de desarrollar su aplicación mientras Heroku se encarga de la infraestructura que hay detrás.

Para proporcionar este servicio se dispone de unos contenedores virtuales que son los encargados de mantener y ejecutar las aplicaciones. Estos contenedores virtuales son totalmente escalables bajo demanda. Tanto en número como en capacidades.

Una ventaja de elegir Heroku es su capacidad de soportar múltiples lenguajes de programación. Los principales a utilizar son: Node.js, Ruby, Python, Java, PHP, Go, Scala y Clojure. Aunque esta cantidad de lenguajes puede aumentar en el caso de utilizar Heroku Buildpacks, que permiten compilar las aplicaciones en multitud de ellos más.

lenguas de java

Características a tutiplén (Dynos, CLI…)

Heroku es más profundo de lo que uno puede imaginar antes de conocerlo. Al principio solo se ve la punta del iceberg. Pero se pueden destacar alguna de sus características que resultan más curiosas o llamativas:

comandos
  • Git

En cualquier proyecto o desarrollo, Git debería ser indispensable, pero con Heroku lo es aún más. Git no solo se utiliza como control de versiones, sino que además sirve como conexión entre el desarrollo local y la nube de Heroku. La forma de desplegar la aplicación en Heroku es con el famoso comando git push.

  • Dynos

Los dynos (no vale hacer chistes con dinosaurios) es como se denominan a los contenedores virtuales encargados de mantener en funcionamiento la aplicación. Los hay de distintos tipos según la capacidad de procesamiento, y se pueden combinar en cantidad y tipo como se desee. Son totalmente escalables bajo demanda, una ventaja para aquellas aplicaciones que reciben picos de solicitudes en fechas señaladas (Black Friday, Navidad…). Es importante tener bajo control cuándo y cuántos dynos están activos ya que Heroku cobra por segundo de procesamiento.

  • CLI

Para los amantes de las terminales, Heroku pone a su disposición los comandos de su Command Line Interface personalizada. Es tan potente que con ella se puede realizar rápidamente cualquier tarea que se realizaría acudiendo a la interfaz web.

  • Add-ons

Los Add-ons son herramientas que complementan la aplicación, no aplicaciones en sí, con lo que tienen la capacidad de adaptarse y aportar utilidad independientemente de la aplicación. Aunque hay algunos Add-ons puestos a disposición por el propio Heroku, muchas de ellos han sido desarrollados por partners u otras empresas. Consiguen un beneficio ya que tienen la capacidad de vender dichos desarrollos en la tienda bajo varias tarifas dependiendo de las capacidades a contratar. Muy parecido a lo que ocurre con Salesforce y AppExchange.

pasos
  • Buttons

Los botones son componentes, librerías o plantillas de aplicaciones que se despliegan en Heroku en un solo click. Una vez desplegada la aplicación del botón se puede modificar para adaptarla a las necesidades. Aquí entra en juego el Open Source (al menos en algunos botones que así lo especifiquen), ya que hacer click en un botón de Heroku equivaldría, por ejemplo, a hacer un fork en Github.

4 pasos para deploy

¿Cómo crear una app con Heroku?

Realmente pasar de cero a ‘Hola mundo’ es bastante rápido en Heroku. La complejidad radicará principalmente en la aplicación que se quiera desarrollar ya que el resto ya lo dispone Heroku de una manera sencilla.

Las aplicaciones se corren desde un servidor Heroku, usando Heroku DNS Server para apuntar al dominio de la aplicación (por lo general nombre.herokuapp.com).

Veamos esos sencillos pasos:

  • Instalar Heroku, iniciar sesión y crear la app

Heroku se puede instalar ya sea Linux, Windows o MacOs. Primero habrá que crearse una cuenta (por el momento gratuita) e iniciar sesión con “heroku login”. Para crear la app es tan instantáneo como escribir “heroku create <nombre app>”.

  • Desarrollar la aplicación

Antes de nada, hay que escoger el lenguaje de programación con el que se va a desarrollar, y, por descontado, programar dicha aplicación. Por ejemplo, una que salude con “Hola mundo”.

  • Procfile

Este fichero es importante. Es el encargado de decir a cada dyno (y a cada tipo de dyno) qué es lo que va a ejecutar. Es un listado de instrucciones. Por ejemplo, si se hubiese escrito una app en Python y se quisiera levantar un servidor de aplicaciones Gunicorn para, por ejemplo, servir una aplicación Django o Flask, el Procfile contendría “web: gunicorn main:app”.

  • Dependencias

Los dynos necesitan saber qué otras librerías (y sus versiones concretas) necesitan ser instaladas conjuntamente con la aplicación. Si, por ejemplo, se utiliza Python, sería suficiente con generar un fichero de requisitos de entorno con “pip freeze > requirements.txt”.

  • Relacionar el Git

Una vez iniciado el Git de manera local, se necesita relacionarlo con el que tiene Heroku de manera remota y es donde va a almacenar su versión en la nube de la aplicación: “heroku git:remote -a <nombre app>”.

  • (Opcional) Utilizar una BBDD

En caso de que la aplicación necesite una base de datos externa, hay un Add-on, Heroku Postgres, que se puede empezar a utilizar de manera gratuita para probarlo.

  • ¡Y desplegar!

¡Ya está! Solo queda un último paso: ejecutar el comando “git push heroku master”.
¿Cómo se integran Heroku y Salesforce?

Uno de los puntos fuertes de Heroku es su multitud de posibilidades a la hora de integrarse con Salesforce. Estando en su mismo ecosistema, se hubiera echado en falta si no fuera así.

tabla

Las más interesantes son:

  • Heroku Connect

Es una sincronización bidireccional de los datos entre Salesforce y otra base de datos externa. Cualquier modificación en los datos hecha tanto dentro como fuera de Salesforce se ve reflejada como si de un espejo se tratase. La espera mínima, eso sí, sería de 10 minutos. Si se necesita algo más instantáneo habría que recurrir a utilizar Salesforce Streaming API para conseguir un ‘polling on demand’.

  • External Objects

Esta forma de integrarse no es exclusiva de Heroku, ya que los External Objects de Salesforce se pueden utilizar con otras bases de datos externas. Pero con Heroku es realmente sencillo y rápido de configurar. Es una solución interesante para ahorrar el espacio en Salesforce y almacenar los datos externamente. Se exponen los datos dentro de Salesforce y se pueden visualizar, buscar y relacionar.

  • Apex Callout

A veces la sencillez es lo que más se ajusta a lo que necesitamos. Una simple llamada HTTP POST desde Apex al endpoint que proporciona Heroku puede llegar a ser suficiente si necesitamos del servicio dispuesto en Heroku de manera puntual.

Casos de uso

El principal motivo con el que publicitan el uso de Heroku es la tranquilidad que da que se ocupe de toda la infraestructura que hay que montar para que un servicio en la nube esté siempre disponible, mientras uno puede focalizarse en desarrollar la aplicación que necesite.

Comunes

Algunos de los usos más comunes de Heroku serían:

  • Integraciones para Salesforce con bases de datos externas

Ya hemos valorado anteriormente la multitud de posibilidades que proporciona Heroku para integrarse con Salesforce. La sencillez a la hora de configurar, rapidez y la confianza de no tener que salir del ecosistema Salesforce, son buenos motivos para optar por Heroku en caso necesario.

  • Puente entre Salesforce y una aplicación móvil

Las aplicaciones móviles suelen disponer de un servicio API RESTful que encaja perfectamente con las integraciones Heroku-Salesforce.

  • Incrustar en Salesforce una aplicación web o interfaz de usuario externa

Si ya existe la aplicación ¿para qué volverla a hacer? Gracias a Heroku se puede cargar en un canvas la aplicación a través de un iframe. Heroku garantiza un protocolo de comunicación seguro.

  • Exponer un API REST a dispositivos IoT

Los dispositivos de Internet of Things están al orden del día y la información que recopilan es muy útil. Heroku proporciona la posibilidad de tener dentro de Salesforce esos datos para explotarlos.

Más allá

Pero en este blog vamos a ir más allá y vamos a pensar en traer a Salesforce aquellas necesidades atípicas, pero que podrían necesitarse alguna vez, y en las que Apex flaquea, como podrían ser:

  • Integrarse con Colas de mensajes

Cada vez más, se están potenciando las integraciones basadas en colas de mensajes (MQTT, RabbitMQ…) ya que es una forma de no perder información en momentos de colapso o saturación, ya que los mensajes quedan almacenados hasta que pueden ser procesados. Una posible idea sería utilizar Heroku para transformar estos mensajes a Platform Events de Salesforce.

  • SDKs

En entornos industriales o integraciones con maquinaria antigua, suele ser habitual integrarse con SDKs y no con servicios. Heroku puede ser una solución para integrar ese SDK y transformarlo para que pueda ser explotado por un servicio.

  • Abrir un Socket o WebSocket

También hay servicios modernos que se estructuran alrededor de Sockets. Si se necesita realizar dicha tarea desde Apex, por el momento es una limitación, ya que no se podría dejar en Apex, por ejemplo, un socket escuchando conexiones. En cuanto a los WebSockets, pueden utilizarse desde el frontend, pero, ¿y si necesitamos usarlos desde el backend? desde Apex sería muy complicado. Aquí entra en juego por tanto también Heroku.

  • Manejo de vídeo e imagen

En este ámbito Apex se queda bastante corto. Es algo que le perdonamos, Apex no tiene como foco de atención las imágenes y el vídeo, y es un ámbito de la informática en la que para ser competitivo hay que especializarse. Para ello ya existen multitud de librerías, algunas de código abierto como OpenCV o FFMPEG, que trabajan la visión artificial para detectar en imágenes o vídeo, por ejemplo, el movimiento, objetos concretos, distancia, reconocimiento facial, etc. Con Heroku se está a un paso de incluir estas funcionalidades dentro de Salesforce.

  • Crear un proxy para saltarse el CORS

Los problemas con el CORS son muy típicos ya que actualmente los navegadores bloquean las peticiones de origen cruzado si no se incluyen unas cabeceras específicas. Una posible solución sería crearse un servidor Proxy en Heroku y utilizarlo para evitar estos errores ya que hace de intermediario entre el navegador y el servidor API.

  • Generación de gráficos científicos

En ocasiones se podría requerir la necesidad de utilizar funciones estadísticas, matemáticas o de generación de gráficos científicos. Aunque se podría llegar a pensar en soluciones como Einstein Analytics, a veces su potencia (y su precio) se exceden. Ya existen librerías de código abierto, como NumPy o MatPlotLib, y que pueden estar muy dentro de Salesforce utilizando Heroku.

  • Web scraping

Aunque puede haber soluciones con JavaScript, si la solución se necesita en Apex, Heroku podría colaborar en ello. Ya existen librerías de código abierto especializadas en web scraping como Selenium o ScraPy, que se situarían a paso de integración (paso realmente pequeño gracias a Heroku).

Documentación

Y hasta aquí el tutorial en español de cómo Heroku puede ayudar a extender las funcionalidades de Salesforce. Para más información se recomienda encarecidamente acudir al Heroku Dev Center. En él se encuentra toda la documentación más técnica acerca de la configuración y uso de Heroku. Y por supuesto, Trailhead siempre tiene como soporte pequeños módulos donde descubrir más acerca de Heroku o guías paso a paso para llegar a ‘Hola mundo’ en unos minutos.