Modulreferenz des Spoke canvas¶
Das Terraform des Spoke canvas hat zwei Root-Module: deploy/subscription und deploy/spoke, beide in
src/Xebia.Mcp/Files/terraform/spoke-canvas/ des Code-Repositorys (Aufbau). Die pipelines
füllen ihre Variablen; du führst sie normalerweise nicht von Hand aus. Diese Seite gruppiert die Inputs nach Zweck, listet die Module auf
und zeigt, was die Outputs enthalten. Sie ist eine Lesehilfe: Die generierten Tabellen im README jedes Root-Moduls (erzeugt mit
terraform-docs) bleiben die exakte Quelle.
Wie das Ergebnis aussieht, steht unter Spoke canvas: was ein Deployment erstellt. Zum JSON, das es steuert, siehe die Spoke-JSON-Referenz.
Subscription-Root (deploy/subscription)¶
Der subscription-layer bereitet die subscription für einen spoke vor: Er ist der Schritt vor dem spoke canvas. Er ruft das Modul
subscription auf und gibt die subscription-ID aus, die der canvas-layer dann verwendet. Das Design dahinter steht unter
Subscription-Provisioning.
| Input | Erforderlich | Zweck |
|---|---|---|
FileName |
ja | Pfad der spoke-JSON-Datei |
IncrementName |
nein (Standard 001) |
Inkrementwert für generierte Namen. Die Quellen beschreiben ihn nicht weiter |
TenantId |
ja | Tenant der subscription |
xmscsp_billing_account_name, xmscsp_subscription, xmscsp_tenant, xmscspclient_id, xmscspclient_secret |
ja | Billing Account und Service Principal, die nötig sind, um eine subscription zu erstellen (CSP-Weg) |
| Output | Enthält |
|---|---|
subscriptionId |
Die ID der subscription für den spoke |
Die pipeline übergibt leere CSP-Werte
Die CSP-Inputs existieren, weil der Code eine subscription erstellen kann, wenn azureSubscriptionId leer ist. Die pipelines
übergeben die fünf CSP-Werte als leere Strings, die subscription muss also vor dem Lauf existieren
(Neuer spoke).
Spoke-Root (deploy/spoke)¶
Inputs nach Zweck¶
| Zweck | Input | Erforderlich | Beschreibung |
|---|---|---|---|
| Spoke-Definition | FileName |
ja | Pfad zur JSON-Konfigurationsdatei des Spokes |
subscriptionOutputFileName |
ja | Pfad zur JSON-Datei mit dem Output des subscription-layers | |
subscription_id |
nein | subscription-ID, wenn sie direkt angegeben wird | |
IncrementName |
nein (Standard 001) |
Inkrementwert für generierte Namen. Die Quellen beschreiben ihn nicht weiter | |
spoke_canvas_version |
nein | Versionskennung des Spoke-canvas-Codes. Wird als tag spoke_canvas_version geschrieben |
|
| Deployment-Identität | xmscsp_tenant, xmscsp_subscription |
ja | Tenant und subscription, gegen die das Deployment läuft |
xmscspclient_id, xmscspclient_secret |
ja | Client-ID und Secret der Deployment-Identität | |
| Namens-Overrides | overwrite_KeyVault, overwrite_KeyVaultPE, overwrite_StorageAccount, overwrite_StorageAccountPE, overwrite_LogAnalytics, overwrite_AutomationAccount, overwrite_DefaultNSGName, overwrite_VWanConnection, overwrite_SubscriptionName |
nein | Ersetzen den generierten Namen einer Ressource. null behält den Standardnamen |
| GitHub-Integration | ghinfo |
nein | Objekt mit BaseUrl, OrganizationName und OidcIssuer des GitHub-Hosts |
github_app_id |
nein | GitHub-App-ID, für die App-Authentifizierung der GitHub-Provider. Wird in CI/CD als TF_VAR_github_app_id übergeben. Nicht setzen, um Token-Authentifizierung zu verwenden |
|
github_app_installation_id |
nein | Installations-ID der GitHub App in der Plattform-Organisation | |
github_app_installation_id_workload |
nein | Installations-ID in der Organisation, die das Workload-Repository enthält. Entspricht der Plattform-Installation, wenn beide in derselben Organisation liegen | |
github_token |
nein | Token für die Repository-Verwaltung. In CI/CD normalerweise ein kurzlebiges Installations-Token der GitHub App, übergeben als TF_VAR_github_token |
|
integration_module_source |
nein | Git-Quelle der Integrationsmodule, die die GitHub- und Shared-Service-Extensions verwenden. Hat einen Standardwert; überschreibe ihn, wenn deine Plattform die Module anderswohin synchronisiert |
Secrets als Variablen
xmscspclient_secret, github_token und die Zugangsdaten der GitHub App sind Secrets. Übergib sie aus dem Secret Store der pipeline
über TF_VAR_*-Variablen. Lege sie niemals in einer spoke-Datei oder einer tfvars-Datei im Konfigurations-Repository ab.
Module¶
Der Spoke-Root ist eine Komposition. Module nach Bereich:
| Bereich | Module | Was sie tun |
|---|---|---|
| Subscription | subscription_managementgroup, subscription_rename, subscription_tags |
Die subscription in der management group platzieren, umbenennen, tags anwenden |
| Identität und Zugriff | privileges_adgroups, privileges_service_principal, privileges_roleassignments, pim_group_config, storespnsecret |
Die Entra-ID-Gruppen und den Service Principal erstellen, Rollen zuweisen, PIM für die Gruppen konfigurieren, das Secret des Service Principals im Key Vault speichern |
| Resource Groups | resourcegroup, resourcegroup_networkwatcher |
Die Resource Group pro Region und die dedizierte Gruppe für Network Watcher |
| Netzwerk | virtualnetwork, virtualnetworkvhublink, networkwatcher |
Netzwerk, Subnets, NSGs und Route Tables, die Virtual-Hub-Verbindung, Network Watcher |
| Private DNS | private_dns_zone, private_dns_zone_vnet_link_hub |
Eine optionale private DNS zone für den spoke, verknüpft mit dem Netzwerk des hub-DNS-Resolvers |
| Ressourcen für den Workload | keyvault, storageaccount, loganalyticsworkspace |
Key Vault, Storage Account (mit Customer-Managed Key), Log-Analytics-Workspace |
| Azure DevOps | AzureDevOps |
Optionales Repository und optionale Service Connection |
| Erweiterungen | apim_configuration, acr_configuration, servicebus_configuration, eventhub_configuration, github_repository_configuration, github_integration_configuration |
Optionale Nutzung von Shared Services und das GitHub-Repository mit seinen Federated Credentials |
Neben den Modulen erstellt der Root einen Azure-Monitor-Activity-Log-Alert für Policy-Operationen. Die Quellen beschreiben weder seinen Auslöser noch seine Action Group.
Outputs¶
Outputs sind die Übergabe zwischen den layers und die Informationen, die eine pipeline anzeigen oder weitergeben kann. Die Quellen listen nur die Namen auf, ohne Beschreibung:
| Output | Berichtet über |
|---|---|
workloadinfo |
Den Workload des Spokes |
resourcegroup |
Die Resource Groups |
networking |
Die Netzwerkressourcen |
keyvault |
Das Key Vault |
storage_account |
Den Storage Account |
loganalytics |
Den Log-Analytics-Workspace |
groups |
Die Entra-ID-Gruppen des Spokes |
ProductTeamGroups |
Die Team-Gruppen, die Zugriff bekommen haben |
privileges |
Die Rollenzuweisungen |
spn |
Den Service Principal |
Führe terraform output auf einem spoke-state aus, um den exakten Inhalt für deine Version zu sehen, und prüfe ihn, bevor du dich in
einem Skript darauf verlässt. Behandle den Output spn als sensibel, bis du weißt, dass er kein Secret enthält.
Provider und Versionen¶
Der Spoke-Root fixiert exakte Provider-Versionen, wie jedes Root-Modul (Tools).
| Provider | Verwendet für |
|---|---|
azurerm, azapi |
Azure-Ressourcen |
azuread |
Gruppen, Service Principals, PIM |
azuredevops |
Repository und Service Connection |
github |
Repository und Federated Credentials |
external, time |
Unterstützende Lookups und Timing |
Zum Zeitpunkt der Extraktion verlangte der Spoke-Root Terraform 1.9.2 oder höher. Die exakten Versionen pro Release stehen im README des Root-Moduls in der Version, die du fixiert hast.
Einstellungen, die für alle spokes gelten¶
Einstellungen, die für jeden spoke gelten, werden einmal gehalten und nicht in jeder spoke-Datei wiederholt. In der aktuellen Plattform
stehen sie in mcp.json unter SpokeCommon (mcp.json). Im älteren, separaten Spoke canvas
lagen sie in einer Datei common.tf. Die Gruppen von Einstellungen sind dieselben:
| Gruppe | Enthält |
|---|---|
Tenant-Informationen (tenantinfo) |
Tenant, ID der Administrative Unit, Präfix für Gruppennamen, Gültigkeit der Secrets der Service Principals in Tagen. Eine Änderung der Gültigkeit erzeugt neue Secrets für alle Service Principals der spokes |
| Netzwerk | Die subscription des zentralen Virtual Hub und optional die IPAM-Pools von Azure Virtual Network Manager, aus denen spoke-Dateien Adressraum zuweisen dürfen |
| Regionen | Pro Region: Azure-Regionsname, Anzeigename, DNS-Server (normalerweise die hub-firewall in dieser Region), Resource-ID des Virtual Hub, Resource-ID des zentralen Log-Analytics-Workspace |
| PIM-Konfigurationen | Die benannten PIM-Profile nopim, self-approve und approval |
| Overrides für die PIM-Rollenzuordnung | Optional, siehe Data-Plane-Zugriff über PIM |
GitHub-Host (ghinfo) |
Base-URL, Organisation und OIDC-Issuer des GitHub-Hosts. Für GitHub.com ist der OIDC-Issuer https://token.actions.githubusercontent.com |
| Shared Services | Die subscription der Shared Services, die die Extensions verwenden |
Ein IPAM-Pool ist regional, nenne den Pool also mit seiner Region, wenn du mehr als eine Region hast. Spoke-Dateien, die keinen Pool
verwenden, behalten ihre festen Adresspräfixe, was weiterhin unterstützt wird. Eine spoke-Datei verwendet entweder addressPrefix oder einen
ipamPool mit numberOfIpAddresses, nicht beides. Wenn ein Virtual Network einen Pool verwendet, erben seine Subnets ihn und geben nur
numberOfIpAddresses an; ein Subnet in einem Netzwerk mit festem Adresspräfix kann keine Pool-Zuweisung anfordern.
Prüfe die Feldnamen für deine Version
Die Namen in dieser Tabelle stammen aus dem älteren Layout. Schau in der Spoke-JSON-Referenz
und in mcp.json deines Konfigurations-Repositorys nach, welche Namen deine Version verwendet.
Verwandte Seiten¶
- Spoke canvas: was ein Deployment erstellt
- Provisioning und Pipelines und Workflows
- Upgrade-Leitfäden für den spoke canvas zu Änderungen dieser Einstellungen zwischen Versionen