Zum Inhalt

Subscription Billing Export

Ein Kostenreport braucht die Kostendaten jeder subscription an einem Ort. Diese Seite beschreibt eine pipeline, die für jede subscription unterhalb einer management group einen Billing Export konfiguriert und startet und die Daten in einen zentralen Data-Lake-Storage-Account schreibt. Eine Reporting-Lösung kann sie dann lesen, zum Beispiel eine Data-Factory-pipeline, die sie in ein Kosten-Dashboard lädt.

Für workload-Teams reichen die Kostenansichten im Portal (Kosten und Reservierungen). Dieser Export ist für zentrales Reporting durch das Plattform-Team, FinOps oder Finance gedacht.

Herkunft dieser Seite

Die pipeline und das Skript stammen aus dem spoke canvas früherer Versionen. Namen von Dateien, Repositorys und Variable Groups sind die der Starter-Dateien. Prüfe, was deine Code-Version mitliefert.

Was sie macht

Azure führt einen Subscription-Export zu einem Zeitpunkt aus, den es selbst wählt, irgendwann im Lauf des Tages. Exporte verschiedener subscriptions kommen dann zu unterschiedlichen Zeiten an, und das Reporting zeigt veraltete oder nicht vergleichbare Daten. Die pipeline macht zwei Dinge:

  • Konfigurieren. Sie durchsucht alle subscriptions unterhalb einer management group (rekursiv) und erstellt in jeder die Export-Definition.
  • Ausführen. Sie startet die bestehenden Exporte zu einer festen Zeit. Die Exporte werden immer noch nicht in derselben Sekunde fertig, aber innerhalb eines viel kleineren Zeitfensters.

Die Export-Einstellungen sind:

Einstellung Wert
Format Parquet, weil es komprimiert ist und gut mit Azure Data Factory funktioniert, dem nächsten Schritt im Prozess
Kompression Snappy
Granularität Eine tägliche Zusammenfassung
Überschreibverhalten Jeden Tag wird dieselbe Datei mit allen Daten des Monats erneut geschrieben
Zeitraum Ein Monat. In einem neuen Monat beginnt eine neue Datei.
flowchart LR
    p["Billing export pipeline<br/>(daily, fixed time)"] -->|"configure and start export"| s["Subscriptions below the<br/>landing zone management group"]
    s -->|"export to container billingdata"| d["Data lake storage account"]
    d --> r["Reporting solution<br/>(for example Data Factory, at a later time)"]

Voraussetzungen

Data-Lake-Storage-Account

  1. Erstelle einen Storage Account mit aktiviertem hierarchischen Namespace.
  2. Erstelle einen Container billingdata.
  3. Gib der Identität, die die pipeline ausführt, die Rolle Storage Blob Data Contributor.
  4. Gib der Identität der Reporting-pipeline (zum Beispiel der Managed Identity der Data Factory) dieselbe Rolle.

Skript und pipeline

Datei Wo Anmerkung
BillingexportConfiguration.ps1 Ordner Scripts des Code-Repositorys Teil der Plattform. Die pipeline checkt es aus.
BillingexportConfiguration.yaml Ordner pipelines des Konfigurations-Repositorys Starter-Datei. Setze ihre Parameter.

Die pipeline-Datei konfigurieren

Zeitplan. Führe die pipeline aus, bevor die Reporting-Lösung die Daten einliest. Wenn das Einlesen um 04:00 läuft, führe den Export am Abend aus, zum Beispiel um 22:00 Ortszeit. Der Zeitplan ist in UTC, rechne die Zeit also um (zum Beispiel 0 20 * * * für 22:00 in einer Zeitzone mit Sommerzeit und UTC+2).

Parameter (dieselben Namen für die pipeline und das Skript):

Parameter Typ Bedeutung Default oder Beispiel
DoConfigureExports boolean Die Export-Definitionen erstellen oder aktualisieren Pipeline: true. Skript-Default: $false
DoRunExport boolean Die bestehenden Exporte starten Pipeline: true. Skript-Default: $false
DoShowNextRunTimeEstimate boolean Anzeigen, wann die nächsten automatischen Exporte laufen false in der pipeline, $true im Skript
StartManagementGroupName string Oberste management group, ab der rekursiv nach subscriptions gesucht wird <landing-zone-management-group>
DataLakeStorageAccountResourceId string Resource-ID des Data-Lake-Storage-Accounts /subscriptions/<subscription-id>/resourceGroups/<rg>/providers/Microsoft.Storage/storageAccounts/<name>
DataLakeStorageContainerName string Container für die Daten billingdata
DataLakeFolderNamePrefix string Ordner-Präfix. Die subscription-ID wird angehängt. subscription-
ExportJobNamePrefix string Präfix des Export-Namens in der Billing-Konfiguration exportprd_
SkipTheseSubscriptions string array Subscriptions, die keinen Export bekommen @("<subscription-id>", "<subscription-id>")

Das Skript nimmt außerdem TenantId entgegen (der Tenant, der die management group enthält).

Variable Group. Die pipeline nutzt dieselbe Variable Group wie das spoke-Deployment.

Code-Repository. Wie die anderen pipelines des spoke canvas checkt sie das Code-Repository bei einem Versions-Tag aus:

resources:
  repositories:
    - repository: spokedeployment-tf
      type: git
      name: "<project>/<code-repository>"
      ref: refs/tags/<version>      # update when a new code version is deployed

Betrieb

  • Führe die pipeline einmal von Hand aus und autorisiere den Pool und die Gruppe, wie bei den anderen pipelines.
  • Eine neue subscription bekommt ihren Export beim nächsten Lauf der pipeline mit DoConfigureExports auf true. Die Daten einer subscription liegen im Container in einem Ordner subscription-<subscription-id>.
  • Prüfe den Lauf im wöchentlichen pipeline-Status (Wartungskalender). Ein fehlgeschlagener Lauf bedeutet eine Lücke im Kostenreport.
  • Eine subscription, die nicht exportiert werden soll, kommt in SkipTheseSubscriptions.