Plattformkonfiguration¶
Diese Seite richtet sich an das Plattform-Team. Sie beschreibt, wie die Lösung als Code aufgebaut ist, welche Voraussetzungen erfüllt sein müssen und wie die Stufen konfiguriert werden. Das Design steht in der Architektur.
Referenzdesign, dein Deployment kann abweichen
Variablennamen und Standardwerte unten sind die des Lösungscodes. Die pipelines und die tfvars-Dateien eines Deployments
liegen in einem Konfigurations-Repository dieses Deployments, das nicht Teil der Lösungsquelle ist.
Repository-Aufbau¶
Die Lösung wird als Terraform-Code-Repository geliefert. Ein Deployment fügt seine eigene Konfiguration (die tfvars-Dateien) und
pipelines hinzu.
| Pfad | Zweck |
|---|---|
infra/deploy/shared |
Root-Modul der Shared-Stufe: capacities, Custom Role, Auto-Pause |
infra/deploy/workload |
Root-Modul der Workload-Stufe: Gateway, workspaces, Verbindungen, Data Lake |
infra/deploy/governance |
Root-Modul der optionalen Purview-Stufe |
infra/deploy/observability |
Root-Modul der optionalen Grafana-Stufe |
infra/modules/fabric-workspace |
Workspace, Rollenzuweisungen, Private Link, Network-Policy-Skripte, Git, Lakehouses, Warehouses |
infra/modules/fabric-connections |
ADLS-, SQL-, Oracle-Cloud-Storage-Verbindungen, managed private endpoints, ausgehende Verbindungsregeln |
infra/modules/purview, infra/modules/grafana |
Module der optionalen Stufen |
docs/ |
HLD, ADR und Runbooks der Lösung |
Tooling. Terraform >= 1.13, < 2.0. Provider: azurerm (>= 4.0.0, < 5.0), azuread, azapi und der Microsoft-fabric-
Provider (>= 1.7.0, < 2.0, im Preview-Modus) für die Workload-Stufe und grafana (>= 3.0.0, < 4.0) für die Observability-
Stufe. Der state liegt in einem Azure Storage Account (azurerm-Backend) mit Entra-ID-Authentifizierung. Mehrere Schritte rufen
Fabric-REST-APIs über PowerShell-Skripte auf, daher braucht der Agent, der die pipeline ausführt, PowerShell (pwsh) und die
Azure CLI mit angemeldeter Sitzung.
Voraussetzungen¶
Manche Schritte lassen sich nicht automatisieren und müssen vor dem ersten Deployment erledigt sein.
| Voraussetzung | Detail |
|---|---|
| Ein spoke pro Umgebung und ein Shared-spoke | Das Spoke canvas liefert VNet, Subnet für private endpoints, Key Vault, Storage Account und Log Analytics (Spoke canvas). Die Workload-Stufe braucht außerdem ein Subnet für das VNet data gateway. |
| Graph-Berechtigungen für den Service Principal des Shared-spokes | Application.Read.All, Directory.Read.All und User.Read.All. Nötig, um die capacity administrators zu setzen. |
| Fabric Admin Portal: Netzwerk auf workspace-Ebene | In den Tenant-Einstellungen aktiviert |
| Fabric Admin Portal: Zugriff für Service Principals | Aktiviert, damit die Deployment-Identität die Fabric-APIs nutzen kann |
| Fabric Admin Portal: Zugriff für Gastkonten | Aktiviert |
| Fabric Admin Portal: GitHub-Zugriff | Aktiviert, für workspaces mit Git-Verknüpfung |
| Fabric Admin Portal: Configure workspace-level outbound network rules | Aktiviert, damit workspace-Admins den Outbound-Schutz nutzen können |
| Secrets im Key Vault des spokes | Die Client-ID und das Secret des Service Principals für jede ADLS- oder SQL-Verbindung, Benutzername und Passwort für Basic-Verbindungen und Oracle Cloud Storage und für Git ein Personal Access Token in einem Secret namens GitHub-PAT |
| Entra-ID-Gruppen | Eine pro workspace-Rolle, die du nutzen willst, und die Grafana-Gruppen, wenn die Observability-Stufe genutzt wird |
Die Quelle listet die vier Fabric-Tenant-Einstellungen als Screenshots. Bestätige die genauen Namen der Einstellungen im Fabric Admin Portal deines Tenants.
Die Deployment-Identität braucht außerdem Rechte auf dem spoke: Sie legt einen Key an und liest Secrets im Key Vault des spokes, weist Rollen auf dem Storage Account zu und legt Ressourcen in der subscription an. Was der Spoke-Service-Principal hat, steht in Spoke canvas.
Variablen, die allen Stufen gemeinsam sind¶
| Variable | Hinweise |
|---|---|
location |
westeurope, northeurope, swedencentral oder uksouth |
environment |
development, test, acceptance, production (und shared für die Shared- und Governance-Stufe) |
workload_name |
Höchstens 8 Zeichen |
spoke_config |
Namen der spoke-Ressourcen, auf denen aufgebaut wird (siehe unten) |
spoke_config für die Shared-Stufe: subscription_id, resource_group_name, log_analytics_name, key_vault_name,
storage_account_name, vnet_name, snet_pe_name. Die Workload-Stufe fügt snet_gateway_name hinzu. Die Governance-Stufe nimmt eine
kleinere Menge. Das sind die Namen von Ressourcen, die das Spoke canvas anlegt (Was du bekommst). Die Lösung liest sie mit Data Sources und legt sie nicht an.
Shared-Stufe¶
capacity_administrators = ["<spoke service principal object id>"]
fabric_capacities = {
development = { sku = "F4" }
production = { sku = "F8" }
}
capacity_auto_pause = { enabled = false } # see Capacity auto-pause
capacity_operator_group_ids = []
| Variable | Zweck |
|---|---|
capacity_administrators |
Principal-IDs, die capacity administrators werden: die spoke-Principals der workloads, die die capacity nutzen, und optional Benutzer |
fabric_capacities |
Map der capacities. Der Key wird Teil des capacity-Namens und ist das, worauf sich die Workload-Stufe bezieht. Mindestens eine capacity. SKU F2, F4, F8, F16, F32, F64, F128, F256, F512, F1024 oder F2048. |
capacity_auto_pause |
Siehe Capacity Auto-Pause |
capacity_operator_group_ids |
Gruppen, die die Rolle Fabric Capacity Operator bekommen |
Die Resource Provider Microsoft.Fabric und Microsoft.Logic werden vom Deployment registriert.
Workload-Stufe¶
fabric_capacities = {
development = { display_name = "<name of the capacity from the shared tier>" }
}
workspaces = {
engineering = {
capacity_key = "development"
admins_group_id = "<entra group object id>"
contributors_group_name = "<entra group display name>"
viewers_group_id = "<entra group object id>"
outbound_network_policy_enabled = true # outbound protection off, see Workspace network policy
git_config = {
owner_name = "<organisation>"
repository_name = "<repository>"
branch_name = "<branch>"
directory_name = "<directory>" # must exist in the repository
}
lakehouses = {
bronze = { description = "Raw data", enable_schemas = true }
}
warehouses = {
silver = { description = "Business entities", collation_type = "Latin1_General_100_BIN2_UTF8" }
}
adls_connections = {
landing = {
container_name = "landing"
client_id_secret_name = "<secret name>"
client_secret_secret_name = "<secret name>"
}
}
workspace_connections = {
to-reporting = { workspace_key = "reporting" }
}
managed_private_endpoints = {
sql = {
target_private_link_resource_id = "<resource id>"
subresource_type = "<sub-resource>"
}
}
}
}
| Einstellung eines workspaces | Hinweise |
|---|---|
capacity_key |
Muss ein Key von fabric_capacities sein (wird validiert) |
admins_*, contributors_*, members_*, viewers_* |
Jede Rolle hat _group_id und _group_name. Die ID gewinnt. |
outbound_network_policy_enabled |
Standard false (Outbound deny). Siehe Workspace Network Policy. |
git_config |
github_url ist standardmäßig github.com. Siehe Konnektivität. |
lakehouses |
description, enable_schemas |
warehouses |
description, collation_type (zwei erlaubte Werte) |
adls_connections |
Container und die zwei Secret-Namen. Pro Verbindung wird ein Container angelegt. |
sql_connections |
Server, Datenbank, Namen der Secrets für Client-ID und Secret (Service Principal) |
sql_connections_basic |
Server, Datenbank, Namen der Secrets für Benutzername und Passwort |
oracle_cloud_storage_connections |
API-Endpoint, Namen der Secrets für Benutzername und Passwort |
workspace_connections |
Key des Ziel-workspaces (ein workspace desselben Deployments) |
managed_private_endpoints |
Resource-ID des Ziels und der Sub-Resource-Typ |
data_pipelines |
Wird von der Variable akzeptiert, aber vom Root-Modul nicht weitergereicht |
Validierungen im Code: Jeder capacity_key muss existieren, Namen von Warehouses und Lakehouses müssen innerhalb eines workspaces und
über beide Typen hinweg eindeutig sein, und Collations müssen einer der zwei erlaubten Werte sein. Eine Fabric capacity muss über display_name
gefunden werden (ein Data Lookup), die Shared-Stufe muss also zuerst deployt werden.
Was die Workload-Stufe pro Lauf anlegt, steht in der Architektur. Bemerkenswertes Verhalten:
- Pro capacity-Key des Deployments wird ein VNet data gateway angelegt (1 Member-Gateway, 30 Minuten Inaktivität bis zum Schlafen), im Gateway-Subnet des spokes. Alle workspaces einer capacity nutzen es.
- Der
expiration_datedes Storage-Account-Keys wird nach dem Anlegen ignoriert, und die Private-DNS-zone-Gruppen von private endpoints werden ignoriert, weil eine policy sie setzt. - Die Schritte für Network Policy und Git führen PowerShell-Skripte als
local-exec-Provisioner aus, ausgelöst durch Änderungen ihrer Inputs.
Eine Änderung deployen¶
Änderungen folgen Anfragen und Änderungen. Kurz: Konfiguration bearbeiten, pull request öffnen, den Plan prüfen, über die pipeline deployen. Prüfe im Plan:
- nur additive Änderungen, wenn du eine Rollengruppe, Verbindung oder ein Lakehouse hinzufügst,
- keinen Austausch einer workspace-Ressource,
- die
403-Skips der Netzwerk-Skripte auf kleinen SKUs (Workspace Network Policy).