Geautomatiseerd data binnenhalen met API calls middels een Python script in Azure Functions

Ben je op zoek naar het bouwen van een near real-time dashboard dat naadloos integreert met Azure-services?

In de vorige post heb ik een script gedeeld om middels Power Query API calls te doen en zo automatisch data binnen te halen. In deze post zullen we een simpel Python-script doorlopen dat API calls doet en gebruikmaakt van Azure Functions en Blob-opslag. Deze data is dan vanuit Power BI te benaderen om er vervolgens een dashboard van te maken.

Kennismaking met het Script

Het meegeleverde Python-script is ontworpen om te worden ingezet als een Azure Function. Het wordt elke minuut getriggerd en voert de volgende taken uit:

  1. Haalt nodige omgevingsvariabelen op zoals Azure Storage-accountinformatie, container naam, gebruikersnaam en wachtwoord (uiteindelijk handiger om dit op te slaan in Azure Key Vault i.p.v. in een omgevingsvariabele).
  2. Maakt een API-oproep om de huidige Tenant ID op te halen.
  3. Maakt een DataFrame aan met de Tenant ID.
  4. Converteert de DataFrame naar JSON-formaat.
  5. Maakt een verbinding met Azure Blob-opslag.
  6. Uploadt de JSON-gegevens als een blob naar Azure Blob-opslag.

Belangrijke Componenten en Concepten

  • Azure Functions: Dit zijn serverloze compute oplossingen die worden geleverd door Azure. Ze stellen ontwikkelaars in staat om kleine stukjes code, of “functies”, uit te voeren in reactie op verschillende triggers zonder zich zorgen te hoeven maken over het beheer van de infrastructuur. Oftewel, je hoeft niet de hele tijd je laptop aan te laten staan zodat dit script gedraaid wordt. Azure zorgt ervoor dat er altijd ergens een server beschikbaar is om het script af te trappen volgens een schema dat door jou gedefinieerd is.
  • Azure Blob-opslag: Dit is een van de mogelijke opslag mogelijkheden van Microsoft voor de cloud. Het is ideaal voor het opslaan van grote hoeveelheden ongestructureerde gegevens, zoals tekst- of binaire gegevens.
  • Pandas: Pandas is een krachtige Python-bibliotheek voor gegevensmanipulatie en -analyse. In dit script wordt het gebruikt om een DataFrame te maken met de Tenant ID en vervolgens om te zetten naar JSON.
  • Requests-bibliotheek: Deze bibliotheek maakt eenvoudige HTTP-verzoeken in Python mogelijk. Hier wordt het gebruikt om een API-oproep te maken om de huidige Tenant ID op te halen.

Hoe Het Werkt

Het script maakt gebruik van de tijdgestuurde functionaliteit van Azure Functions en voert de gedefinieerde functie elke minuut uit. Bij uitvoering worden de benodigde referenties opgehaald en wordt een API-call gedaan om de Tenant ID op te halen. Deze ID wordt vervolgens gebruikt om een DataFrame te maken, die wordt geconverteerd naar JSON. Ten slotte worden de JSON-gegevens geüpload naar Azure Blob-opslag.

Conclusie

Door Azure Functions en Blob-opslag te combineren met Python-bibliotheken zoals Pandas en Requests, kun je moeiteloos een near real-time data pijplijn voor je applicaties maken. Dit script dient als een basisstuk voor het bouwen en het onderhouden van up-to-date gegevens in je Azure-omgeving.

Voel je vrij om dit script aan te passen en uit te breiden om aan je specifieke vereisten te voldoen!

Onder de onderstaande screenshot is een kopieerbare versie van het script voor handen.

import os

import logging

import azure.functions as func

import requests

import pandas as pd

from azure.storage.blob import BlockBlobService

app = func.FunctionApp()

# Every minute this script is executed (cron below)

@app.schedule(schedule="0 */1 * * * *", arg_name="myTimer", run_on_startup=True,

              use_monitor=False)

def dashboardshakerfunction(myTimer: func.TimerRequest) -> None:

    if myTimer.past_due:

        logging.info('The timer is past due!')

    logging.info('Python timer trigger function executed.')

# Your Azure Storage account information retrieved from Azure Functions application settings

account_name = os.environ["AzureStorageAccountName"]

account_key = os.environ["AzureStorageAccountKey"]

container_name = os.environ["AzureBlobContainerName"]

username = os.environ["Username"]

password = os.environ["Password"]

# API call to get Tenant ID

api_url_tenant = "https://app.someurl.com/api/v2/tenants/current"

tenant_id_call = requests.get(api_url_tenant, auth=(username, password))

tenant_id = tenant_id_call.json().get('id')

# Naming the Blob

blob_name = f'tenant_{tenant_id}.json'

# Create a DataFrame with a single row and a single column

df_tenant = pd.DataFrame({'TenantID': [tenant_id]})

# Convert DataFrame to JSON

json_data = df_tenant.to_json()

# Create a connection to Azure Storage

block_blob_service = BlockBlobService(account_name=account_name, account_key=account_key)

# Upload JSON data to Azure Blob Storage

block_blob_service.create_blob_from_text(container_name, blob_name, json_data)

print(f"JSON data uploaded to Azure Blob Storage: {blob_name}")

Leave Comment

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *