Ejecuta Pipelines a demanda

Author Image

Brian Estévez LinkedIn

Blog

En el mundo de la gestión de datos y el análisis, la capacidad de ejecutar pipelines por parte de los usuarios finales de manera dinámica y bajo demanda, a veces, es imperativo. La API de Microsoft Fabric proporciona la posibilidad de lograr esto, permitiendo a los desarrolladores integrar la ejecución de pipelines directamente en sus aplicaciones. Para todos aquellos que estén trasteando con Microsoft Fabric aquí les va, espero, una pequeña ayuda. 🚀🚀

Paso 1: Registrar una aplicación en el Centro de Administración Microsoft Entra

Registrar Service Principal

Ver Service Principal

Paso 2: Copiar el Client ID

Service Principal Copy

Paso 3: Montar el código de prueba, que te dejo a continuación (Está realizado en C#)


// Parámetros de configuración
string ClientId = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
string Authority = "https://login.microsoftonline.com/organizations";
string RedirectUri = "http://localhost";

// Scopes
string[] scopes = new string[] {
    "https://api.fabric.microsoft.com/Workspace.ReadWrite.All",
    "https://api.fabric.microsoft.com/Item.ReadWrite.All",
    "https://api.fabric.microsoft.com/Item.Execute.All",
    "https://api.fabric.microsoft.com/Notebook.ReadWrite.All",
    "https://api.fabric.microsoft.com/Notebook.Execute.All" };

try
{
    // Crear instancia
    var PublicClientAppBuilder = PublicClientApplicationBuilder.Create(ClientId)
        .WithAuthority(Authority)
        .WithRedirectUri(RedirectUri);

    var PublicClientApp = PublicClientAppBuilder.Build();

    // Intentamos adquirir un token
    AuthenticationResult result = await PublicClientApp.AcquireTokenInteractive(scopes)
        .ExecuteAsync()
        .ConfigureAwait(false);

    // Imprimimos el token de acceso, simplemente para ver que todo está correcto
    Console.WriteLine("Token de acceso: " + result.AccessToken);

    // Crear cliente HTTP
    var client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);

    string baseUrl = "https://api.fabric.microsoft.com/v1/";

    // Definir el objeto que se enviará en el cuerpo de la solicitud POST (si es necesario)
    string postData = "{\"Key1\":\"Value1\",\"Key2\":\"Value2\"}"; // Ejemplo de cuerpo de la solicitud

    // Realizar la llamada a la API para enviar una solicitud POST
    var response = await client.PostAsync(baseUrl + "workspaces/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/items/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/jobs/instances?jobType=pipeline",
        new StringContent(postData, System.Text.Encoding.UTF8, "application/json"));

    string responseBody = await response.Content.ReadAsStringAsync();
    Console.WriteLine(responseBody);
}
catch (MsalException ex)
{
    Console.WriteLine($"Error al adquirir el token: {ex.Message}");
}

// Para que no se cierre la consola y se pueda comprobar la impresión del Token
Console.WriteLine("Presiona cualquier tecla para salir...");
Console.ReadKey();

Recuerda cambiar el Workspace ID y el Item ID del Pipeline. Espero que te sirva.