Ga naar inhoud

Subscription billing export

Voor een kostenrapport zijn de kostendata van elke subscription op één plek nodig. Deze pagina beschrijft een pipeline die een billing export configureert en start voor elke subscription onder een management group, en de data wegschrijft naar een centraal data lake storage account. Een rapportageoplossing kan die daarna lezen, bijvoorbeeld een data factory-pipeline die ze laadt in een kostendashboard.

Voor workload teams volstaan de kostenweergaven in de portal (Kosten en reservations). Deze export is voor centrale rapportage door het platformteam, FinOps of finance.

Herkomst van deze pagina

De pipeline en het script komen uit de spoke canvas van eerdere versies. Namen van bestanden, repositories en variable groups zijn die van de startbestanden. Controleer wat jouw codeversie meelevert.

Wat het doet

Azure draait een subscription-export op een moment dat Azure zelf kiest, ergens op de dag. Exports van verschillende subscriptions komen dan op verschillende tijden binnen, en de rapportage toont verouderde of onvergelijkbare data. De pipeline doet twee dingen:

  • Configureren. Hij scant alle subscriptions onder een management group (recursief) en maakt in elk de exportdefinitie aan.
  • Draaien. Hij start de bestaande exports op een vast tijdstip. De exports zijn nog steeds niet op dezelfde seconde klaar, maar wel binnen een veel kleiner venster.

De exportinstellingen zijn:

Instelling Waarde
Formaat Parquet, omdat het gecomprimeerd is en goed werkt met Azure Data Factory, de volgende stap in het proces
Compressie Snappy
Granulariteit Een dagelijkse samenvatting
Overschrijfgedrag Elke dag wordt hetzelfde bestand opnieuw geschreven met alle data van de maand
Tijdsbestek Een maand. In een nieuwe maand begint een nieuw bestand.
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)"]

Vereisten

Data lake storage account

  1. Maak een storage account aan met hierarchical namespace ingeschakeld.
  2. Maak een container aan, billingdata.
  3. Geef de identiteit die de pipeline draait de rol Storage Blob Data Contributor.
  4. Geef de identiteit van de rapportagepipeline (bijvoorbeeld de managed identity van de data factory) dezelfde rol.

Script en pipeline

Bestand Waar Opmerking
BillingexportConfiguration.ps1 Map Scripts van de coderepository Onderdeel van het platform. De pipeline checkt het uit.
BillingexportConfiguration.yaml Map pipelines van de configuratierepository Startbestand. Stel de parameters in.

Het pipelinebestand configureren

Schema. Draai de pipeline voordat de rapportageoplossing de data inleest. Als het inlezen om 04:00 draait, draai de export dan 's avonds, bijvoorbeeld om 22:00 lokale tijd. Het schema staat in UTC, dus reken de tijd om (bijvoorbeeld 0 20 * * * voor 22:00 in een zomertijdzone met UTC+2).

Parameters (dezelfde namen voor de pipeline en het script):

Parameter Type Betekenis Default of voorbeeld
DoConfigureExports boolean De exportdefinities aanmaken of bijwerken Pipeline: true. Scriptdefault: $false
DoRunExport boolean De bestaande exports starten Pipeline: true. Scriptdefault: $false
DoShowNextRunTimeEstimate boolean Tonen wanneer de volgende automatische exports draaien false in de pipeline, $true in het script
StartManagementGroupName string Hoogste management group van waaruit recursief naar subscriptions wordt gezocht <landing-zone-management-group>
DataLakeStorageAccountResourceId string Resource-ID van het data lake storage account /subscriptions/<subscription-id>/resourceGroups/<rg>/providers/Microsoft.Storage/storageAccounts/<name>
DataLakeStorageContainerName string Container voor de data billingdata
DataLakeFolderNamePrefix string Voorvoegsel van de map. De subscription-ID wordt eraan toegevoegd. subscription-
ExportJobNamePrefix string Voorvoegsel van de exportnaam in de billingconfiguratie exportprd_
SkipTheseSubscriptions string array Subscriptions die geen export krijgen @("<subscription-id>", "<subscription-id>")

Het script neemt ook TenantId (de tenant die de management group bevat).

Variable group. De pipeline gebruikt dezelfde variable group als de spoke-deployment.

Coderepository. Net als de andere pipelines van de spoke canvas checkt hij de coderepository uit op een versietag:

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

Beheer

  • Draai de pipeline eenmalig handmatig en autoriseer de pool en de groep, zoals bij de andere pipelines.
  • Een nieuwe subscription krijgt zijn export bij de volgende run van de pipeline met DoConfigureExports op true. De data van een subscription staat in een map subscription-<subscription-id> van de container.
  • Controleer de run in de wekelijkse pipelinestatus (Onderhoudskalender). Een mislukte run betekent een gat in het kostenrapport.
  • Een subscription die niet geëxporteerd mag worden, komt in SkipTheseSubscriptions.