Programa el encendido y apagado de tu capacidad en Microsoft Fabric

Si decides utilizar Microsoft Fabric, es importante determinar si necesitas mantener una capacidad encendida para proyectos que no requieren uso continuo. En este artículo, te mostramos cómo programar el encendido y apagado de una capacidad de Microsoft Fabric al terminar tu proceso en una canalización (pipeline) y qué implica apagar una capacidad.
Vamos a ver cómo utilizar una cuenta de automatización y programar un runbook de python para que se encargue de apagar o encender la capacidad de Microsoft Fabric.
Requisitos
- Acceso con permisos de administrador o colaborador en una suscripción de Azure.
- Una capacidad de Microsoft Fabric (en este caso, una F2).
- Un área de trabajo asociada a una capacidad de Microsoft Fabric.
Creación de un rol para ejecutar
Este paso es opcional pero recomendable y necesitas tener permisos para crear roles o ser administrador. Primero, ve a Suscripciones y elige la suscripción donde pertenece la capacidad de Fabric.

Como nombre: Rol para administrar capacidades Fabric

A continuación, vamos directamente al apartado JSON y pulsamos el botón de la derecha editar.
En el apartado JSON, edita y sustituye los valores dentro de la clave actions:
"actions": [ "Microsoft.Fabric/capacities/suspend/action", "Microsoft.Fabric/capacities/resume/action", "Microsoft.Fabric/capacities/skus/read" ]
Pulsa Revisar y crear. Con esto ya tienes un rol para asignar a la identidad creada por la cuenta de automatización.
Crear una Cuenta de Automatización
En la documentación oficial de Microsoft es posible ver los pasos, aquí los vamos a resumir y dirigir directamente al proceso, pero se recomienda entender bien el servicio con una lectura más amplia:
Creación de una cuenta independiente de Azure Automation | Microsoft Learn
Buscamos cuentas de automatización

Crea una nueva, asignando el grupo de recursos, nombre y región. Asigna por defecto la identidad administrada por sistema. En redes, deja el acceso público por defecto, revisa etiquetas si procede y pulsa Crear.


Asignar el rol con permisos a la cuenta de automatización
Vamos a asignar el rol creado previamente a la cuenta de automatización. Si decidiste no crear el rol, puedes usar el de colaborador (no recomendable) con los permisos necesarios.
Dentro de la suscripción, ve a Agregar asignación de roles. Elige el rol creado o, si no lo está, asigna el rol de colaborador desde Roles de administrador con privilegios. En Identidades administradas, busca la cuenta de automatización creada.
Configuración de la cuenta de automatización
Ve a automatización de procesos y en runbook pulsa examinar galería.

Selecciona el runbook de python disponible filtrando por la palabra fabric.

Crea una programación
Para crear una programación diaria que encienda la capacidad puedes ir a la sección de recursos > programas. Esta configuración es sencilla, primero debes configurar la hora de ejecución y la periodicidad.
Para la segunda configuración , será necesario pasar los tres parámetros que te pide el runbook que hemos instalado.
En este caso debes buscar el id del recurso de tu capacidad de azure, para ellos puedes ir a la capacidad de Microsoft Fabric y en propiedades buscar el Id del recurso asociado. Como segundo parámetro poner resume o suspend, dependiendo de lo que quieres hacer con la capacidad.
Por último debes poner el tipo de capacidad que tienes, en este caso, he puesto la básica, F2.

Con esto ya tienes una tarea programada para encender la capacidad y podrías configurar una segunda programación para apagarla en caso de que quieras, por ejemplo tenerla en funcionamiento solo por una franja horaria en concreto y no 24 horas.
Apagar la capacidad desde una canalización (Pipeline) de Data Factory
En caso de que requieras apagar la capacidad después de un proceso ETL puedes agregar un weebhook para crear un endpoint que sea ejecutable desde el exterior, en este caso desde la actividad web de Data Factory.
Sin embargo, ten en cuenta que, una vez apagada la capacidad, no podrás utilizar ningún elemento del área de trabajo asociado. A menos que ya tengas el modelo semántico actualizado en modo import y en otra área de trabajo que no esté conectada a la capacidad, no podrás usar los reportes asociados. Para estos casos puedes actualizar el modelo semántico previamente al apagado de la capacidad.
Lo primero que debemos hacer es modificar ligeramente el script de python:
#!/usr/bin/env python3
# use this to suspend like `python3 manage_fabric_capacity.py /subscriptions/12345678-1234-1234-1234-123a12b12d1c/resourceGroups/fabric-rg/providers/Microsoft.Fabric/capacities/myf2capacity suspend`
# use this to resume like `python3 manage_fabric_capacity.py /subscriptions/12345678-1234-1234-1234-123a12b12d1c/resourceGroups/fabric-rg/providers/Microsoft.Fabric/capacities/myf2capacity resume`
# use this to scale like `python3 manage_fabric_capacity.py /subscriptions/12345678-1234-1234-1234-123a12b12d1c/resourceGroups/fabric-rg/providers/Microsoft.Fabric/capacities/myf2capacity scale F4`
import argparse
import os
import sys
import json
import requests
# Check if the script is invoked with webhook data
if len(sys.argv) > 1 and "WebhookName" in sys.argv[1]:
resource_id = sys.argv[4].strip('",rn')
operation = sys.argv[5].strip('",rn')
sku = sys.argv[6].strip('",rn') if len(sys.argv) > 6 else None
else:
# Process command line arguments
parser = argparse.ArgumentParser()
parser.add_argument("resource_id", help="The resource id of the capacity to change, e.g. /subscriptions/12345678-1234-1234-1234-123a12b12d1c/resourceGroups/fabric-rg/providers/Microsoft.Fabric/capacities/myf2capacity")
parser.add_argument("operation", choices=["suspend", "resume", "scale"], help="The operation to perform, either suspend, resume or scale")
parser.add_argument("sku", choices=[f"F{2**i}" for i in range(1, 12)], nargs="?", help="The sku to scale to, e.g. F4")
args = parser.parse_args()
resource_id = args.resource_id
operation = args.operation
sku = args.sku
if not resource_id or not operation:
print("Missing required parameters")
sys.exit(1)
# Authenticate and get token
if os.getenv('IDENTITY_ENDPOINT'):
# using managed identity
endPoint = os.getenv('IDENTITY_ENDPOINT')+"?resource=https://management.azure.com/"
identityHeader = os.getenv('IDENTITY_HEADER')
payload={}
headers = {
'X-IDENTITY-HEADER': identityHeader,
'Metadata': 'True'
}
response = requests.request("GET", endPoint, headers=headers, data=payload)
response.raise_for_status()
token = response.json()["access_token"]
else:
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
token = credential.get_token("https://management.azure.com/").token
base_url = f"https://management.azure.com{resource_id}"
# Perform the operation
if operation == "scale" and sku:
url = f"{base_url}?api-version=2022-07-01-preview"
print(f"INFO: Scaling {url} to {sku}")
payload = {"sku": {"name": sku, "tier": "Fabric"}}
response = requests.patch(url, headers={'Content-Type': 'application/json', "Authorization": f"Bearer {token}"}, json=payload)
response.raise_for_status()
else:
url = f"{base_url}/{operation}?api-version=2022-07-01-preview"
print(f"INFO: Calling {url}")
response = requests.post(url, headers={'Content-Type': 'application/json', "Authorization": f"Bearer {token}"})
if not response.ok and response.json().get("error", {}).get("message") == 'Service is not ready to be updated':
print(f"WARN: Service is not ready to be updated, probably it is already in desired state: {operation}")
else:
response.raise_for_status()
Agrega un WebHook

Configura la actividad web de data factory
Crear una actividad web y utiliza el enlace creado en tu webhook, si te fijas en la url viene un parámetro token, para este ejemplo lo dejamos en la url pero es recomendable guardarlo en key vault por seguridad.
Crea la conexión con esta URL y conexión anónima, utiliza esta conexión y en el body pon json con el siguiente formato:
{
"parameters": [
"Id_de_tu_capacidad",
"suspend",
"F2"
]
}
Configura un tiempo de timeout normalmente con 2 minutos sería necesario, para este ejemplo no incluyo la url callback necesaria para obtener la respuesta del webhook enviada desde el body.

Con esto puedes utilizar una actividad para apagar tu capacidad cuando actualices el modelo semántico de tu área de trabajo.

¡Importante! Os recordamos que realizar esta acción desde la propia área de trabajo implica no conocer el resultado final del proceso una vez que la capacidad se detenga. En caso de que el resultado no sea el esperado, lo ideal sería contar con un sistema de notificación de errores externo. Así, si vuestra capacidad continúa activa, podréis adaptar la implementación a una estrategia más robusta con herramientas como Data Factory.
Conclusiones
Hemos explorado la posibilidad de programar el encendido y apagado de una capacidad Fabric, aplicable también al escalado.
Es crucial considerar que, si la capacidad está apagada, no podrás trabajar con un reporte conectado a un modelo semántico dentro del área de trabajo. Por lo tanto, deberás tener el modelo en modo importado y conectado a tu Lakehouse, actualizando el modelo semántico antes de apagar la capacidad.
El script de Python presentado ha sido ligeramente modificado como ejemplo, sin optimizaciones adicionales. Se recomienda revisar y mejorar el código según las necesidades específicas de tu proyecto. También es posible crear un código más personalizado y ejecutarlo desde otro servicio cómo una tarea programada de Windows y o hacer llamadas directamente a la API de Fabric, este método ahorra un poco de tiempo técnico y es administrado por servicios de Azure.
En cuanto a la seguridad, aunque está estandarizada, es recomendable utilizar Azure Key Vault para evitar almacenar la URL completa y el token en la actividad. Esto proporciona una capa adicional de protección para tus credenciales y datos sensibles.
Este enfoque puede variar según las necesidades, especialmente si tu cliente requiere acceso constante a los recursos de Fabric, debido a las limitaciones con la capacidad apagada. Está más dirigido a proyectos pequeños y puntuales que pueden beneficiarse de las prestaciones de los servicios de Fabric sin necesidad de acceso continuo. También sería necesario pensar en una estrategia de registro de errores y comunicación en caso de que tu capacidad no se comporte como esperabas, nosotros podemos ayudarte con la estrategia que necesites.
En general, la programación del encendido y apagado de la capacidad es una estrategia viable que puede encajar dependiendo de la empresa y sus necesidades, optimizando recursos y reduciendo costos en proyectos que no requieren uso constante de la capacidad.
¿Necesitas una estrategia acorde a tu medida con Microsoft Fabric?
Si quieres conocer más acerca de Fabric, puedes ponerte en contacto con nosotros. Somos una empresa consultora Partner de Microsoft especializada en Servicios de Data & AI.
Por nuestra parte mantente alerta a nuestras próximas publicaciones a través de LinkedIn sobre Microsoft Fabric y tecnología orientada a datos.