Funciones sin servidor

Last updated:

Nota: si estás creando una función sin servidor como parte de un proyecto de desarrollador, visita la documentación de la función sin servidor del proyecto de desarrollador. La siguiente documentación es para crear funciones sin servidor fuera de la plataforma del proyecto del desarrollador.

APPLICABLE PRODUCTS
  • Content Hub
    • Enterprise

Las funciones sin servidor ofrecen una manera de escribir código del lado del servidor que se relaciona con HubSpot y servicios de terceros a través de las API. Las API que requieren autentificación no son seguras para el front-end de un sitio web, ya que tus credenciales quedarían expuestas. Las funciones sin servidor pueden actuar como intermediarias, permitiéndote guardar las credenciales en secreto. 

Con las funciones sin servidor, no necesitaras crear y gestionar nuevos servidores. Las funciones sin servidor requieren menos gastos y son más fáciles de escalar a medida que un negocio crece.

Puedes experimentar con las funciones sin servidor utilizando una cuenta de entorno de pruebas para desarrolladores CMS. Para crear tu primera función sin servidor, consulta la guía de primeros pasos a las funciones sin servidor.

Ejemplos

La lista de cosas para las que puedes utilizar las funciones sin servidor de HubSpot depende de tu imaginación. Puedes utilizarlas para:

  • Recolectar datos y almacenarlos en HubDB o en el CRM de HubSpot
  • Calculadoras de datos complejos
  • Visualización dinámica de datos de otros sistemas
  • Sistemas de registro de eventos
  • Envíos de formularios que envían datos a otros sistemas

Usando el ejemplo del sistema de registro de eventos, podrías utilizar funciones sin servidor para manejar el registro y actualizar cuántos espacios hay para un evento. El flujo funcionaría como sigue:

  1. El visitante del sitio web navega a la página de registro de tu evento, mostrando que hay espacio para que asistan 15 personas más. El visitante rellena un formulario personalizado para inscribirse en el evento y lo envía.
  2. Ese envío lo hemos configurado para que envíe una solicitud POST a yourwebsite.com/_hcms/api/event/participants. event/participants es tu función sin servidor.
  3. Tu función sin servidor recibe los datos enviados por el usuario y realiza algunas acciones antes de devolver una respuesta al navegador:
  4. Envía los datos del campo del formulario a la API del formulario de envío de HubSpot para agregar esta información de envío del formulario al CRM de HubSpot.
  5. Utiliza la api de HubDB, para restar 1 al recuento de participantes de este evento que se almacena en HubDB.
  6. Envía una respuesta de vuelta al navegador web.
  7. Javascript en la página recibe la respuesta de la función sin servidor y muestra un mensaje de confirmación al usuario final, y ajusta el recuento de cuántos espacios quedan para los participantes.

Las funciones sin servidor de HubSpot están escritas en JavaScript y utilizan el tiempo de ejecución NodeJS. Las funciones sin servidor de HubSpot están previstas para ser utilizadas para agregar funcionalidad a tu sitio de HubSpot, como el apoyo a los envíos de formularios avanzados y la extracción de datos de otras API. No está previsto como una plataforma informática genérica en la que puedas ejecutar un código no relacionado con HubSpot.

Límites

Las funciones sin servidor están previstas para ser rápidas y tener un enfoque limitado. Esa velocidad les permite ser compañeros perfectos del front-end de los sitios web y las aplicaciones, permitiendo una llamada y una respuesta rápidas. Para mantener el rendimiento, las funciones sin servidor de HubSpot se limitan a:

  • 50 secretos por cuenta.
  • 128 MB de memoria.
  • no más de 100 puntos de terminación por cuenta de HubSpot.
  • el contentType application/json cuando se llama a una función.
  • 6MB por carga útil de invocación, que puede encontrarse al intentar cargar un archivo con una función sin servidor, por ejemplo.
  • 4KB para la cantidad de datos que se pueden registrar. Al alcanzar este límite, se recomienda registrar después de acciones individuales, en lugar de la salida final.

Límites de ejecución

  • Cada función tiene un tiempo máximo de ejecución de 10 segundos
  • Cada cuenta está limitada a un total de 600 segundos de ejecución por minuto.

Esto significa que cualquiera de estos escenarios puede ocurrir en un minuto:

  • Hasta 60 ejecuciones de funciones que tardan 10 segundos cada una en completarse.
  • Hasta 6.000 ejecuciones de funciones que tardan 100 milisegundos en completarse.

Las funciones que superen esos límites arrojarán un error. El recuento de ejecuciones y los límites de tiempo devolverán una respuesta 429. El tiempo de ejecución de cada función se incluye en los registros de funciones sin servidor.

Dividir dependencias

Las funciones sin servidor no admiten la división de JavaScript entre varios archivos cuando se implementan. En lugar de ello, tu función sin servidor debe incluir un archivo JavaScript para ejecutar la función. Si estás construyendo una función sin servidor con varios archivos JavaScript, deberías copiar el código compartido en el único archivo JavaScript o usar webpack para agrupar tu código. Más información sobre cómo usar webpack como solución en la Comunidad de HubSpot.

Acceso a las funciones sin servidor

En HubSpot, las funciones sin servidor se almacenan en el sistema de archivos del desarrollador, visible en el administrador de diseño. Puedes acceder y editar tus funciones sin servidor localmente a través de la CLI. 

Para incluir funciones sin servidor en un proyecto de desarrollador, consulta la documentación de bloques de creación de JavaScript.

Funciones sin servidor

Las funciones sin servidor de HubSpot se encuentran dentro de una carpeta de funciones. Esta carpeta puede tener cualquier nombre, pero debe contener el sufijo .functions. Los archivos almacenados en esta carpeta no son de acceso público.

En la carpeta de funciones, incluye tu archivo serverless.json junto con el archivo .js que contiene tus funciones. Podrías considerar agregar un archivo de descuento README para comunicar para qué son las funciones, cómo funcionan y si tiene un proceso de compilación para crearlas.

Carpeta .functions sin servidor

Para evitar ediciones accidentales desde el administrador de diseño, puedes bloquear tu carpeta. Para bloquear una carpeta, navega hasta el administrador de diseños, haz clic con el botón derecho en la carpeta y selecciona Bloquear carpeta.

Serverless.json

Nota: las funciones sin servidor incluidas en los proyectos de desarrolladores se han actualizado a partir de la versión 2023.2 de la plataforma, incluido un nuevo esquema serverless.json. Obtén más información sobre el control de versiones de la plataforma del proyecto.

serverless.json es el archivo de configuración de la función sin servidor que especifica el entorno de tiempo de ejecución y cualquier variable de entorno que planees utilizar en tus funciones.

Este archivo también maneja el enrutamiento de tus puntos de terminación. Especifica las rutas de los puntos de terminación que deseas mapear en tu archivo function.js. Para ver un ejemplo de cómo debe ser tu archivo serverless.json, consulta la guía de referencia de las funciones sin servidor.

Function.js

Tu función real sin servidor puede tener cualquier nombre siempre que sea un archivo .js. Para que tu función sin servidor funcione, debe estar mapeada a un punto de terminacióndefinido en el archivo serverless.json. Para la resolución de problemas, se recomienda nombrar el archivo .js de forma similar al nombre de su punto de terminación en su archivo de configuración serverless.json.  

Secretos

Al autenticar una llamada realizada por una función sin servidor, debes usar secretos para almacenar claves de API, tokens de acceso a aplicaciones privadas y otra información de autenticación por seguridad. Esto permitirá la autenticación sin exponer tu clave o token de acceso.

Para crear y administrar secretos, puedes usar comandos de la CLI de HubSpot, tales como:

  • hs secrets add para crear un nuevo secreto.
  • hs secrets list para ver tus secretos disponibles actualmente por nombre.
  • hs secrets update para actualizar un secreto existente.

Una vez agregados a través de la CLI, pueden ponerse a disposición de las funciones mediante la inclusión de una matriz de secretos que contenga el nombre del secreto. Esto le permite almacenar tu código de función en el control de versiones y usar secretos sin exponerlos. Sin embargo, nunca debes devolver el valor de tu secreto a través del registro de la consola o como respuesta, ya que esto expondrá el secreto en los registros o en las páginas del front-end que llaman a tu función sin servidor.

Nota: debido al almacenamiento en caché, puede tardar aproximadamente un minuto en ver los valores secretos actualizados. Si acabas de actualizar un secreto pero todavía estás viendo el valor anterior, vuelve a comprobarlo después de aproximadamente un minuto.

Visualización de los registros de la función sin servidor

Para ayudar a la solución de problemas de tus funciones sin servidor, la CLI tiene un comando hs logs que le da la capacidad de ver los registros de tu función. Además de las respuestas individuales de la invocación de la función, la hora de ejecución y el tiempo de ejecución, cualquier declaración console.log también aparecerá en los registros de la función. No se deben registrar en la consola los secretos como las claves de la API.


¿Te resultó útil este artículo?
Con este formulario puedes enviar tu opinión sobre nuestros documentos para desarrolladores. Si tienes comentarios sobre el producto de HubSpot, puedes enviarlos al Foro de ideas.