Transferencia y archivo automáticos de archivos multimedia con MASV y Backblaze

por Ankit Verma | 14/12/2021

Si trabajas con vídeo de forma habitual, sin duda estás acostumbrado a enviar grandes archivos multimedia a clientes/compañeros y a hacer copias de seguridad de tus archivos multimedia en una unidad de almacenamiento de algún tipo. Lo más probable es que cuando transfieras y archives tus archivos multimedia, sea un proceso de dos pasos. Hoy, quiero demostrar cómo se puede transferir y archivar automáticamente los archivos multimedia en un solo proceso utilizando una combinación de MASV Portals y Backblaze como ejemplo.

La principal ventaja de combinar ambas acciones, además de la rapidez/eficiencia, es que se asegura de que ningún archivo se olvide durante el proceso de copia de seguridad. Todo el mundo ha abierto alguna vez una carpeta para ver archivos con nombres como archivo01.mp4, archivo02.mp, archivo01cambiado.mp4. Un proceso de copia de seguridad rápido que se complica increíblemente rápido. Sin embargo, utilizando un proceso de copia de seguridad automático y fácil puede separar cada archivo por fecha de carga y tamaño del archivo. Esto puede y le ahorrará tiempo y esfuerzo de averiguar qué versión de un archivo es la importante. 

Hoy en día, la integración de MASV con proveedores de la nube como Backblaze se puede lograr fácilmente en nuestro aplicación web con unos pocos clics. Sin embargo, este post llevará esto un poco más allá mostrando cómo implementar estos pasos usando API de Cloud Connect de MASV. Esto le permite automatizar el proceso más allá de una única conexión a la nube y crear una central de automatización que conecte múltiples Portales MASV a múltiples proveedores de nube / cubos de almacenamiento. Utilizaremos python3 como lenguaje de scripting para demostrar la facilidad con la que se puede lograr esto.

Transferencia y archivo de medios con MASV + Backblaze

transferir y archivar archivos multimedia con masv y backblaze

Como hemos mencionado, hoy vamos a utilizar MASV y Backblaze. Nuestro objetivo es crear un sencillo script en python3 que conecte ambos servicios y pueda mostrar la facilidad con la que funciona la tecnología Cloud Connect de MASV. Ambas tecnologías ofrecen una serie de características. Aquí están algunos aspectos destacados de lo que estamos utilizando hoy.

MASV:

  • Transferencia ultrarrápida de archivos de gran tamaño.
  • Transferencia automática de directorios completos.
  • Conéctate a la nube: integración con cubos externos en la nube para mover automáticamente los archivos donde los necesites.

BackBlaze:

  • Almacenamiento barato e ilimitado a largo plazo.
  • Copia de seguridad en la nube increíblemente fácil.
  • Facilidad para el flujo de trabajo.
  • Admite la autenticación de dos factores.

Estamos utilizando Backblaze como nuestro proveedor de Cloud Connect para la integración con MASV. Todos estos pasos se pueden generalizar para trabajar con cualquier proveedor como se indica en nuestro documentación.

¿No tienes una cuenta MASV?

Consigue 100 GB al registrarte.

Supuestos del flujo de trabajo

En adelante vamos a suponer lo siguiente:

  • Un editor de código como Código de Visual Studio.
  • Python3 instalado y la capacidad de ejecutar scripts.
  • Una cuenta del MASV.
  • Cuenta Backblaze B2 con clave API.

Antes de empezar, queremos asegurarnos de que tiene una clave Backblaze B2. Por favor, siga la guía en https://www.backblaze.com/b2/docs/application_keys.html

Establecimiento de requisitos

Comience por crear un archivo llamado backblaze.py este es el script en el que se escribirá todo el código.

Este script requiere la capacidad de enviar peticiones http y para ello vamos a utilizar el solicita biblioteca.

En su terminal, instale el solicita paquete.

$ pip3 install requests

Autenticación con MASV

Para nuestra autenticación vamos a utilizar nuestro nombre de usuario/contraseña. Esto también se puede hacer con un token de usuario, pero para simplificar, hoy vamos a utilizar el nombre de usuario/contraseña. Recomendamos encarecidamente el uso de una clave de API. Una clave de API puede ser fácilmente cambiada en el caso de que la clave sea filtrada. Mientras que la autenticación de usuario puede dar acceso a su panel de control de la cuenta completa.


//python
importar solicitudes

api_uri = 'https://api.massive.app/v1'
api_auth_route = '/auth'

auth_request = {
    "email": "[email protected]",
    "password": "yourpassword"
}

r = requests.post(
    api_uri + api_auth_route,
    json=auth_request
)
auth_response = r.json()
auth_token = auth_response['token']
team_id = auth_response['teams'][0]['id']

print("Se ha capturado el token de autenticación")

Hay un poco de placa de caldera aquí para ponernos en marcha. La línea #1 nos hace importar el solicita biblioteca. Mientras que la línea #3 nos hace definir la uri de la api. Esto es importante ya que nos permite cambiar fácilmente la ruta por defecto en caso de cualquier cambio de dominio futuro. Seguido de la ruta exacta para la autenticación.

Rellenamos nuestro nombre de usuario y contraseña para nuestra solicitud de autentificación. Este es el nombre de usuario y la contraseña que se utiliza para acceder al panel de control de MASV. Finalmente pasamos a realizar la petición. Con la concatenación de cadenas combinamos el api_uri y el api_auth_route para hacer la url completa https://api.massive.app/v1/auth y adjuntar nuestro auth_request como json.

Hoy nos sentimos bien, así que asumimos que la solicitud ha sido aceptada y empezamos a obtener variables (para ver un resumen de todas las variables devueltas, visite nuestra documentación.)

Las variables que necesitamos son:

  • auth_token: utilizado para autenticar nuestras peticiones
  • team_id: el equipo al que adjuntamos nuestras solicitudes y la conexión a la nube

Envío de una solicitud autenticada

Muy bien. Ahora tenemos nuestro token de usuario, pero ¿cómo lo usamos realmente? En el caso de la api de MASV, vamos a adjuntar nuestro token a las cabeceras de nuestras peticiones. Un simple trozo de json nos servirá para empezar a utilizarlo en todo el script

//python
team_id = auth_response['teams'][0]['id']
...

request_headers = {
    "Content-Type": "application/json",
    "X-User-Token": auth_token,
}

Configuración de automatizaciones con los portales de MASV

Un poco de desvío antes de empezar con Backblaze. Nuestro objetivo aquí es automáticamente transferir y archivar archivos multimedia en Backblaze. Podemos hacerlo utilizando la función Portal en MASV. Puede pensar en un Portal como un cubo en el que se almacenan todos sus archivos en MASV.

Un portal puede ser creado con la GUI o con un script rápido. Para este caso vamos a utilizar un script rápido:

//python
    "X-User-Token": auth_token,
}
...

# Obtener el id del portal
api_portals_route = '/equipos/{}/portales'.format(team_id)

# Esta petición fallará si el subdominio
# no se modifica. Descomente la línea del subdominio
# y sustituya el `masvbackblaze` por su propio
# para que la solicitud tenga éxito.
portal_request = {
    "nombre": "masvtobackblaze",
    "mensaje": "Envío de datos a backblaze",
    "subdominio": "masvbackblaze",
    "destinatarios": [
        "[email protected]"
    ],
    "access_code": "your_access_code",
    "has_access_code": Verdadero,
    "download_password": "your_download_password",
    "has_download_password": True,
}

r = requests.post(
    api_uri + api_portals_route,
    headers=cabezales_de_solicitud,
    json=portal_request
)

# Estamos creando algo
# por lo que necesitamos evaluar si
# funciona realmente
if r.status_code != 201:
    print(r.status_code)
    print(r.json()["mensaje"])
    exit()

portal = r.json()
portal_id = portal["id"]
print("Portal creado: {}".format(portal_id))

Hay mucho que desempacar aquí. Empezamos por conseguir nuestro api_portals_route esta ruta interactúa con cualquier petición del Portal que necesitemos hacer. Python incluye el encantador .format() que nos permite incluir la función team_id que hemos traído antes a la uri.

Es necesario crear un poco de placa de caldera para la respuesta real. Establecemos algunos valores predeterminados razonables. El subdominio es un campo único y deberá ser único para cada persona. 

Nuestra solicitud también utiliza ahora nuestro token de autenticación con la línea headers=cabezales_de_solicitud cualquier función de solicitud que requiera autenticación a partir de ahora incluirá esas cabeceras.

Queremos verificar la creación, así que comprobamos el 422 error con el que responderá nuestra api. Si ya existe, entonces se mostrará el código de error y se saldrá.

Nota: Para obtener información completa sobre la creación del portal visite nuestra documentación.

Conexión de Backblaze

Ahora estamos en condiciones de crear una conexión Backblaze B2. Para ello vamos a crear la conexión real a la nube y adjuntarla al Portal que hemos creado en el paso anterior. Esto automatizará la transferencia y el archivo de los archivos de vídeo subidos en MASV a Backblaze.

//python
portal_id = r.json()["id"]
...

api_cloudconnect_route = '/equipos/{}/conexiones_en_nube'.format(team_id)
backblaze_connect_request = {
    "name": "backblazetomasv",
    "proveedor": "backblazeb2",
    "authorization": {
        "client_id": "0005bbxxxxxxxxxxxx",
        "client_secret": "K000xxxxxxxxx",
        "destino": "team-bucket",
    }
}

r=requests.post(
    api_uri + api_cloudconnect_route,
    headers=cabezales_de_solicitud,
    json=backblaze_connect_request
)

print("Creada conexión a la nube {}".format(r.json()['id']))

# Estamos creando algo
# así que tenemos que evaluar si
# funciona realmente
if r.status_code == 422:
    print(r.json()["mensaje"])
    exit()

cloudconnect_id = r.json()['id']

Gran parte de este código debería empezar a resultar familiar. Empezamos por crear el cloudconnect en nuestra api. Seguido de algunos parámetros para nuestra conexión con Backblaze. El nombre debe cambiarse para que coincida con la convención de nomenclatura que utilice su empresa.

El bloque de autenticación es necesario y se rellena con las credenciales generadas en Clave API de Backblaze.

//python
# Adjuntar al portal

api_cloudconnect_attach_route = "/portales/{}".format(portal_id)

api_cloudconnect_request = portal_request
api_cloudconnect_request['active'] = True
api_cloudconnect_request['configure_cloud_connections'] = True
api_cloudconnect_request['cloud_connections'] = [{
    "id": cloudconnect_id,
    "active": True,
    "target_action": "transfer"
}]

r=requests.put(
    api_uri + api_cloudconnect_attach_route,
    headers=cabezales_de_solicitud,
    json=api_cloudconnect_request
)

print("Conexión al portal creada")

Ejecuta el código con un final:

  $ python3 backblaze.py

Que dará como resultado lo siguiente:

  Tomado el token de autenticación
  Portal creado: YOUR_PORTAL_ID_HERE
  Creada la conexión a la nube YOUR_CLOUD_CONNECTION_ID_HERE
  Creada la conexión al portal

Esta salida confirma que su script se ha ejecutado con éxito y que ahora tiene un Portal creado y conectado a un bucket Backblaze B2. 

Para validar un poco más que el Portal está conectado, podemos navegar al tablero de Cloud Connect. En la página de conexión a la nube, puede ver que el script ha creado una conexión con el nombre backblazetomasv. Con un verde ok lo que significa que todo está en orden.

El siguiente paso en tu lista es transferir físicamente y archivar esos archivos multimedia. Basta con arrastrar y soltar los archivos a MASV y ya puedes despedirte, sabiendo que los datos se enviarán y almacenarán de forma segura.

Tu gestor (el destinatario que hayas establecido anteriormente) recibirá un correo electrónico cuando pueda descargar el archivo. Backblaze tendrá su(s) archivo(s) listo(s) en uno de sus cubos.

detalles del cubo backblaze

¿Quieres saber cómo transferir archivos con sólo moverlos a una carpeta de tu escritorio? Consulta nuestra serie de blogs sobre la implementación de TransferAgent en Docker. O si quiere ver más de lo que puede hacer con nuestra API consulte nuestro Docs de desarrollo aquí.

¿Listo para probar el MASV?

Regístrese y obtenga 100 GB de transferencias con nosotros.