Esta es una traducción que desde EGA Futura ofrecemos como cortesía a toda la Ohana y comunidad de programadores , consultores , administradores y arquitectos de Salesforce para toda Iberoamérica .

El enlace a la publicación original, lo encontrarás al final de este artículo.

Salesforce es una plataforma multiinquilino que atiende a múltiples clientes en el mismo hardware. Con este tipo de arquitectura, la Plataforma de Salesforce impone límites para hacer cumplir una distribución uniforme de recursos entre todos los inquilinos. Dichos límites incluyen el consumo de API, los límites del gobernador de Apex y otros. La mayoría de los límites relacionados con los desarrolladores se describen en la Referencia rápida de asignaciones y límites para desarrolladores de Salesforce ; sin embargo, es fácil pasar por alto otros límites, como las asignaciones de almacenamiento de archivos y datos .

En esta publicación, analizaremos el almacenamiento de archivos y exploraremos una solución que le permite reducir el consumo de almacenamiento de archivos mediante la descarga de documentos a Amazon Web Services (AWS) mediante las funciones de Salesforce. Compartiremos ejemplos de implementaciones para exportar e importar documentos desde Amazon Simple Storage Service (Amazon S3).

Trabajar con documentos a escala

La cantidad de almacenamiento de archivos disponible en Salesforce varía según la edición de la organización, pero la plataforma no está diseñada para almacenar grandes volúmenes de archivos como una solución de administración de contenido empresarial (ECM). Esta es la razón por la que normalmente desea integrarse con soluciones de almacenamiento dedicadas, como Google Drive, Dropbox, Box o AWS, cuando maneja una gran cantidad de documentos.

Dada la amplia asociación de Salesforce con AWS que ha resultado en integraciones nativas diseñadas para simplificar la experiencia del desarrollador, exploremos cómo Amazon S3 puede ayudarnos a almacenar documentos.

Presentación de Amazon S3

Amazon S3 es un servicio web popular de AWS para el almacenamiento de archivos. S3 ofrece un servicio de almacenamiento de contenido habilitado para API en entornos llamados "depósitos". S3 es duradero, confiable, escalable, seguro y está disponible en todo el mundo, y AWS proporciona SDK para varios lenguajes de programación . Al igual que con las funciones de Salesforce, puede registrarse para obtener una cuenta de nivel gratuito de AWS para comenzar a utilizar el servicio.

Estas razones hacen que AWS S3 sea un gran candidato para crear una integración que transfiera documentos de Salesforce a S3 y, por lo tanto, ahorre en el consumo de almacenamiento de documentos.

Descarga de documentos con funciones de Salesforce y Amazon S3

Lo primero que viene a la mente al diseñar una solución que descarga documentos en S3 es mantenerlo simple y usar Apex para comunicarse directamente con las API REST de S3. ¿Por qué necesitaría algo más, dado que Apex puede consumir esas API de forma nativa, verdad?

Esta pregunta nos lleva de vuelta a los límites. Las transacciones de Apex tienen un espacio de almacenamiento dinámico total de hasta 12 MB (excluyendo los servicios de correo electrónico, que tienen un límite de 36 MB). Es probable que este límite cause problemas al trabajar con documentos a escala.

Si intenta leer el contenido de un solo documento de 13 MB con Apex, alcanzará el límite de espacio de almacenamiento dinámico.

Una buena forma de evitar este problema es utilizar las Funciones de Salesforce . Las funciones están diseñadas para procesar datos más allá de los límites de Apex. Dado que las funciones se ejecutan fuera de las transacciones principales de la plataforma, se aplican límites más permisivos. Esto significa que las funciones pueden ejecutarse durante períodos de tiempo más prolongados y consumir más CPU y memoria que Apex. Son ideales para interactuar con documentos a escala.

Gracias a Functions, puede transferir documentos a S3 con el siguiente escenario de integración:

  1. El usuario carga y adjunta un documento a un registro en Salesforce
  2. El activador de Apex se activa después de guardar el documento y llama a una clase de controlador con los metadatos del documento (no el contenido del documento, para evitar los límites de Apex)
  3. La clase de controlador de activación de Apex invoca una función de Salesforce de forma asíncrona con los metadatos del documento
  4. La función recupera el contenido del documento utilizando la API REST de Salesforce
  5. La función carga el contenido del documento en un depósito de Amazon S3 gracias al cliente JavaScript de S3
  6. Una vez que se carga el documento, la función crea un registro de Salesforce que vincula el documento almacenado en S3 con el registro y llama a un método de devolución de llamada de Apex en la clase de controlador de activación.
  7. El método de devolución de llamada de Apex elimina el documento original de Salesforce


Pasemos ahora al punto de vista de la experiencia del usuario. El flujo comienza cuando el usuario carga el documento en el registro mediante el botón estándar de carga de archivos en Notas y archivos adjuntos .


Después de adjuntar un documento a un registro, el usuario verá que el documento se mueve de la sección Notas y archivos adjuntos estándar a una nueva lista de Documentos de la cuenta de S3 . Desde allí, pueden ver los metadatos del documento, como el nombre, la URL de almacenamiento de S3, el propietario y la fecha de creación.


Puede encontrar una implementación del escenario que acabamos de compartir en este repositorio de GitHub de muestra . Encontrará instrucciones de configuración detalladas que lo guiarán a través de la implementación de los entornos y explicarán cómo configurar la solución para admitir documentos para múltiples objetos.

Una vez que haya implementado dicha integración para ahorrar en el consumo de almacenamiento de archivos de Salesforce, querrá considerar acceder a los archivos desde S3.

Acceder a documentos desde Amazon S3

Como administrador de AWS, puede acceder al documento almacenado en S3 desde la consola de AWS. Pero, ¿qué pasa con sus usuarios?

Puede otorgar a los usuarios acceso a S3 configurando usuarios y políticas de IAM (Administración de identidad y acceso) desde la consola de AWS, o puede implementar soluciones de integración de middleware que brinden acceso a los documentos. No podrá utilizar las funciones de Salesforce para recuperar documentos.

La primera opción consiste en configurar el acceso y los permisos de usuarios individuales desde la consola de AWS. Deberá crear credenciales independientes en AWS y utilizar una solución de inicio de sesión único (SSO) para reconciliar las identidades con Salesforce. Puede invertir en automatización para ayudarlo a escalar; sin embargo, si tiene requisitos de acceso específicos, hay otras opciones que pueden ayudarlo.

La segunda opción consiste en implementar una aplicación de middleware ligera que está conectada a Salesforce con OAuth 2.0. La aplicación usaría un usuario de integración API para AWS con acceso de solo lectura para cargar documentos a pedido. Implementamos una solución de este tipo mediante una aplicación de middleware Node en este repositorio de GitHub de muestra .

Este enfoque se puede resumir en cuatro pasos:

  1. Un usuario hace clic en un vínculo en el registro del documento de S3 en Salesforce.
  2. El enlace redirige al usuario a la aplicación de middleware donde el usuario pasa por la autenticación OAuth utilizando sus credenciales de Salesforce. El flujo de OAuth se implementa gracias a una aplicación conectada de Salesforce.
  3. El middleware ejecuta algunas comprobaciones de permisos y, si el usuario tiene permiso para acceder al documento, el middleware utiliza un cliente API de S3 para recuperar el archivo de Amazon.
  4. A continuación, el contenido del archivo se devuelve al usuario. Si el usuario ya había iniciado sesión con la aplicación conectada antes de la solicitud original en el paso 1, el documento se envía sin problemas como respuesta (el usuario no notará los pasos intermedios).

palabras de cierre

En este ejemplo, describimos los pasos para aprovechar las funciones de Salesforce para descargar documentos de Salesforce a Amazon S3 a fin de reducir el consumo de almacenamiento de archivos. Y hemos mostrado cómo puede recuperar los documentos utilizando una aplicación de software intermedio. Este caso de uso destaca el poder de las funciones de Salesforce al procesar grandes volúmenes de datos y la flexibilidad de Amazon S3 para el almacenamiento. Comience con Functions y S3 usando los repositorios de muestra.

Recursos

  • Ejemplos de repositorios de GitHub
  • Documentación

Sobre el Autor

Philippe Ozil es un defensor principal de desarrolladores en Salesforce, donde se enfoca en la plataforma de Salesforce. Escribe contenido técnico y habla con frecuencia en conferencias. Es un desarrollador de pila completa y disfruta trabajar en proyectos DevOps, robótica y realidad virtual. Sígalo en Twitter @PhilippeOzil o consulte sus proyectos de GitHub @pozil .

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2022/06/reduce-file-storage-consumption-with-salesforce-functions-and-amazon-s3.html

Entradas recomendadas