Skip to content

Desplegando ms-filestorage: Almacenamiento de Archivos Abstraído y Resiliente

Continuamos con el despliegue de nuestro ecosistema. Ahora, abordaremos una necesidad universal en las aplicaciones modernas: la gestión de archivos. Para esta tarea, desplegaremos ms-filestorage.

Este microservicio actúa como una capa de abstracción sobre diferentes proveedores de almacenamiento en la nube. En lugar de que cada microservicio tenga que implementar la lógica para conectarse a Azure Blob Storage, Amazon S3, o un sistema de archivos local, simplemente interactúan con la API estandarizada de ms-filestorage.

A diferencia de otros servicios que hemos desplegado, ms-filestorage depende de un proveedor de almacenamiento en la nube externo para funcionar. En este tutorial, lo configuraremos para usar Azure Blob Storage.

Antes de continuar, necesitarás tener lo siguiente:

  1. Una Cuenta de Azure: Si no tienes una, puedes crear una cuenta gratuita.
  2. Una Cuenta de Almacenamiento (Storage Account): Dentro de tu suscripción de Azure, debes crear una “Storage Account”. Este es el recurso de Azure que contendrá tus “blobs” (archivos).
  3. Credenciales de Acceso: Una vez creada la cuenta de almacenamiento, necesitarás obtener dos piezas de información:
    • El Nombre de la Cuenta (Account Name).
    • Una Clave de Acceso (Access Key).

Con tu cuenta de almacenamiento creada y las credenciales a la mano, estás listo para continuar con el despliegue.

Un Vistazo a la Arquitectura de ms-filestorage

Section titled “Un Vistazo a la Arquitectura de ms-filestorage”
Diagrama de Flujo CQRS de ms-filestorage
  • Peticiones REST: La API expone endpoints clave para Upload (subir un archivo), Download (descargar un archivo) y la gestión de metadatos.
  • Casos de Uso: La lógica se separa en Commands (CreateFileStorage, DeleteFileStorage) y Queries (GetFileStorage, Download). Los Commands exitosos emiten eventos como FileStorageCreated.
Diagrama de Agregado de Dominio de ms-filestorage

El FileStorageAggregate es el corazón del dominio. No almacena el archivo en sí, sino todos los metadatos asociados a él, incluyendo la información de cada archivo replicado (List<File>) en los diferentes proveedores.

Parte 1: Configuración del Almacenamiento

Section titled “Parte 1: Configuración del Almacenamiento”

ms-filestorage utiliza una estrategia de configuración híbrida:

  • Datos no sensibles (Variables de Entorno): Como la URL base para las descargas.
  • Datos confidenciales (Vault): Como las claves de acceso a los proveedores de almacenamiento.
  • FILESTORAGE__URIDOWNLOAD: (Variable de Entorno) Esta es la URL pública base que el microservicio usará para construir los enlaces de descarga que devuelve a los clientes. Apunta a nuestro Gateway.
  • FileStorage:AzureBlob:AccountName: (Secreto en Vault) El nombre de tu cuenta de Azure Storage.
  • FileStorage:AzureBlob:AccountKey: (Secreto en Vault) La clave de acceso a tu cuenta de Azure Storage.
  1. Configurando los Secretos en Vault Añadimos las credenciales de los servicios base (RabbitMQ, Redis, Mongo) y, muy importante, las credenciales de nuestra cuenta de Azure Blob Storage.

    Terminal window
    vault kv put -mount=inventory-keyvalue ms-filestorage `
    "RabbitMQ:UserName=<USERNAME_FROM_RABBITMQ_SECRET>" `
    "RabbitMQ:Password=<PASSWORD_FROM_RABBITMQ_SECRET>" `
    "Redis:Instances:Core:ConnectionString=<CONNECTION_STRING_FROM_REDIS>" `
    "Mongo:ConnectionString=<VAULT_TRANSIT_PASSWORD>" `
    "FileStorage:AzureBlob:AccountName=<ACCOUNT_NAME_FROM_AZURE_BLOB>" `
    "FileStorage:AzureBlob:AccountKey=<ACCOUNT_KEY_FROM_AZURE_BLOB>"
    Creando los secretos para ms-filestorage en Vault

    Verificamos que los secretos se hayan guardado correctamente en la interfaz web de Vault.

    Verificando los secretos de ms-filestorage en la UI de Vault
  2. Desplegando con Helm desde ArtifactHub ms-filestorage solo expone una API REST, por lo que desplegaremos un único Helm Chart.

    • Preparar el values-rest.yaml Local Creamos un archivo values-rest.yaml con la configuración de las variables de entorno y la conexión a Vault.

      # values-rest.yaml para ms-filestorage-rest
      ms-base:
      env:
      - name: RESOURCES__ENABLE
      value: "true"
      - name: RESOURCES__SERVER
      value: "http://ms-services-grpc.inventory.svc.cluster.local:5001"
      # ... (otras variables de entorno como Security, Logger, etc.)
      - name: FILESTORAGE__URIDOWNLOAD
      value: "https://services.codedesignplus.app/ms-filestorage/api/FileStorage/Download"
      vault:
      server: http://vault.vault.svc.cluster.local:8200
      solution: inventory
      service: ms-filestorage
      token: <VAULT_ROOT_TOKEN>
      virtualService:
      create: true
      namespace: istio-ingress
      hosts:
      - services.codedesignplus.app
      gateways:
      - istio-ingress/istio-inventory-gateway
      http:
      - name: ms-filestorage
      match:
      - uri:
      prefix: /ms-filestorage/
      rewrite:
      uri: /
      route:
      - destination:
      host: ms-filestorage-rest.inventory.svc.cluster.local
      port:
      number: 5000
    • Ejecutar el Despliegue con Helm Usamos helm upgrade --install para desplegar el chart en el namespace inventory.

      Terminal window
      helm upgrade --install ms-filestorage-rest codedesignplus/ms-filestorage-rest -f ./values-rest.yaml --namespace inventory
      Instalando el Helm chart de ms-filestorage-rest
  1. Verificar el Pod en Lens En Lens, bajo “Workloads > Pods”, ahora vemos nuestro nuevo pod ms-filestorage-rest corriendo en el namespace inventory.

    Verificando el pod de ms-filestorage en Lens
  2. Verificar el VirtualService de Istio El Helm chart ha creado automáticamente el VirtualService que enruta el tráfico desde nuestro Gateway.

    Verificando el VirtualService de ms-filestorage en Lens
  3. Probar el Acceso a la API

    • Endpoint de Salud: Verificamos que el servicio está vivo accediendo a su endpoint de salud: https://services.codedesignplus.app/ms-filestorage/health/ready

      Deberías ver una respuesta “Healthy”.

      Petición exitosa al endpoint de salud de ms-filestorage
    • Swagger UI: Para explorar la API, usamos la interfaz de Swagger UI: https://services.codedesignplus.app/ms-filestorage/index.html

      Aquí puedes ver los endpoints para Upload, Download y la gestión de los metadatos de los archivos.

      Visualizando Swagger UI de ms-filestorage-rest

Has desplegado con éxito ms-filestorage, una pieza de infraestructura fundamental que abstrae y centraliza la gestión de archivos. Al separar esta lógica en su propio microservicio, hemos hecho que el resto de nuestros servicios de dominio sean más simples y se enfoquen únicamente en su lógica de negocio.

Con este componente en su lugar, nuestra plataforma está lista para manejar contenido multimedia, documentos y cualquier otro tipo de archivo que nuestra aplicación de inventario pueda necesitar.