Fast jede Lektion dieses Kurses lässt sich als Entwurf durcharbeiten; ausführen kann man vieles nur mit einem Azure-Konto, weil es keinen lokalen Ersatz gibt (Agent Service, Bild- und Videomodelle, Sprache, Content Understanding, Azure AI Search). Diese Lektion legt das Konto der Übungen an: Ressource ai-nordlicht und Projekt reiseassistent der Nordlicht Reisen GmbH (R-08), die Rolle für Ihr Konto, die Prüfung von Kontingent und Verfügbarkeit, das Budget und das Aufräumen. Das Ausführen bleibt freiwillig.
Vorwissen. Das Testkonto, Kosten, Gruppen als Behälter einer Übung und „Kontingent und Regionen“ lehrt „AZ-104, Lektion 0.1“. Ein Budget warnt und stoppt nichts: „K3, Lektion 3.1.2“. Gruppen und az group delete: „K3, Lektion 3.1.3“. Ressource, Projekt, Deployment und Rollen als Bicep zeigt „KI-Track, Lektion T10.1“; die vollständige Bicep-Fassung dieses Kurses steht in Lektion 1.2, Kontingente und ihre Überwachung in Lektion 1.3, die Rollen in Lektion 1.4. Hier steht nur das Minimum für den ersten Start.
Neu in dieser Lektion. Die Übung dieser Lektion liegt in der Gruppe rg-ai103-start. Ist der Name ai-nordlicht weltweit vergeben (Learn nennt den Fehler CustomDomainInUse), nimmt das Skript einen anderen Namen; an R-08 ändert das nichts.
Die Anforderung
Alle Zahlen sind Annahmen der Aufgabe.
| Nr. | Anforderung | Art | Messgröße | Gewicht | Quelle |
|---|---|---|---|---|---|
| 0.2-01 | Ressource und Projekt entstehen aus einem Skript, nicht aus Klicks. | F | 1 Skript, 0 Handschritte | Muss | Übung |
| 0.2-02 | Ihr Konto hat die Rolle Foundry User am Projekt. | R | 1 Rollenzuweisung | Muss | R-07 |
| 0.2-03 | Vor dem ersten Deployment ist bekannt, ob Kontingent und Modell verfügbar sind. | Q | Prüfung je Region und Abonnement | Soll | R-06 |
| 0.2-04 | Eine Kostenwarnung besteht, bevor die erste Ressource entsteht. | R | 1 Budget | Muss | R-09 |
| 0.2-05 | Nach der Übung ist alles weg, und der Name ist wieder frei. | R | Probe der Gruppe und der gelöschten Ressource | Muss | Kosten |
Konto und Budget
Sie brauchen ein eigenes Abonnement: das Testkonto aus AZ-104 Lektion 0.1 oder ein leeres mit Budget. Kontingente und Modellverfügbarkeit sind je Abonnement und Region verschieden; der Kurs verspricht nicht, dass ein bestimmtes Modell bei Ihnen bereitgestellt werden kann. Das Budget kommt vor der ersten Ressource, als Warnung (K3, Lektion 3.1.2): Es stoppt nichts, und die Mail kommt Stunden nach dem Anfall der Kosten. Der Monatsdeckel des Falls (R-09) ist darum Code im Assistenten (KI-Track, Lektion T10.3), das Azure-Budget nur die zweite Warnung.
Kostentreiber der Übungen (keine Beträge; Preisseiten der Dienste): Tokens je Million bei Standard-Deployments, Kapazität je Stunde bei reservierten, Bilder und Videos je Erzeugung, Sprache je Stunde Audio, der Suchdienst je Stunde und Stufe, Content Understanding je Seite, Application Insights je Gigabyte, Voice Live je Nutzung. Was nach Zeit läuft, wird gelöscht, sobald die Übung fertig ist.
Ressource und Projekt: das Minimum
Die Seite „Create a project for Microsoft Foundry“ zeigt den Weg im Portal, mit Python, mit der Azure CLI und über Vorlagen. Wir nehmen die CLI, weil sie sich als Skript festhalten lässt. Der Ablauf:
- Gruppe anlegen (eine neue für jede Übung,
rg-ai103-<übung>). - Foundry-Ressource anlegen:
az cognitiveservices account createmit--kind AIServices,--sku S0,--custom-domain(weltweit eindeutig),--assign-identityund--allow-project-management true. Nach Learn braucht die Projektverwaltung die verwaltete Identität, und die Einstellung lässt sich nach dem Anlegen nicht mehr ändern. Ohne Identität scheitert das Anlegen des Projekts. - Projekt anlegen:
az cognitiveservices account project create. - Rolle vergeben: Foundry User am Projekt (früher Azure AI User; die Rollen-IDs blieben). Learn rät, die Rollen-ID statt des Namens zu nehmen, solange die Umbenennung ausgerollt wird:
53ca6127-db72-4b80-b1b0-d745d6d5456d.
Voraussetzungen nach Learn: Azure CLI ab 2.80.0, Contributor oder Owner an der Gruppe, für die Rollenzuweisung etwa Owner. Der Projekt-Endpunkt (die Adresse, die die Beispiele ab Lektion 2.1 lesen) steht im Portal auf der Startseite des Projekts. Ob germanywestcentral Projekte der Ressource überhaupt anbietet, listet Learn in der Tabelle „Foundry Agent Service limits, quotas, and regional support“: Die Zeile Germany West Central führt Responses API und Agents als unterstützt. Welche Modelle dort bereitstehen, ist eine andere Frage (nächster Abschnitt).
Kontingent und Verfügbarkeit prüfen
Bevor ein Deployment in einer Lektion verlangt wird, prüfen Sie es für Ihr Abonnement und Ihre Region. Drei Wege nach Learn:
- Portal: die Kontingentseite von Foundry (
ai.azure.com/resource/quota). - CLI:
az cognitiveservices usage list --location <region>zeigt das Kontingent der Region für das aktive Abonnement. Eine Einheit Kapazität steht für 1.000 Tokens je Minute. - REST: Zwei Schnittstellen von Azure Resource Manager. Die Usages API antwortet auf „Wie viel des Kontingents ist verbraucht?“ (je Region, jede Zeile des Kontingents mit Verbrauch und Limit). Die Model Capacities API antwortet auf „Wo lässt sich dieses Modell bereitstellen, und wie viel Kapazität ist frei?“ (je Abonnement, für ein Modell mit Version und Format, über alle Orte). Beide nennen auch ausgelaufene Modelle.
Welche Modelle eine Region kennt, listet az cognitiveservices model list --location <region> --kind OpenAI (so zeigt es eine Seite von Learn; für andere Modellarten ist die Option offen). Die Rolle für die Kontingentansicht ist Cognitive Services Usages Reader auf Abonnementebene (Lektion 1.3). Offen bleibt, was Learn für Modelle von Drittanbietern oder für Sprach- und Bilddienste zur Verfügung stellt: Jede Lektion prüft ihre Dienste selbst.
Aufräumen, Soft-Delete und Purge
Jede Übung hat ihre Gruppe; am Ende steht az group delete --name rg-ai103-<übung> --yes --no-wait und die Probe, dass sie weg ist (az group exists). Bei der Foundry-Ressource gilt dazu, was Learn auf der Seite „Recover or purge deleted Microsoft Foundry resources“ sagt:
- Gelöschte Foundry-Ressourcen bleiben zunächst soft-deleted stehen. In dieser Zeit lassen sie sich wiederherstellen: nach Learn 48 Stunden, und die Gruppe muss dazu noch existieren (eine gelöschte Gruppe muss neu angelegt werden).
- Derselbe Name ist 48 Stunden gesperrt. Wer ihn früher braucht, muss die gelöschte Ressource purgen:
az cognitiveservices account purge --location <region> --name <name> --resource-group <gruppe>. Gelöschte Ressourcen listetaz cognitiveservices account list-deleted. - Purge ist endgültig: alle Daten und Schlüssel der Ressource sind weg. Erlaubt ist er mit Cognitive Services Contributor oder mit Contributor, im zweiten Fall nur, wenn die Rolle am Abonnement vergeben ist.
- Provisionierte Deployments einer gelöschten Ressource kosten weiter, bis sie gepurgt ist. Darum zuerst die Deployments löschen, dann die Ressource.
- Projekte kennen kein Soft-Delete: Ein gelöschtes Projekt ist weg.
Offen: Ob das Löschen der Gruppe die Ressource ebenfalls in den Soft-Delete schickt und den Namen sperrt, sagt die gelesene Seite nicht ausdrücklich; die Probe list-deleted nach dem Löschen beantwortet es für Ihr Konto.
Stand der Prüfung
Beide Skripte der Übungen sind PowerShell. Sie wurden nicht gegen Azure ausgeführt: kein Konto, keine Anmeldung. Geprüft wurden die Syntax und der Probelauf -WhatIf, der mit einem Ersatz für az zeigte, dass dabei kein verändernder Befehl aufgerufen wird. Das beweist nur, dass die Skripte aufgebaut sind wie beschrieben; ob die Befehle gegen Ihre CLI-Version laufen, zeigt erst ein Lauf. Bicep: in dieser Lektion keines, nicht übersetzt (die vollständige Fassung steht in Lektion 1.2). Offen: Modellverfügbarkeit in germanywestcentral, Soft-Delete nach dem Löschen der Gruppe, Kontingentabfrage für Nicht-OpenAI-Modelle.
Übung 1
Schreiben Sie das Skript uebung-start.ps1: Es legt die Gruppe rg-ai103-start, die Foundry-Ressource (Name als Parameter, Vorgabe ai-nordlicht), das Projekt reiseassistent und die Rolle Foundry User für ein Konto an. Jede Änderung steht hinter ShouldProcess, damit -WhatIf nichts ändert. Sie rufen es zunächst nur mit -WhatIf auf.
Lösung 1
#Requires -Version 7.4
[CmdletBinding(SupportsShouldProcess)]
param(
[Parameter(Mandatory)] [string] $Assignee,
[string] $Name = 'ai-nordlicht',
[string] $Location = 'germanywestcentral'
)
$gruppe = 'rg-ai103-start'
$foundryUser = '53ca6127-db72-4b80-b1b0-d745d6d5456d'
if ($PSCmdlet.ShouldProcess($gruppe, 'Gruppe anlegen')) {
az group create --name $gruppe --location $Location --tags kurs=ai103 | Out-Null
}
if ($PSCmdlet.ShouldProcess($Name, 'Foundry-Ressource anlegen')) {
az cognitiveservices account create --name $Name --resource-group $gruppe `
--kind AIServices --sku S0 --location $Location --custom-domain $Name `
--assign-identity --allow-project-management true | Out-Null
}
if ($PSCmdlet.ShouldProcess('reiseassistent', 'Projekt anlegen')) {
az cognitiveservices account project create --name $Name `
--resource-group $gruppe --project-name reiseassistent `
--location $Location | Out-Null
}
if ($PSCmdlet.ShouldProcess($Assignee, 'Rolle Foundry User am Projekt')) {
$projektId = az cognitiveservices account project show --name $Name `
--resource-group $gruppe --project-name reiseassistent --query id -o tsv
az role assignment create --role $foundryUser --assignee $Assignee `
--assignee-principal-type User --scope $projektId | Out-Null
}
Das Skript ist wiederholbar bis auf die Ressource: Ein zweiter Lauf mit demselben Namen und derselben Gruppe meldet, was schon da ist; die Einstellung --allow-project-management ändert sich nicht. Der Name der Gruppe ist fest, damit das Aufräumen sie nicht raten muss.
Übung 2
Schreiben Sie das Gegenstück uebung-ende.ps1: Es löscht zuerst die Deployments der Ressource, dann die Gruppe, wartet, prüft mit az group exists, dass sie weg ist, und listet die gelöschten Foundry-Ressourcen. Jede Änderung fragt nach (ConfirmImpact High); purgen tut es nur mit dem Schalter -Purge.
Lösung 2
#Requires -Version 7.4
[CmdletBinding(SupportsShouldProcess, ConfirmImpact = 'High')]
param(
[string] $Name = 'ai-nordlicht',
[string] $Location = 'germanywestcentral',
[switch] $Purge
)
$gruppe = 'rg-ai103-start'
if ($PSCmdlet.ShouldProcess($Name, 'Deployments löschen')) {
$namen = az cognitiveservices account deployment list -n $Name -g $gruppe `
--query '[].name' -o tsv
foreach ($d in $namen) {
az cognitiveservices account deployment delete -n $Name -g $gruppe `
--deployment-name $d
}
}
if ($PSCmdlet.ShouldProcess($gruppe, 'Gruppe mit allem darin löschen')) {
az group delete --name $gruppe --yes --no-wait
az group wait --name $gruppe --deleted
}
Write-Host "Gruppe vorhanden: $(az group exists --name $gruppe)"
az cognitiveservices account list-deleted --query "[?name=='$Name']" -o table
if ($Purge -and $PSCmdlet.ShouldProcess($Name, 'ENDGÜLTIG löschen (Purge)')) {
az cognitiveservices account purge --location $Location --name $Name `
--resource-group $gruppe
}
Die Probe nach dem Löschen steht außerhalb der Rückfrage, weil sie nur liest. Der Purge ist eine eigene Entscheidung, nicht Teil des Aufräumens: Ohne ihn kostet nichts mehr, nur der Name ist gesperrt.
Typische Denkfehler
- „Gruppe gelöscht, also ist alles weg.“ Die Foundry-Ressource kann soft-deleted stehen und den Namen sperren; provisionierte Deployments kosten bis zum Purge.
- „Purge zur Sicherheit, dann ist alles sauber.“ Purge ist endgültig; Wiederherstellen geht nur davor und nur 48 Stunden lang.
- „Das Budget hält die Kosten im Zaum.“ Es warnt, spät und nur per Mail; der Deckel ist Code.
- „Das Kontingent steht in der Dokumentation.“ Es gilt je Abonnement und Region und steht nur in Ihrem Konto.
Weiterlesen
- https://learn.microsoft.com/azure/foundry/how-to/create-projects
- https://learn.microsoft.com/azure/ai-services/recover-purge-resources
- https://learn.microsoft.com/azure/foundry/openai/how-to/quota
- https://learn.microsoft.com/azure/foundry/openai/how-to/automate-quota-deployments
- https://learn.microsoft.com/azure/foundry/agents/concepts/limits-quotas-regions
- https://learn.microsoft.com/azure/foundry/concepts/rbac-foundry