Zum Inhalt

KI-Plattform: Architektur

Diese Seite ist das High-Level-Design der KI-Plattform. Sie ist das Referenzdesign aus den Terraform-Modulen: Dein Deployment kann sich bei Namen, SKUs und den vorhandenen optionalen Teilen unterscheiden.

Layers

Die Lösung hat drei layers. Jeder layer wird auf dem vorherigen deployt.

flowchart TB
    subgraph shared["1. Shared platform (platform team)"]
        acct["Foundry account<br/>(AIServices)"]
        cae["Container Apps<br/>environment"]
        acr["Container Registry"]
        cosmos["Cosmos DB<br/>(agent threads)"]
        search["AI Search<br/>(vector store)"]
        kv["Key Vault"]
        law["Log Analytics"]
    end
    subgraph proj["2. Foundry project per workload"]
        p["Foundry project<br/>+ Agents capability host"]
        pid["Project identity"]
        st["Storage account"]
        ai["Application Insights"]
    end
    subgraph wl["3. Workload (workload team)"]
        app["Application / agent client"]
        wid["Workload identity"]
    end
    acct --> p
    p --> pid
    p --- st
    p --- ai
    p -. connection .-> cosmos
    p -. connection .-> search
    ai --> law
    app --> p
    app --> wid
    app --> cae
    cae --> acr
Layer Enthält Erstellt von
Shared platform Foundry account, Container Apps environment, Registry, Cosmos DB, AI Search, Plattform-Storage, Key Vault, Log Analytics, Netzwerk Plattform-Team
Foundry project Project, Project Identity, Storage Account, Application Insights, Connections, Capability Host, Rollenzuweisungen Plattform-Team, auf Anfrage
Workload Anwendung, Workload Identity, Rollenzuweisungen für diese Identity Workload-Team (mit dem Plattform-Team, wo Rollen auf gemeinsamen Ressourcen nötig sind)

Foundry account

Ein Account pro Plattform. Aus dem Terraform:

Einstellung Wert
Ressourcentyp Microsoft.CognitiveServices/accounts, kind AIServices, SKU S0
Project Management Aktiviert (allowProjectManagement)
Lokale (Key-)Authentifizierung Deaktiviert (disableLocalAuth), der Zugriff läuft also über Entra ID
Custom Subdomain Gleich dem Account-Namen
Identity Eine User-assigned Managed Identity, die mit dem Account erstellt wird
Network Injection Szenario agent in ein von dir bereitgestelltes Integration Subnet (useMicrosoftManagedNetwork ist false, es wird also dein eigenes Subnet verwendet)
Private Endpoint Wird nur erstellt, wenn ein Endpoint-Subnet angegeben ist, Sub-Ressource account
Öffentlicher Netzwerkzugriff Im Modul Enabled, siehe Bekannte Probleme

Das Modul wird mit dem Provider azapi deployt, weil die Ressource von azurerm nicht vollständig unterstützt wird. Das Modul liefert als Outputs die Account-ID, den Namen, den Endpoint, einen OpenAI-Endpoint der Form https://<account>.openai.azure.com sowie die Client- und Principal-ID der Identity.

Foundry project

Jeder Workload bekommt ein eigenes Project im gemeinsamen Account. Das Project-Modul erstellt:

Ressource Details
Resource group Eine pro Project, benannt mit dem Naming-Modul und dem Suffix -project
Project Microsoft.CognitiveServices/accounts/projects, mit einer User-assigned Managed Identity
Storage Account Standard, LRS, mindestens TLS 1.2, öffentlicher Netzwerkzugriff deaktiviert, mit einem Private Endpoint für blob
Application Insights Workspace-basiert, mit dem von dir angegebenen Log-Analytics-Workspace verknüpft
Connections Storage, Cosmos DB und AI Search mit Entra-ID-Authentifizierung; Application Insights mit seinem Connection String
Capability Host Kind Agents, mit den Connections für Vector Store, Storage und Thread Storage
Rollenzuweisungen Für die Project Identity und für die Gruppen Owner, Contributor und Reader (Zugriff und RBAC)

Alle Connections haben isSharedToAll auf false: Sie gehören zum Project.

Das Modul kann auch den Foundry account selbst erstellen („Standalone-Modus“, wenn keine account_id übergeben wird). Mit dem gemeinsamen Account der Plattform nutzt du den „Decoupled-Modus“, in dem nur das Project erstellt wird. Siehe Plattform-Module.

Wo die Agent-Daten liegen

Der Capability Host verweist den Agent-Service auf die verbundenen Stores:

Daten Store
Threads, Nachrichten, Agent-Definitionen, Run-Status Cosmos DB, Datenbank enterprise_memory, Collections mit der internen ID des Projects als Präfix (Thread Message Store, System Thread Message Store, Agent Entity Store, Agent Definitions, Run State)
Dateien Das Storage Account des Projects (blob)
Vektoren Der mit dem Project verbundene Azure-AI-Search-Service

Cosmos DB und AI Search sind gemeinsam genutzt, die Isolation zwischen Projects erfolgt daher über die Collections pro Project und über Rollenzuweisungen, nicht über getrennte Services.

Netzwerk

  • Der Foundry account, und im Project-Modul auch das Storage Account des Projects, sind über Private Endpoints im Endpoint-Subnet des spokes erreichbar.
  • Agents laufen mit Network Injection im Integration Subnet des spokes.
  • Die private DNS zones, die das Project-Modul für volle Funktionalität auflistet, sind: privatelink.vaultcore.azure.net, privatelink.openai.azure.com, privatelink.cognitiveservices.azure.com, privatelink.aiservices.azure.com, privatelink.blob.core.windows.net, privatelink.documents.azure.com und privatelink.search.windows.net.
  • Die Module ignorieren Änderungen an der DNS Zone Group ihrer Private Endpoints, die DNS-Einträge werden also voraussichtlich außerhalb des Moduls registriert. Wie das auf der Plattform geschieht, steht im DNS-Design.

Namensgebung

Das Project-Modul verwendet das Community-Naming-Modul mit dem Project-Namen als Suffix. Der Name des Foundry accounts wird aus dem Cognitive-Account-Namen des Naming-Moduls abgeleitet, wobei cog durch aif ersetzt wird. Die Project Identity heißt id-<project>-foundry-project, und das Lookup-Modul verlässt sich auf diesen Namen. Das Muster für das Ressourcensuffix in der Quelle ist <workload>-<environment>-<region> mit Kürzeln (prd, acc, tst, dev, np; weu, sec). Die Namensgebung deiner Plattform kann abweichen: Namen und Tags.

Observability

  • Application Insights des Projects schreibt in den Log-Analytics-Workspace des spokes.
  • Im Standalone-Modus setzt das Modul außerdem Diagnoseeinstellungen auf dem Account für die Log-Kategorien Audit, RequestResponse und AzureOpenAIRequestUsage. Im Decoupled-Modus wird diese Einstellung nicht erstellt. Diagnoseeinstellungen für den gemeinsamen Account sind nicht Teil des Account-Moduls (siehe Bekannte Probleme).