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:
- 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).
- Maakt een API-oproep om de huidige Tenant ID op te halen.
- Maakt een DataFrame aan met de Tenant ID.
- Converteert de DataFrame naar JSON-formaat.
- Maakt een verbinding met Azure Blob-opslag.
- 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}")