Verwalten von Batch-Ressourcen mit PowerShell-Cmdlets
Mit den Azure Batch-PowerShell-Cmdlets können Sie viele gängige Batch-Aufgaben durchführen bzw. entsprechende Skripts erstellen. Dies ist eine kurze Einführung in die Cmdlets, mit denen Sie Ihre Batch-Konten verwalten und Batch-Ressourcen wie Pools, Aufträge und Aufgaben verwenden.
Eine vollständige Liste mit Batch-Cmdlets und deren ausführliche Cmdlet-Syntax finden Sie in der Referenz zu Azure Batch Cmdlets(Azure Batch-Cmdlets).
Es empfiehlt sich, die Azure PowerShell-Module regelmäßig zu aktualisieren, um in den Genuss von Dienstupdates und Verbesserungen zu kommen.
Voraussetzungen
Installieren und konfigurieren Sie das Azure PowerShell-Modul. Informationen zum Installieren eines bestimmten Azure Batch-Moduls (etwa eines vorab veröffentlichten Moduls) finden Sie im PowerShell-Katalog.
Führen Sie das Cmdlet Connect-AzAccount aus, um eine Verbindung mit Ihrem Abonnement herzustellen (die Azure Batch-Cmdlets sind Teil des Azure Resource Manager-Moduls):
Connect-AzAccount
Führen Sie die Registrierung beim Batch-Anbieternamespace durch. Dieser Vorgang muss lediglich einmal pro Abonnement ausgeführt werden.
Register-AzResourceProvider -ProviderNamespace Microsoft.Batch
Verwalten von Batch-Konten und Schlüsseln
Erstellen eines Batch-Kontos
New-AzBatchAccount erstellt ein Batch-Konto in einer angegebenen Ressourcengruppe. Falls Sie noch nicht über eine Ressourcengruppe verfügen, können Sie eine erstellen, indem Sie das Cmdlet New-AzResourceGroup ausführen. Geben Sie eine Azure-Region im Parameter Standort an, z.B. „USA, Mitte“. Beispiel:
New-AzResourceGroup –Name MyBatchResourceGroup –Location "Central US"
Erstellen Sie anschließend ein Batch-Konto in der Ressourcengruppe. Geben Sie in <account_name> (Kontoname) einen Namen für das Konto sowie den Speicherort und den Namen der Ressourcengruppe an. Die Erstellung des Batch-Kontos kann einige Zeit dauern. Beispiel:
New-AzBatchAccount –AccountName <account_name> –Location "Central US" –ResourceGroupName <res_group_name>
Hinweis
Der Batch-Kontoname muss in der Azure-Region für die Ressourcengruppe eindeutig sein, zwischen 3 und 24 Zeichen umfassen und darf nur Kleinbuchstaben und Zahlen enthalten.
Abrufen von Kontozugriffsschlüsseln
Get-AzBatchAccountKeys zeigt die Zugriffsschlüssel an, die einem Azure Batch-Konto zugeordnet sind. Führen Sie beispielsweise Folgendes aus, um den primären und sekundären Schlüssel des Kontos abzurufen, das Sie erstellt haben.
$Account = Get-AzBatchAccountKeys –AccountName <account_name>
$Account.PrimaryAccountKey
$Account.SecondaryAccountKey
Generieren eines neuen Zugriffsschlüssels
New-AzBatchAccountKey generiert einen neuen primären oder sekundären Kontoschlüssel für ein Azure Batch-Konto. Geben Sie zum Generieren eines neuen primären Schlüssels für Ihr Batch-Konto z. B. Folgendes ein:
New-AzBatchAccountKey -AccountName <account_name> -KeyType Primary
Hinweis
Um einen neuen sekundären Schlüssel zu generieren, geben Sie "Secondary" für den KeyType -Parameter ein. Sie müssen den primären und sekundären Schlüssel separat neu generieren.
Löschen eines Batch-Kontos
Remove-AzBatchAccount löscht ein Batch-Konto. Beispiel:
Remove-AzBatchAccount -AccountName <account_name>
Bestätigen Sie bei der entsprechenden Aufforderung, dass Sie das Konto entfernen möchten. Das Entfernen des Kontos kann einige Zeit in Anspruch nehmen.
Erstellen eines BatchAccountContext-Objekts
Die Batch-APIs können entweder unter Verwendung der Authentifizierung mit gemeinsam verwendetem Schlüssel oder unter Verwendung der Microsoft Entra-Authentifizierung verwaltet werden. Wenn Sie Batch-PowerShell-Cmdlets für die Authentifizierung verwenden möchten, müssen Sie zunächst ein BatchAccountContext-Objekt erstellen, in dem Sie Ihre Kontoanmeldeinformationen oder Ihre Identität speichern können. Übergeben Sie das BatchAccountContext-Objekt in Cmdlets, die den Parameter BatchContext verwenden.
Authentifizierung mit gemeinsam verwendetem Schlüssel
$context = Get-AzBatchAccountKeys -AccountName <account_name>
Hinweis
Standardmäßig wird der primäre Schlüssel des Kontos für die Authentifizierung verwendet. Sie können aber ausdrücklich den zu verwendenden Schlüssel auswählen, indem Sie die KeyInUse-Eigenschaft des BatchAccountContext-Objekts ändern: $context.KeyInUse = "Secondary"
.
Microsoft Entra-Authentifizierung
$context = Get-AzBatchAccount -AccountName <account_name>
Erstellen und Ändern von Batch-Ressourcen
Verwenden Sie Cmdlets wie New-AzBatchPool, New-AzBatchJob und New-AzBatchTask, um unter einem Batch-Konto Ressourcen zu erstellen. Die entsprechenden Cmdlets Get- und Set- zum Aktualisieren der Eigenschaften vorhandener Ressourcen sind vorhanden, sowie auch Cmdlets vom Typ Remove-, um unter einem Batch-Konto Ressourcen zu entfernen.
Bei der Verwendung von vielen dieser Cmdlets müssen Sie zusätzlich zum Übergeben eines BatchContext-Objekts auch Objekte erstellen oder übergeben, die ausführliche Ressourceneinstellungen enthalten. Dies wird im folgenden Beispiel veranschaulicht. In der detaillierten Hilfe für die einzelnen Cmdlets finden Sie weitere Beispiele.
Batch-Pool erstellen
Beim Erstellen oder Aktualisieren eines Batch-Pools geben Sie eine Konfiguration an. Pools sollten im Allgemeinen mit VM-Konfiguration konfiguriert werden. Hierbei können Sie entweder eines der unterstützten Linux- oder Windows-VM-Images aus dem Marketplace für virtuelle Azure-Computer angeben oder ein eigenes benutzerdefiniertes Image bereitstellen. Über Konfigurationspools für Cloud Services werden nur Windows-Computeknoten bereitgestellt, und es werden nicht alle Batch-Features unterstützt.
Übergeben Sie beim Ausführen von New-AzBatchPool die Betriebssystemeinstellungen in einem „PSVirtualMachineConfiguration“- oder „PSCloudServiceConfiguration“-Objekt. Der folgende Codeausschnitt erstellt beispielsweise einen Batch-Pool mit Computeknoten der Größe „Standard_A1“ in der VM-Konfiguration mit Ubuntu Server 20.04-LTS-Image. Hier gibt der Parameter VirtualMachineConfiguration die Variable $configuration als PSVirtualMachineConfiguration-Objekt an. Mit dem Parameter BatchContext wird eine zuvor definierte Variable $context als BatchAccountContext-Objekt angegeben.
$imageRef = New-Object -TypeName "Microsoft.Azure.Commands.Batch.Models.PSImageReference" -ArgumentList @("UbuntuServer","Canonical","20.04-LTS")
$configuration = New-Object -TypeName "Microsoft.Azure.Commands.Batch.Models.PSVirtualMachineConfiguration" -ArgumentList @($imageRef, "batch.node.ubuntu 20.04")
New-AzBatchPool -Id "mypspool" -VirtualMachineSize "Standard_a1" -VirtualMachineConfiguration $configuration -AutoScaleFormula '$TargetDedicated=4;' -BatchContext $context
Die Zielanzahl von Computeknoten im neuen Pool wird mit einer Formel für die automatische Skalierung berechnet. In diesem Fall lautet die Formel einfach $TargetDedicated=4und gibt an, dass die Anzahl von Computeknoten im Pool maximal „4“ beträgt.
Abfragen von Pools, Aufträgen, Aufgaben und weiteren Details
Verwenden Sie Cmdlets wie Get-AzBatchPool, Get-AzBatchJob und Get-AzBatchTask zum Abfragen von Entitäten, die in einem Batch-Konto erstellt wurden.
Abfragen von Daten
Verwenden Sie beispielsweise Get-AzBatchPools zum Suchen Ihrer Pools. Damit werden standardmäßig alle Pools unter Ihrem Konto abgefragt, sofern Sie das BatchAccountContext-Objekt bereits in $contextgespeichert haben:
Get-AzBatchPool -BatchContext $context
Verwenden eines OData-Filters
Mit dem Filter -Parameter können Sie einen OData-Filter angeben, um nur bestimmte gewünschte Objekte zu suchen. Sie können beispielsweise alle Pools suchen, deren IDs mit „myPool“ beginnen:
$filter = "startswith(id,'myPool')"
Get-AzBatchPool -Filter $filter -BatchContext $context
Diese Methode ist nicht so flexibel wie die Verwendung von "Where-Object" in einer lokalen Pipeline. Die Abfrage wird jedoch direkt an den Batch-Dienst gesendet, sodass die gesamte Filterung auf dem Server erfolgt, was Internetbandbreite einspart.
Verwenden des Id-Parameters
Eine Alternative zu einem OData-Filter stellt die Verwendung des Id -Parameters dar. So führen Sie eine Abfrage für einen bestimmten Pool mit der ID "myPool" aus:
Get-AzBatchPool -Id "myPool" -BatchContext $context
Der Id-Parameter unterstützt ausschließlich die Suche nach der vollständigen ID, jedoch keine Platzhalter oder Filter im OData-Format.
Verwenden des MaxCount-Parameters
Jedes Cmdlet gibt standardmäßig bis zu 1.000 Objekte zurück. Wenn dieser Grenzwert erreicht ist, können Sie entweder den Filter weiter eingrenzen, sodass weniger Objekte zurückgegeben werden, oder mit dem MaxCount -Parameter explizit einen maximalen Wert festlegen. Beispiel:
Get-AzBatchTask -MaxCount 2500 -BatchContext $context
Setzen Sie den MaxCount -Parameter auf 0 oder eine negative Zahl, um die Obergrenze zu entfernen.
Verwenden der PowerShell-Pipeline
Batch-Cmdlets nutzen die PowerShell-Pipeline zum Senden von Daten zwischen Cmdlets. Dies hat die gleiche Auswirkung wie die Angabe eines Parameters, vereinfacht aber die Verwendung mehrerer Entitäten.
Beispielsweise können Sie nach allen Aufgaben Ihres Kontos suchen und diese anzeigen:
Get-AzBatchJob -BatchContext $context | Get-AzBatchTask -BatchContext $context
Starten Sie jeden Computeknoten eines Pools neu:
Get-AzBatchComputeNode -PoolId "myPool" -BatchContext $context | Restart-AzBatchComputeNode -BatchContext $context
Anwendungspaketverwaltung
Anwendungspakete ermöglichen eine vereinfachte Anwendungsbereitstellung auf den Computeknoten in Ihren Pools. Mit den Batch PowerShell-Cmdlets können Sie Anwendungspakete in Ihrem Batch-Konto hochladen und verwalten und Paketversionen für Computeknoten bereitstellen.
Wichtig
Damit Sie Anwendungspakete verwenden können, müssen Sie zunächst ein Azure Storage-Konto mit Ihrem Batch-Konto verknüpfen.
erstellen :
New-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"
Hinzufügen eines Anwendungspakets:
New-AzBatchApplicationPackage -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -ApplicationVersion "1.0" -Format zip -FilePath package001.zip
Festlegen der Standardversion für die Anwendung:
Set-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -DefaultVersion "1.0"
Auflisten der Pakete einer Anwendung
$application = Get-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"
$application.ApplicationPackages
Löschen eines Anwendungspakets
Remove-AzBatchApplicationPackage -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication" -ApplicationVersion "1.0"
Löschen einer Anwendung
Remove-AzBatchApplication -AccountName <account_name> -ResourceGroupName <res_group_name> -ApplicationId "MyBatchApplication"
Hinweis
Sie müssen alle Anwendungspaketversionen einer Anwendung löschen, bevor Sie die Anwendung löschen. Sie erhalten einen Konfliktfehler, wenn Sie versuchen, eine Anwendung zu löschen, die derzeit über Anwendungspakete verfügt.
Bereitstellen eines Anwendungspakets
Beim Erstellen eines Pools können Sie Anwendungspakete angeben, die Sie bereitstellen möchten. Wenn Sie ein Paket bei der Poolerstellung angeben, wird es auf den einzelnen Knoten bereitgestellt, sobald diese dem Pool hinzugefügt werden. Pakete werden auch bereitgestellt, wenn ein Knoten neu gestartet oder ein Reimaging für den Knoten durchgeführt wird.
Geben Sie bei der Poolerstellung die -ApplicationPackageReference
-Option an, um ein Anwendungspaket auf den Knoten des Pools bereitzustellen, wenn diese dem Pool hinzugefügt werden. Erstellen Sie zunächst ein PSApplicationPackageReference-Objekt, und konfigurieren Sie es mit der Anwendungs-ID und Paketversion, die Sie auf den Computeknoten des Pools bereitstellen möchten:
$appPackageReference = New-Object Microsoft.Azure.Commands.Batch.Models.PSApplicationPackageReference
$appPackageReference.ApplicationId = "MyBatchApplication"
$appPackageReference.Version = "1.0"
Erstellen Sie nun den Pool, und geben Sie das Paketverweisobjekt als Argument für die Option ApplicationPackageReferences
an:
New-AzBatchPool -Id "PoolWithAppPackage" -VirtualMachineSize "Small" -VirtualMachineConfiguration $configuration -BatchContext $context -ApplicationPackageReferences $appPackageReference
Weitere Informationen zu Anwendungspaketen finden Sie unter Bereitstellen von Anwendungen auf Computeknoten mit Batch-Anwendungspaketen.
Aktualisieren der Anwendungspakete eines Pools
Erstellen Sie zum Aktualisieren der Anwendungen, die einem vorhandenen Pool zugewiesen sind, zuerst ein PSApplicationPackageReference-Objekt mit den gewünschten Eigenschaften (Anwendungs-ID und Paketversion):
$appPackageReference = New-Object Microsoft.Azure.Commands.Batch.Models.PSApplicationPackageReference
$appPackageReference.ApplicationId = "MyBatchApplication"
$appPackageReference.Version = "2.0"
Rufen Sie als Nächstes den Pool aus Batch ab, löschen Sie alle vorhandenen Pakete, fügen Sie den neuen Paketverweis hinzu, und aktualisieren Sie den Batch-Dienst mit den neuen Pooleinstellungen:
$pool = Get-AzBatchPool -BatchContext $context -Id "PoolWithAppPackage"
$pool.ApplicationPackageReferences.Clear()
$pool.ApplicationPackageReferences.Add($appPackageReference)
Set-AzBatchPool -BatchContext $context -Pool $pool
Sie haben die Eigenschaften des Pools jetzt im Batch-Dienst aktualisiert. Um das neue Anwendungspaket tatsächlich auf den Computeknoten des Pools bereitzustellen, müssen Sie diese Knoten aber neu starten oder ein Reimaging dafür durchführen. Sie können jeden Knoten eines Pools mit diesem Befehl neu starten:
Get-AzBatchComputeNode -PoolId "PoolWithAppPackage" -BatchContext $context | Restart-AzBatchComputeNode -BatchContext $context
Tipp
Sie können für die Computeknoten eines Pools mehrere Anwendungspakete bereitstellen. Wenn Sie ein Anwendungspaket hinzufügen möchten, anstatt die derzeit bereitgestellten Pakete zu ersetzen, lassen Sie im obigen Code einfach die Zeile $pool.ApplicationPackageReferences.Clear()
weg.
Nächste Schritte
- Die ausführliche Cmdlet-Syntax und entsprechende Beispiele finden Sie in der Referenz zu Azure Batch-Cmdlets.
- Informieren Sie sich über das Bereitstellen von Anwendungen auf Computeknoten mit Batch-Anwendungspaketen.