Ga naar inhoud

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:

  1. Resource group, identities, Application Insights, storage account en zijn private endpoint.
  2. Het project, daarna 10 seconden wachten tot de projectidentity beschikbaar is in Entra ID.
  3. Connections (storage, Cosmos DB, AI Search, Application Insights) en de roltoewijzingen op de datastores.
  4. 60 seconden wachten tot roltoewijzingen van kracht zijn.
  5. De capability host caphostproject-<project>.
  6. 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