AI-platform: platformmodules¶
Deze pagina is voor het platformteam. Ze beschrijft de vijf Terraform-modules van de oplossing, hun belangrijkste inputs en hoe ze bedoeld zijn om te worden gecombineerd. Het platformteam is XMMS of je eigen team, zie Beheermodellen.
Alleen modules
De bron levert modules. De deploymentcode die ze per omgeving aanroept ("deploy roots") is gepland voor een latere fase. Deploymentvolgorde als die er is: eerst het gedeelde platform, dan de projecten, dan de workloads.
Vereisten¶
| Onderdeel | Waarde |
|---|---|
| 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 module | Azure/naming/azurerm ~> 0.4 |
| Backend | azurerm met use_azuread_auth = true; storage account, container en key worden meegegeven bij terraform init, er wordt niets gecommit |
| Authenticatie | Azure CLI-sessie met voldoende rechten |
De azurerm-versiebeperking (< 5.0) is van belang als je een provider-upgrade plant, zie Bekende problemen.
Lock files worden in de repository gecommit.
Overzicht¶
| Module | Type | Maakt aan |
|---|---|---|
foundry_account |
Resources | Foundry account, zijn identity, optioneel een private endpoint |
foundry_project |
Resources | Project, identity, storage, Application Insights, connections, capability host, roltoewijzingen |
workload_identity |
Resources | User-assigned identity en roltoewijzingen |
platform_data |
Alleen data | Opzoeken van gedeelde platformresources |
project_data |
Alleen data | Opzoeken van één project en zijn identity |
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¶
Maakt het gedeelde account aan. Inputs:
| Input | Verplicht | Beschrijving |
|---|---|---|
name |
Ja | Accountnaam. Wordt ook als custom subdomain gebruikt. De identity heet <name>-identity, de private endpoint <name>-pe. |
resource_group_id |
Ja | ID van de parent resource group |
location |
Ja | Azure-regio |
integration_subnet_id |
Ja | Subnet voor agent network injection |
endpoint_subnet_id |
Nee | Subnet voor de private endpoint. Zonder dit wordt er geen private endpoint aangemaakt. |
tags |
Nee | Tags |
Outputs: id, name, endpoint, openai_endpoint, identity_client_id, identity_principal_id.
foundry_project¶
Maakt één project aan. Twee modi:
| Modus | Wanneer | Resultaat |
|---|---|---|
| Decoupled | account_id is gezet |
Alleen het project en zijn resources, in het bestaande account. Gebruik dit met het gedeelde platformaccount. |
| Standalone | account_id is null (standaard) |
Maakt ook een account, zijn identity, een private endpoint en diagnostic settings aan. Behouden voor backward compatibility. |
| Input | Verplicht | Beschrijving |
|---|---|---|
project_name |
Ja (standaard null in code) |
Naam van het project. Ook het achtervoegsel voor resourcenamen. |
location |
Ja | Azure-regio |
integration_subnet_id |
Ja | Agent-integratiesubnet |
endpoint_subnet_id |
Ja | Subnet voor private endpoints |
log_analytics_workspace_id |
Ja | Workspace voor Application Insights (en diagnostics in standalone modus) |
cosmosdb_account_id |
Ja | Cosmos DB-account voor agent threads |
ai_search_id |
Ja | AI Search-service als vector store |
account_id |
Nee | Bestaand account |
owner_group_id, contributor_group_id, reader_group_id |
Feitelijk ja | Entra ID-groepen, zie Toegang en RBAC |
tags |
Nee | Tags |
Outputs: foundry (account-ID, naam, identity; identitywaarden zijn null in decoupled modus), foundry_project (ID, naam,
identity) en used_resources (storage account, Cosmos DB, AI Search).
Volgorde binnen de module, die de wachttijden verklaart die je in een plan ziet:
- Resource group, identities, Application Insights, storage account en zijn private endpoint.
- Het project, daarna 10 seconden wachten tot de projectidentity beschikbaar is in Entra ID.
- Connections (storage, Cosmos DB, AI Search, Application Insights) en de roltoewijzingen op de datastores.
- 60 seconden wachten tot roltoewijzingen van kracht zijn.
- De capability host
caphostproject-<project>. - De Cosmos DB SQL-roltoewijzingen op de collections die de capability host heeft aangemaakt.
platform_data en project_data¶
Modules met alleen data, geen resources.
platform_data heeft geen inputs. Het zoekt de platform resource group, het Foundry account, de container registry,
de Container Apps-omgeving, Cosmos DB, AI Search, twee storage accounts (platform en data), Key Vault, de Log Analytics
workspace, het spoke-VNet, het subnet voor private endpoints en het Foundry-integratiesubnet op, en geeft ID's, namen en
endpoints terug. Het geeft ook de ID's van de owner-, contributor- en reader-groepen terug.
Resourcenamen zijn hard-coded
De namen in platform_data staan als lokale waarden in main.tf, geschreven voor één platformdeployment (één regio,
productie). Voor een andere deployment, regio of omgeving moeten die waarden worden aangepast, of de module moet
inputs gaan accepteren. Zie Bekende problemen.
project_data neemt project_name en gebruikt platform_data om het account te vinden. Het geeft project_id, project_name,
project_endpoint, identity_client_id en identity_principal_id terug. Het vindt de projectidentity via de naamgevings-
conventie id-<project>-foundry-project in de resource group van het project, dus een project dat buiten foundry_project is aangemaakt
moet die conventie volgen.
workload_identity¶
| Input | Verplicht | Beschrijving |
|---|---|---|
name |
Ja | Naam van de identity |
location |
Ja | Regio |
resource_group_name |
Ja | Resource group van de identity |
role_assignments |
Nee | Lijst met objecten met scope en role_definition_name |
tags |
Nee | Tags |
Outputs: id, client_id, principal_id. Elke toewijzing wordt gekeyd op scope plus rolnaam.
Een project aanmaken: checklist¶
Gebruik dit als leidraad wanneer een aanvraag voor een nieuw project binnenkomt. Pas het aan op je deploymentcode.
| Stap | Controle |
|---|---|
| 1 | De naam is kort (maximaal 8 tekens) en uniek op het platform |
| 2 | Regio en omgeving zijn toegestaan op je platform |
| 3 | De drie groepen bestaan en hebben de juiste owners (Toegang, groepen en PIM) |
| 4 | De gedeelde Cosmos DB, AI Search, Log Analytics workspace en de twee subnets bestaan |
| 5 | Vereiste private DNS-zones worden opgelost (zie Architectuur) |
| 6 | De benodigde modellen zijn gedeployd in het account en er is quota beschikbaar |
| 7 | Het plan toont alleen de verwachte projectresources, daarna apply via je normale pipeline en review: Wijzigingsworkflow |