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¶
- Maak een storage account aan met hierarchical namespace ingeschakeld.
- Maak een container aan,
billingdata. - Geef de identiteit die de pipeline draait de rol Storage Blob Data Contributor.
- 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
DoConfigureExportsoptrue. De data van een subscription staat in een mapsubscription-<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.