AI-platform: architectuur¶
Deze pagina is het globale ontwerp van het AI-platform. Het is het referentieontwerp uit de Terraform-modules: jouw deployment kan afwijken in namen, SKU's en in welke optionele onderdelen er zijn.
Lagen¶
De oplossing heeft drie lagen. Elke laag wordt boven op de vorige uitgerold.
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
| Laag | Bevat | Aangemaakt door |
|---|---|---|
| Gedeeld platform | Foundry account, Container Apps environment, registry, Cosmos DB, AI Search, platformstorage, Key Vault, Log Analytics, netwerk | Platformteam |
| Foundry project | Project, project identity, storage account, Application Insights, connections, capability host, role assignments | Platformteam, op aanvraag |
| Workload | Applicatie, workload identity, role assignments voor die identity | Workload team (met het platformteam waar rollen op gedeelde resources nodig zijn) |
Foundry account¶
Eén account per platform. Uit de Terraform:
| Instelling | Waarde |
|---|---|
| Resourcetype | Microsoft.CognitiveServices/accounts, kind AIServices, SKU S0 |
| Project management | Ingeschakeld (allowProjectManagement) |
| Lokale authenticatie (sleutel) | Uitgeschakeld (disableLocalAuth), dus toegang loopt via Entra ID |
| Custom subdomain | Gelijk aan de accountnaam |
| Identity | Een user-assigned managed identity die met het account wordt aangemaakt |
| Network injection | Scenario agent in een integratiesubnet dat je aanlevert (useMicrosoftManagedNetwork is false, dus je eigen subnet wordt gebruikt) |
| Private endpoint | Alleen aangemaakt als een endpoint-subnet is aangeleverd, sub-resource account |
| Public network access | Enabled in de module, zie Bekende problemen |
De module wordt met de provider azapi uitgerold, omdat de resource niet volledig door azurerm wordt ondersteund. De module
geeft als outputs het account-ID, de naam, het endpoint, een OpenAI-endpoint in de vorm https://<account>.openai.azure.com en
de client- en principal-ID van de identity.
Foundry project¶
Elke workload krijgt een eigen project in het gedeelde account. De projectmodule maakt aan:
| Resource | Details |
|---|---|
| Resource group | Eén per project, genoemd met de naming-module en het achtervoegsel -project |
| Project | Microsoft.CognitiveServices/accounts/projects, met een user-assigned managed identity |
| Storage account | Standard, LRS, minimaal TLS 1.2, public network access uitgeschakeld, met een private endpoint voor blob |
| Application Insights | Workspace-based, gekoppeld aan de Log Analytics workspace die je aanlevert |
| Connections | Storage, Cosmos DB en AI Search met Entra ID-authenticatie; Application Insights met zijn connection string |
| Capability host | Kind Agents, met de connections voor de vector store, storage en threadopslag |
| Role assignments | Voor de project identity en voor de owner-, contributor- en reader-groepen (Toegang en RBAC) |
Alle connections hebben isSharedToAll op false: ze horen bij het project.
De module kan ook het Foundry account zelf aanmaken ("standalone mode", als er geen account_id wordt meegegeven). Met het gedeelde
account van het platform gebruik je "decoupled mode", waarbij alleen het project wordt aangemaakt. Zie
Platformmodules.
Waar agentdata staat¶
De capability host wijst de agentservice naar de gekoppelde stores:
| Data | Store |
|---|---|
| Threads, berichten, agentdefinities, runstatus | Cosmos DB, database enterprise_memory, collections met de interne ID van het project als voorvoegsel (thread message store, system thread message store, agent entity store, agent definitions, run state) |
| Bestanden | Het storage account van het project (blob) |
| Vectoren | De Azure AI Search-service die aan het project is gekoppeld |
Cosmos DB en AI Search worden gedeeld, dus de isolatie tussen projecten gebeurt met de collections per project en met role assignments, niet met aparte services.
Netwerk¶
- Het Foundry account, en in de projectmodule ook het storage account van het project, zijn bereikbaar via private endpoints in het endpoint-subnet van de spoke.
- Agents draaien met network injection in het integratiesubnet van de spoke.
- De private DNS-zones die de projectmodule noemt voor volledige functionaliteit zijn:
privatelink.vaultcore.azure.net,privatelink.openai.azure.com,privatelink.cognitiveservices.azure.com,privatelink.aiservices.azure.com,privatelink.blob.core.windows.net,privatelink.documents.azure.comenprivatelink.search.windows.net. - De modules negeren wijzigingen aan de DNS zone group van hun private endpoints, dus de DNS-records worden buiten de module geregistreerd. Hoe dat op het platform gebeurt, staat in DNS-ontwerp.
Naamgeving¶
De projectmodule gebruikt de community naming-module met de projectnaam als achtervoegsel. De naam van het Foundry account wordt
afgeleid van de naam van het cognitive account uit de naming-module, waarbij cog is vervangen door aif. De project identity heet
id-<project>-foundry-project, en de lookup-module vertrouwt op die naam. Het patroon voor het achtervoegsel in de bron is
<workload>-<environment>-<region> met afkortingen (prd, acc, tst, dev, np; weu, sec). De naamgeving van jouw platform
kan afwijken: Naamgeving en tags.
Observability¶
- Application Insights van het project schrijft naar de Log Analytics workspace van de spoke.
- In standalone mode stelt de module ook diagnostic settings in op het account voor de logcategorieën
Audit,RequestResponseenAzureOpenAIRequestUsage. De standalone-instelling wordt in decoupled mode niet aangemaakt. Diagnostic settings voor het gedeelde account maken geen deel uit van de accountmodule (zie Bekende problemen).