Zum Inhalt

KI-Plattform: Plattform-Module

Diese Seite richtet sich an das Plattform-Team. Sie beschreibt die fünf Terraform-Module der Lösung, ihre wichtigsten Inputs und wie sie kombiniert werden sollen. Das Plattform-Team ist XMMS oder dein eigenes Team, siehe Betriebsmodelle.

Nur Module

Die Quelle liefert Module. Der Deployment-Code, der sie pro Umgebung aufruft („deploy roots“), ist für eine spätere Phase geplant. Reihenfolge des Deployments, sobald er existiert: zuerst die gemeinsame Plattform, dann die Projects, dann die workloads.

Anforderungen

Element Wert
Terraform >= 1.12, < 2.0
AzureRM provider >= 4.0.0, < 5.0
AzAPI provider >= 2.6.1, < 3.0
Azure AD provider ~> 2.47, < 3.0
Naming-Modul Azure/naming/azurerm ~> 0.4
Backend azurerm mit use_azuread_auth = true; Storage Account, Container und Key werden bei terraform init übergeben, nichts wird committet
Authentifizierung Azure-CLI-Sitzung mit ausreichenden Berechtigungen

Die azurerm-Versionsbeschränkung (< 5.0) ist wichtig, wenn du ein Provider-Upgrade planst, siehe Bekannte Probleme. Lock files sind im Repository committet.

Überblick

Modul Typ Legt an
foundry_account Ressourcen Foundry account, seine Identität, optionalen private endpoint
foundry_project Ressourcen Project, Identität, Storage, Application Insights, connections, capability host, Rollenzuweisungen
workload_identity Ressourcen User-assigned Identity und Rollenzuweisungen
platform_data Nur Daten Lookup gemeinsamer Plattform-Ressourcen
project_data Nur Daten Lookup eines Projects und seiner Identität
flowchart LR
    pd["platform_data"] --> pdata["project_data"]
    pd --> fp["foundry_project"]
    fa["foundry_account"] --> fp
    fp --> wi["workload_identity"]
    pdata --> wl["workload"]
    wi --> wl

foundry_account

Legt den gemeinsamen Account an. Inputs:

Input Pflicht Beschreibung
name Ja Name des Accounts. Wird auch als custom subdomain verwendet. Die Identität heißt <name>-identity, der private endpoint <name>-pe.
resource_group_id Ja ID der übergeordneten resource group
location Ja Azure-Region
integration_subnet_id Ja Subnet für die Agent-Network-Injection
endpoint_subnet_id Nein Subnet für den private endpoint. Ohne ihn wird kein private endpoint angelegt.
tags Nein Tags

Outputs: id, name, endpoint, openai_endpoint, identity_client_id, identity_principal_id.

foundry_project

Legt ein Project an. Zwei Modi:

Modus Wann Ergebnis
Decoupled account_id ist gesetzt Nur das Project und seine Ressourcen, im bestehenden Account. Nutze das mit dem gemeinsamen Plattform-Account.
Standalone account_id ist null (Standard) Legt zusätzlich einen Account, seine Identität, einen private endpoint und Diagnoseeinstellungen an. Aus Gründen der Abwärtskompatibilität erhalten.
Input Pflicht Beschreibung
project_name Ja (Standard null im Code) Name des Projects. Auch das Suffix für Ressourcennamen.
location Ja Azure-Region
integration_subnet_id Ja Agent-Integration-Subnet
endpoint_subnet_id Ja Subnet für private endpoints
log_analytics_workspace_id Ja Workspace für Application Insights (und Diagnose im Standalone-Modus)
cosmosdb_account_id Ja Cosmos-DB-Account für Agent-threads
ai_search_id Ja AI-Search-Service als Vector Store
account_id Nein Bestehender Account
owner_group_id, contributor_group_id, reader_group_id Praktisch ja Entra-ID-Gruppen, siehe Zugriff und RBAC
tags Nein Tags

Outputs: foundry (Account-ID, Name, Identität; Identitätswerte sind im Decoupled-Modus null), foundry_project (ID, Name, Identität) und used_resources (Storage Account, Cosmos DB, AI Search).

Ablauf innerhalb des Moduls, der die Wartezeiten erklärt, die du in einem Plan siehst:

  1. Resource group, Identitäten, Application Insights, Storage Account und sein private endpoint.
  2. Das Project, dann 10 Sekunden Wartezeit, bis die Project-Identität in Entra ID verfügbar ist.
  3. Connections (Storage, Cosmos DB, AI Search, Application Insights) und die Rollenzuweisungen auf den Datenspeichern.
  4. 60 Sekunden Wartezeit, bis Rollenzuweisungen wirksam werden.
  5. Der capability host caphostproject-<project>.
  6. Die Cosmos-DB-SQL-Rollenzuweisungen auf den Collections, die der capability host angelegt hat.

platform_data und project_data

Module nur für Daten, keine Ressourcen.

platform_data hat keine Inputs. Es sucht die Plattform-resource-group, den Foundry account, die Container Registry, die Container Apps environment, Cosmos DB, AI Search, zwei Storage Accounts (Plattform und Daten), den Key Vault, den Log-Analytics- workspace, das spoke-VNet, das Subnet für private endpoints und das Foundry-Integration-Subnet und stellt IDs, Namen und Endpoints bereit. Es gibt auch die IDs der Owner-, Contributor- und Reader-Gruppen aus.

Ressourcennamen sind fest einprogrammiert

Die Namen in platform_data stehen als lokale Werte in main.tf für ein Plattform-Deployment (eine Region, Produktion). Ein anderes Deployment, eine andere Region oder Umgebung erfordert eine Änderung dieser Werte, oder das Modul muss so geändert werden, dass es Inputs nimmt. Siehe Bekannte Probleme.

project_data nimmt project_name und nutzt platform_data, um den Account zu finden. Es gibt project_id, project_name, project_endpoint, identity_client_id und identity_principal_id aus. Es findet die Project-Identität über die Namenskonvention id-<project>-foundry-project in der Project-resource-group, ein Project, das außerhalb von foundry_project angelegt wurde, muss also dieser Konvention folgen.

workload_identity

Input Pflicht Beschreibung
name Ja Name der Identität
location Ja Region
resource_group_name Ja Resource group der Identität
role_assignments Nein Liste von Objekten mit scope und role_definition_name
tags Nein Tags

Outputs: id, client_id, principal_id. Jede Zuweisung ist über Scope plus Rollenname eindeutig.

Ein Project anlegen: Checkliste

Nutze sie als Leitfaden, wenn eine Anfrage für ein neues Project eintrifft. Passe sie an deinen Deployment-Code an.

Schritt Prüfung
1 Der Name ist kurz (maximal 8 Zeichen) und auf der Plattform eindeutig
2 Region und Umgebung sind auf deiner Plattform erlaubt
3 Die drei Gruppen existieren und haben die richtigen Owner (Zugriff, Gruppen und PIM)
4 Der gemeinsame Cosmos DB, AI Search, Log-Analytics-workspace und die zwei Subnets existieren
5 Erforderliche private DNS zones lösen auf (siehe Architektur)
6 Die benötigten Modelle sind im Account deployt und Quota ist verfügbar
7 Der Plan zeigt nur die erwarteten Project-Ressourcen, dann apply über deine normale pipeline und Review: Änderungs-Workflow