Azure Data Factory Series: Invoke ADF Pipeline from App Service with User-Assigned Managed Identity

Watch the step by step implementation as a You tube Video.

Step 1: Create an Azure App Service (Web App)

  1. Go to Azure Portal → Search for “App Services” → Click “Create”.
  2. Choose Subscription and Resource Group (or create a new one).
  3. Set the following values:
    • Name: my-adf-web-app
    • Publish: Code
    • Runtime Stack: .NET 8 (or any preferred language)
    • Operating System: Windows or Linux
    • Region: Choose a region close to your resources.
    • Plan: Choose a basic plan (B1) for testing.
  4. Click Review + Create → Click Create.

Step 2: Enable Managed Identity for Web App

  1. In Azure Portal, go to App Services → Select my-adf-web-app.
  2. Click on Identity under Settings.
  3. Under User Assigned, toggle the switch to On.
  4. Click Save, and copy the Client ID (you’ll need it later).

Step 3: Grant Permissions to Managed Identity on ADF

  1. Go to Azure Data Factory in the Azure Portal.
  2. Click on Access Control (IAM) → Click Add Role Assignment.
  3. Select:
    • Role: Data Factory Contributor (or Data Factory Operator for limited access).
    • Assign Access To: Managed Identity.
    • Select Members: Choose your Web App (my-adf-web-app).
  4. Click Save.

Step 4: Write Code in Azure App Service to Call ADF Pipeline

Use the following C# code inside your Web App to invoke the ADF pipeline using Managed Identity.

C# Code (ASP.NET Core)

using Microsoft.AspNetCore.Mvc;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.DataFactory;
using System.Threading.Tasks;
using System.Collections.Generic;
using System;

[Route("JB/[controller]")]
[ApiController]
public class ADFController : ControllerBase
{
    private readonly ArmClient _armClient;
    private readonly string _subscriptionId = "xxxx-xxxxx-xxxxx-xxxxx";
    private readonly string _resourceGroupName = "jbadf";
    private readonly string _dataFactoryName = "jbadfapp";
    private readonly string _pipelineName = "jb_Copydata";

    public ADFController()
    {
        // Set the Client ID of the User-Assigned Managed Identity (UMI)
        var userAssignedClientId = "xxxx-xxxxx-xxxxx-xxxxx"; // Replace this with actual Client ID

        var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions
        {
            ManagedIdentityClientId = userAssignedClientId
        });

        _armClient = new ArmClient(credential);
    }

    [HttpGet("CuriousBoy")]
    public async Task<IActionResult> TriggerPipeline()
    {
        try
        {
            // Construct the pipeline resource ID
            var pipelineResourceId = DataFactoryPipelineResource.CreateResourceIdentifier(
                _subscriptionId, _resourceGroupName, _dataFactoryName, _pipelineName);

            // Get the pipeline resource
            var pipelineResource = _armClient.GetDataFactoryPipelineResource(pipelineResourceId);

            // Define pipeline parameters (if required)
            var parameters = new Dictionary<string, BinaryData>
            {
                // Example: If your pipeline requires parameters, add them here.
                // { "param1", BinaryData.FromString("value1") },
                // { "param2", BinaryData.FromString("value2") }
            };

            // Trigger the pipeline run
            var runResponse = await pipelineResource.CreateRunAsync(parameters);

            return Ok($"ADF Pipeline triggered successfully on {DateTime.UtcNow}");
        }
        catch (Exception ex)
        {
            return StatusCode(500, $"Error triggering ADF pipeline: {ex.Message}");
        }
    }
}

Step 5: Deploy the Code to Azure App Service

  1. In Visual Studio, create an ASP.NET Core Web API project.
  2. Copy the above C# code into your Controller or Service.
  3. Deploy your code to Azure App Service using:
    • Right-click on the projectPublishAzure App Service.

Step 6: Test the Web App

  1. Navigate to https://my-adf-web-app.azurewebsites.net.
  2. Trigger the endpoint that executes the above code.
  3. Your ADF pipeline should now run successfully!

This is the simplest way to invoke an ADF pipeline from Azure App Services using Managed Identity.

Possible Errors Expected,

Error triggering ADF pipeline: DefaultAzureCredential failed to retrieve a token from the included credentials. See the troubleshooting guide for more information. https://aka.ms/azsdk/net/identity/defaultazurecredential/troubleshoot

  • EnvironmentCredential authentication unavailable. Environment variables are not fully configured. See the troubleshooting guide for more information. https://aka.ms/azsdk/net/identity/environmentcredential/troubleshoot
  • WorkloadIdentityCredential authentication unavailable. The workload options are not fully configured. See the troubleshooting guide for more information. https://aka.ms/azsdk/net/identity/workloadidentitycredential/troubleshoot
  • ManagedIdentityCredential authentication unavailable. No response received from the managed identity endpoint.
  • VisualStudioCredential authentication failed: Visual Studio Token provider can’t be accessed at D:DWASFilesSitesJBAPPLocalAppData.IdentityServiceAzureServiceAuthtokenprovider.json
  • AzureCliCredential authentication failed: Azure CLI not installed
  • AzurePowerShellCredential authentication failed: Az.Accounts module >= 2.2.0 is not installed.
  • AzureDeveloperCliCredential authentication failed: Azure Developer CLI could not be found.

Error triggering ADF pipeline: The client ’66a2225c-f1b5-439b-b375-78ae2b744f2f’ with object id ’66a2225c-f1b5-439b-b375-78ae2b744f2f’ does not have authorization to perform action ‘Microsoft.DataFactory/factories/pipelines/createRun/action’ over scope ‘/subscriptions/xxxx-xxxx-xxxx/resourceGroups/jbadf/providers/Microsoft.DataFactory/factories/jbadfapp/pipelines/jb_Copydata’ or the scope is invalid. If access was recently granted, please refresh your credentials.
Status: 403 (Forbidden)
ErrorCode: AuthorizationFailed

Content:
{“error”:{“code”:”AuthorizationFailed”,”message”:”The client ’66a2225c-f1b5-439b-b375-78ae2b744f2f’ with object id ’66a2225c-f1b5-439b-b375-78ae2b744f2f’ does not have authorization to perform action ‘Microsoft.DataFactory/factories/pipelines/createRun/action’ over scope ‘/subscriptions/xxxx-xxxx-xxxx/resourceGroups/jbadf/providers/Microsoft.DataFactory/factories/jbadfapp/pipelines/jb_Copydata’ or the scope is invalid. If access was recently granted, please refresh your credentials.”}}

Headers:
Cache-Control: no-cache
Pragma: no-cache
x-ms-failure-cause: REDACTED
x-ms-request-id: 896c9766-5ee3-4dbb-b3b6-71800e2ee564
x-ms-correlation-request-id: REDACTED
x-ms-routing-request-id: REDACTED
Strict-Transport-Security: REDACTED
X-Content-Type-Options: REDACTED
X-Cache: REDACTED
X-MSEdge-Ref: REDACTED
Date: Tue, 18 Feb 2025 08:23:20 GMT
Content-Length: 512
Content-Type: application/json; charset=utf-8
Expires: -1

Thank You,
Vivek Janakiraman

Disclaimer:
The views expressed on this blog are mine alone and do not reflect the views of my company or anyone else. All postings on this blog are provided “AS IS” with no warranties, and confers no rights.



Azure Data Factory Series: Invoking ADF Pipelines Securely with Managed Identity

Watch the step by step implementation as a You tube Video.

Step 1: Create an Azure App Service (Web App)

  1. Go to Azure Portal → Search for “App Services” → Click “Create”.
  2. Choose Subscription and Resource Group (or create a new one).
  3. Set the following values:
    • Name: my-adf-web-app
    • Publish: Code
    • Runtime Stack: .NET 8 (or any preferred language)
    • Operating System: Windows or Linux
    • Region: Choose a region close to your resources.
    • Plan: Choose a basic plan (B1) for testing.
  4. Click Review + Create → Click Create.

Step 2: Enable Managed Identity for Web App

  1. In Azure Portal, go to App Services → Select my-adf-web-app.
  2. Click on Identity under Settings.
  3. Under System Assigned, toggle the switch to On.
  4. Click Save, and copy the Object ID (you’ll need it later).

Step 3: Grant Permissions to Managed Identity on ADF

  1. Go to Azure Data Factory in the Azure Portal.
  2. Click on Access Control (IAM) → Click Add Role Assignment.
  3. Select:
    • Role: Data Factory Contributor (or Data Factory Operator for limited access).
    • Assign Access To: Managed Identity.
    • Select Members: Choose your Web App (my-adf-web-app).
  4. Click Save.

Step 4: Write Code in Azure App Service to Call ADF Pipeline

Use the following C# code inside your Web App to invoke the ADF pipeline using Managed Identity.

C# Code (ASP.NET Core)

using Microsoft.AspNetCore.Mvc;
using Azure.Identity;
using System.Net.Http;
using System.Threading.Tasks;
using Azure.Core;

[Route("api/[controller]")]
[ApiController]
public class ADFController : ControllerBase
{
    private readonly HttpClient _httpClient;
    private readonly string _adfPipelineUrl = "https://management.azure.com/subscriptions/xxxx-xxxx-xxx-xxx/resourceGroups/jbadf/providers/Microsoft.DataFactory/factories/jbadfapp/pipelines/jb_Copydata/createRun?api-version=2018-06-01";

    public ADFController()
    {
        _httpClient = new HttpClient();
    }

    [HttpGet("trigger")]
    public async Task<IActionResult> TriggerPipeline()
    {
        var credential = new DefaultAzureCredential();
        var token = await credential.GetTokenAsync(new TokenRequestContext(new[] { "https://management.azure.com/.default" }));

        _httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {token.Token}");

        var response = await _httpClient.PostAsync(_adfPipelineUrl, null);

        if (response.IsSuccessStatusCode)
        {
            return Ok("ADF Pipeline triggered successfully.");
        }
        return StatusCode((int)response.StatusCode, "Failed to trigger pipeline.");
    }
}

Step 5: Deploy the Code to Azure App Service

  1. In Visual Studio, create an ASP.NET Core Web API project.
  2. Copy the above C# code into your Controller or Service.
  3. Deploy your code to Azure App Service using:
    • Right-click on the projectPublishAzure App Service.

Step 6: Test the Web App

  1. Navigate to https://my-adf-web-app.azurewebsites.net.
  2. Trigger the endpoint that executes the above code.
  3. Your ADF pipeline should now run successfully!

This is the simplest way to invoke an ADF pipeline from Azure App Services using Managed Identity.

Possible Errors Expected,

Error triggering ADF pipeline: DefaultAzureCredential failed to retrieve a token from the included credentials. See the troubleshooting guide for more information. https://aka.ms/azsdk/net/identity/defaultazurecredential/troubleshoot

  • EnvironmentCredential authentication unavailable. Environment variables are not fully configured. See the troubleshooting guide for more information. https://aka.ms/azsdk/net/identity/environmentcredential/troubleshoot
  • WorkloadIdentityCredential authentication unavailable. The workload options are not fully configured. See the troubleshooting guide for more information. https://aka.ms/azsdk/net/identity/workloadidentitycredential/troubleshoot
  • ManagedIdentityCredential authentication unavailable. No response received from the managed identity endpoint.
  • VisualStudioCredential authentication failed: Visual Studio Token provider can’t be accessed at D:DWASFilesSitesJBAPPLocalAppData.IdentityServiceAzureServiceAuthtokenprovider.json
  • AzureCliCredential authentication failed: Azure CLI not installed
  • AzurePowerShellCredential authentication failed: Az.Accounts module >= 2.2.0 is not installed.
  • AzureDeveloperCliCredential authentication failed: Azure Developer CLI could not be found.

Error triggering ADF pipeline: The client ’66a2225c-f1b5-439b-b375-78ae2b744f2f’ with object id ’66a2225c-f1b5-439b-b375-78ae2b744f2f’ does not have authorization to perform action ‘Microsoft.DataFactory/factories/pipelines/createRun/action’ over scope ‘/subscriptions/xxxx-xxxx-xxxx/resourceGroups/jbadf/providers/Microsoft.DataFactory/factories/jbadfapp/pipelines/jb_Copydata’ or the scope is invalid. If access was recently granted, please refresh your credentials.
Status: 403 (Forbidden)
ErrorCode: AuthorizationFailed

Content:
{“error”:{“code”:”AuthorizationFailed”,”message”:”The client ’66a2225c-f1b5-439b-b375-78ae2b744f2f’ with object id ’66a2225c-f1b5-439b-b375-78ae2b744f2f’ does not have authorization to perform action ‘Microsoft.DataFactory/factories/pipelines/createRun/action’ over scope ‘/subscriptions/xxxx-xxxx-xxxx/resourceGroups/jbadf/providers/Microsoft.DataFactory/factories/jbadfapp/pipelines/jb_Copydata’ or the scope is invalid. If access was recently granted, please refresh your credentials.”}}

Headers:
Cache-Control: no-cache
Pragma: no-cache
x-ms-failure-cause: REDACTED
x-ms-request-id: 896c9766-5ee3-4dbb-b3b6-71800e2ee564
x-ms-correlation-request-id: REDACTED
x-ms-routing-request-id: REDACTED
Strict-Transport-Security: REDACTED
X-Content-Type-Options: REDACTED
X-Cache: REDACTED
X-MSEdge-Ref: REDACTED
Date: Tue, 18 Feb 2025 08:23:20 GMT
Content-Length: 512
Content-Type: application/json; charset=utf-8
Expires: -1

Thank You,
Vivek Janakiraman

Disclaimer:
The views expressed on this blog are mine alone and do not reflect the views of my company or anyone else. All postings on this blog are provided “AS IS” with no warranties, and confers no rights.



SQL Server 2022 Enhancements in SQL Server Analysis Services (SSAS)

SQL Server 2022 marks a significant leap forward in the capabilities of SQL Server Analysis Services (SSAS), offering a plethora of enhancements that streamline analytical processing, improve performance, and enhance data modeling capabilities. This detailed exploration will cover these improvements, their technical underpinnings, and how they translate into tangible business benefits, using a retail chain as a practical example.


Business Use Case: Retail Chain Analytics 🏬

Scenario: A large retail chain operates hundreds of outlets across multiple regions, both online and offline. The company utilizes SSAS for comprehensive data analysis, focusing on inventory management, sales performance, customer behavior, and marketing effectiveness. By leveraging SSAS, the company aims to gain actionable insights, optimize operations, and enhance customer engagement.

Challenges: The retail chain faces several challenges, including:

  1. Managing and analyzing vast amounts of data from diverse sources.
  2. Ensuring data freshness and availability for real-time decision-making.
  3. Scaling analytical capabilities to accommodate growing data volumes and user demand.
  4. Securing sensitive customer and sales data in compliance with regulatory standards.

Let’s explore how the new features in SQL Server 2022 SSAS address these challenges and drive business value.


Key Enhancements in SQL Server 2022 SSAS 🚀

1. Improved Tabular Model Performance 🏎️

Technical Details:

  • Optimized Storage Engine: SQL Server 2022 SSAS introduces optimizations in the storage engine, enabling faster data compression and more efficient data retrieval. The improved VertiPaq engine utilizes advanced encoding and compression techniques, reducing memory usage and improving query performance.
  • Parallel Processing: Enhanced support for parallel processing allows for simultaneous data loads and query executions, maximizing CPU utilization and speeding up data refreshes and user queries.

Business Impact:

  • Faster Data Insights: For the retail chain, this means that complex sales and inventory data can be processed more quickly, providing near real-time insights. For instance, the company can analyze daily sales trends across different regions and adjust marketing strategies on the fly.
  • Increased Efficiency: The IT team can optimize data models without compromising performance, allowing for more complex and granular analysis, such as segmenting customers by purchase behavior or analyzing the effectiveness of promotions.

2. Enhanced DirectQuery Performance

Technical Details:

  • Improved Query Optimizer: The DirectQuery mode in SSAS now benefits from an improved query optimizer, which generates more efficient execution plans for complex queries. This reduces the time taken to retrieve data from underlying data sources.
  • Optimized Data Source Connections: SQL Server 2022 SSAS enhances the connectivity with various data sources, including SQL Server, Azure SQL Database, and other databases. This includes better handling of network latency and improved data retrieval efficiency.

Business Impact:

  • Real-Time Analytics: The retail chain can leverage DirectQuery to analyze live data, such as monitoring real-time sales across stores during promotional events. This enables the company to make immediate adjustments, such as reallocating stock to high-demand locations or altering marketing messages.
  • Flexible Reporting: Analysts can create dynamic reports that reflect the most current data, without waiting for data imports or refreshes. This is particularly useful for time-sensitive analyses, like tracking the impact of a sudden market trend or competitor activity.

3. Improved Data Modeling Capabilities 📊

Technical Details:

  • Calculated Tables: SQL Server 2022 SSAS introduces calculated tables, allowing users to define new tables based on DAX expressions. This feature enables more complex data transformations and the creation of intermediate data sets for analysis.
  • Enhanced Hierarchies and Relationships: The updated SSAS supports more complex data relationships and hierarchies, providing greater flexibility in modeling multi-dimensional data. This includes improved support for many-to-many relationships and bi-directional filtering.

Business Impact:

  • Richer Analytical Models: The retail chain can build more sophisticated models that incorporate complex customer relationships, such as analyzing cross-channel purchase behavior (in-store vs. online) or tracking customer loyalty across multiple touchpoints.
  • Custom Calculations: The ability to use calculated tables and advanced DAX expressions allows for custom metrics and KPIs. For example, the company can calculate customer lifetime value (CLV) or assess the impact of a loyalty program on repeat purchases.

4. Scalability Improvements 📈

Technical Details:

  • Memory and Storage Optimization: SQL Server 2022 SSAS introduces enhancements in memory and storage management, including more efficient use of available hardware resources. This allows for larger models and more data to be processed and stored within SSAS.
  • Improved Processing Capabilities: The processing engine has been optimized to handle larger data volumes and more complex calculations, enabling the system to scale effectively as data and user demand grow.

Business Impact:

  • Handling Growing Data Volumes: As the retail chain expands and accumulates more data, SSAS can scale to accommodate this growth. This ensures that performance remains consistent even during peak periods, such as holiday shopping seasons.
  • Supporting More Users: The enhanced scalability allows the system to support a growing number of concurrent users, including analysts, managers, and external partners. This democratizes access to data, fostering a data-driven culture across the organization.

5. Enhanced Security and Compliance 🔒

Technical Details:

  • Role-Based Access Control (RBAC): SSAS in SQL Server 2022 provides more granular control over user permissions, allowing administrators to define roles with specific access rights to data and features within the model.
  • Data Encryption: Support for encryption at rest ensures that sensitive data stored within SSAS models is protected, meeting compliance requirements such as GDPR and CCPA.

Business Impact:

  • Data Security: For the retail chain, safeguarding customer data is paramount. The enhanced security features ensure that only authorized personnel can access sensitive information, reducing the risk of data breaches.
  • Compliance Assurance: By adhering to stringent data protection standards, the company can avoid potential legal and financial penalties, as well as maintain customer trust.

6. Integration with Azure Services ☁️

Technical Details:

  • Azure Synapse Analytics Integration: SQL Server 2022 SSAS can seamlessly integrate with Azure Synapse Analytics, providing a powerful platform for data warehousing and big data analytics. This integration supports hybrid architectures, allowing data to be processed both on-premises and in the cloud.
  • Azure Data Lake and Machine Learning Integration: The integration with Azure Data Lake enables efficient storage and retrieval of large datasets, while Azure Machine Learning integration facilitates the incorporation of machine learning models into analytical workflows.

Business Impact:

  • Advanced Analytics: The retail chain can leverage Azure’s advanced analytics capabilities to perform predictive analysis, such as forecasting sales trends or identifying potential churn risks among customers. These insights can be fed back into SSAS for reporting and decision-making.
  • Hybrid Cloud Flexibility: The ability to integrate with Azure services allows the company to adopt a hybrid cloud strategy, balancing on-premises and cloud resources to optimize costs and performance. This flexibility is crucial for scaling analytics as the business grows.

Conclusion: Empowering Better Decision-Making with SQL Server 2022 SSAS 🎯

SQL Server 2022 SSAS offers an impressive array of enhancements that significantly boost the analytical capabilities of organizations. For the retail chain in our use case, these improvements translate into faster, more accurate insights, enabling the company to respond swiftly to market changes and optimize operations across the board.

The integration with Azure services extends the power of SSAS, offering scalable, advanced analytics solutions that can handle the most demanding data workloads. Whether it’s through real-time data analysis, sophisticated data modeling, or enhanced security measures, SQL Server 2022 SSAS empowers organizations to make data-driven decisions with confidence.

In a data-driven world, staying ahead means leveraging the latest technologies to extract maximum value from your data. SQL Server 2022 SSAS is a key tool in this endeavor, offering unparalleled performance, flexibility, and security. 🌟

Stay tuned for more insights into SQL Server 2022 features and how they can transform your business operations. 🚀

For more tutorials and tips on SQL Server, including performance tuning and database management, be sure to check out our JBSWiki YouTube channel.

Thank You,
Vivek Janakiraman

Disclaimer:
The views expressed on this blog are mine alone and do not reflect the views of my company or anyone else. All postings on this blog are provided “AS IS” with no warranties, and confers no rights.