Cómo recuperar Workspaces eliminados en Microsoft Fabric

¿Alguna vez has eliminado accidentalmente un workspace en Microsoft Fabric y has sentido ese momento de pánico? No te preocupes, Microsoft ha incorporado una API de administración que te permite restaurar workspaces eliminados. En este artículo te mostraré cómo hacerlo usando un notebook de PySpark directamente en Fabric.
¿Por qué es importante esta funcionalidad?
Los workspaces en Microsoft Fabric son contenedores cruciales que almacenan todos tus artefactos: lakehouse, notebooks, pipelines, datasets y más. Una eliminación accidental puede significar la pérdida de horas o días de trabajo. Afortunadamente, Microsoft Fabric ofrece una API administrativa que permite recuperar estos workspaces antes de que se eliminen permanentemente.
Requisitos previos
Antes de comenzar, asegúrate de cumplir con estos requisitos:
Permisos de Fabric Administrator: Esta operación requiere privilegios administrativos a nivel de tenant
Alcance delegado:
Tenant.ReadWrite.AllUn workspace eliminado: Necesitas el ID (UUID) del workspace que deseas recuperar
ID del nuevo administrador: Usuario o service principal que será el admin del workspace restaurado
Importante: La API tiene un límite de 10 peticiones por minuto, así que planifica tus operaciones en consecuencia.
La API de Restauración
Microsoft Fabric expone un endpoint REST específico para esta tarea:
POST https://api.fabric.microsoft.com/v1/admin/workspaces/{workspaceId}/restore
Esta API acepta dos parámetros principales:
newWorkspaceName: El nombre que tendrá el workspace restaurado (obligatorio para "My workspace")
newWorkspaceAdminPrincipal: El principal que será administrador del workspace restaurado
El principal puede ser de varios tipos:
User: Un usuario de Microsoft EntraServicePrincipal: Un service principal de Microsoft EntraGroup: Un grupo de seguridad
Implementación con PySpark
Configuración de parámetros
Define los parámetros necesarios para la restauración:
WORKSPACE_ID = "000xxx-xxxx-xxxx-xxxx-xxx000"
NEW_WORKSPACE_NAME = "Workspace Restored"
NEW_ADMIN_ID = "000xxx-xxxx-xxxx-xxxx-xxx000"
PRINCIPAL_TYPE = "User"
Nota importante: El NEW_ADMIN_ID es el Object ID del usuario o service principal, que puedes encontrar en Azure Portal:
Para usuarios: Azure Active Directory > Users > [seleccionar usuario] > Object ID
Para service principals: Azure Active Directory > Enterprise applications > [seleccionar aplicación] > Object ID

Listar Workspaces eliminados
Antes de restaurar, puede ser útil obtener una lista de todos los workspaces eliminados disponibles. Aquí te muestro cómo hacerlo:
def list_deleted_workspaces():
"""
Lista los workspaces eliminados disponibles para restauración
"""
url = "https://api.fabric.microsoft.com/v1/admin/workspaces"
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
# Filtrar workspaces eliminados
params = {
"state": "Deleted"
}
try:
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
workspaces = response.json()
print(f"Se encontraron {len(workspaces.get('value', []))} workspaces eliminados:")
for ws in workspaces.get('value', []):
print(f" - {ws.get('displayName')} (ID: {ws.get('id')})")
return workspaces
else:
print(f"Error al listar workspaces: {response.status_code}")
return None
except Exception as e:
print(f"Excepción: {e}")
return None
Esta función te permite:
Ver todos los workspaces que pueden ser restaurados
Obtener los IDs necesarios para la restauración
Verificar el nombre original del workspace antes de restaurarlo
Es especialmente útil cuando no recuerdas el ID exacto del workspace que necesitas recuperar.

Llamada a la API
import requests
WORKSPACE_ID = "000xxx-xxxx-xxxx-xxxx-xxx000"
NEW_WORKSPACE_NAME = "Workspace Restored"
NEW_ADMIN_ID = "000xxx-xxxx-xxxx-xxxx-xxx000"
PRINCIPAL_TYPE = "User"
url = f"https://api.fabric.microsoft.com/v1/admin/workspaces/{WORKSPACE_ID}/restore"
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
body = {
"newWorkspaceName": NEW_WORKSPACE_NAME,
"newWorkspaceAdminPrincipal": {
"id": NEW_ADMIN_ID,
"type": PRINCIPAL_TYPE
}
}
response = requests.post(url, headers=headers, json=body)
Importante: La restauración del workspace no solo recupera el contenedor, sino también todos los artefactos que contenía en el momento de su eliminación (notebooks, lakehouses, pipelines, datasets, etc.). El usuario o service principal especificado en newWorkspaceAdminPrincipal se convertirá automáticamente en el administrador del workspace restaurado, con permisos completos sobre él y todos sus artefactos.


Solución completa
He preparado un notebook completo que encapsula toda esta funcionalidad en funciones reutilizables. El código incluye:
Autenticación automática con manejo de errores
Función
list_deleted_workspaces()para listar workspaces disponibles para restauraciónFunción
restore_workspace()parametrizable y reutilizableValidación de respuestas con mensajes descriptivos
Logging detallado para depuración
Documentación inline con todos los detalles importantes
El flujo de trabajo típico sería:
Ejecutar
list_deleted_workspaces()para ver qué workspaces están disponiblesIdentificar el workspace que necesitas restaurar
Copiar su ID y ejecutar
restore_workspace()con los parámetros apropiados
Puedes encontrar el código completo en mi GitHub: notebook
Casos de Uso Prácticos
Esta solución es especialmente útil en varios escenarios:
Recuperación de emergencia: Restaurar workspaces eliminados accidentalmente por error humano
Automatización: Integrar en pipelines de governance que detecten y restauren workspaces críticos
Migraciones: Crear scripts de recuperación masiva durante reorganizaciones de tenant
Testing: Eliminar y restaurar workspaces en entornos de desarrollo de forma programática
Limitaciones y Consideraciones
Ten en cuenta estas limitaciones de la API:
Estado de preview: Esta API está en preview y puede cambiar
Rate limiting: Máximo 10 peticiones por minuto
Ventana de recuperación: Los workspaces eliminados solo están disponibles durante un período limitado
Permisos requeridos: Solo usuarios con rol de Fabric Administrator pueden ejecutar esta operación


