Freigeben über


Bereitstellen von Anwendungen auf Computeknoten mit Batch-Anwendungspaketen

Anwendungspakete können den Code in Ihrer Azure Batch-Lösung vereinfachen und die Verwaltung der Von Ihren Aufgaben ausgeführten Anwendungen vereinfachen. Mit Anwendungspaketen können Sie mehrere Versionen der Anwendungen hochladen und verwalten, die Ihre Aufgaben ausführen, einschließlich der unterstützenden Dateien. Sie können dann automatisch eine oder mehrere dieser Anwendungen für die Computeknoten in Ihrem Pool bereitstellen.

Die APIs zum Erstellen und Verwalten von Anwendungspaketen sind Teil der Batchverwaltungs-.NET-Bibliothek . Die APIs zum Installieren von Anwendungspaketen auf einem Computeknoten sind Teil der Batch-.NET-Bibliothek . Vergleichbare Features befinden sich in den verfügbaren Batch-APIs für andere Programmiersprachen.

In diesem Artikel wird erläutert, wie Sie Anwendungspakete im Azure-Portal hochladen und verwalten. Außerdem wird gezeigt, wie sie auf den Computeknoten eines Pools mit der Batch-.NET-Bibliothek installiert werden.

Anwendungspaketanforderungen

Um Anwendungspakete zu verwenden, müssen Sie ein Azure Storage-Konto mit Ihrem Batchkonto verknüpfen.

Es gibt Einschränkungen für die Anzahl von Anwendungen und Anwendungspaketen innerhalb eines Batchkontos und für die maximale Anwendungspaketgröße. Weitere Informationen finden Sie im Artikel Batch-Dienst – Kontingente und Limits.

Hinweis

Batchpools, die vor dem 5. Juli 2017 erstellt wurden, unterstützen keine Anwendungspakete (es sei denn, sie wurden nach dem 10. März 2016 mithilfe der Cloud Services-Konfiguration erstellt). Das hier beschriebene Feature für Anwendungspakete ersetzt das Feature "Batch-Apps", das in früheren Versionen des Diensts verfügbar ist.

Grundlegendes zu Anwendungen und Anwendungspaketen

In Azure Batch ist eine Anwendung ein Satz von Binärdateien mit Versionsangabe, die automatisch auf die Computeknoten in Ihrem Pool heruntergeladen werden können. Eine Anwendung enthält ein oder mehrere Anwendungspakete, die unterschiedliche Versionen der Anwendung darstellen.

Jedes Anwendungspaket ist eine .zip Datei, die die Binärdateien der Anwendung und alle unterstützenden Dateien enthält. Nur das .zip-Format wird unterstützt.

Diagramm, das eine allgemeine Ansicht von Anwendungen und Anwendungspaketen zeigt.

Sie können Anwendungspakete auf Pool- oder Taskebene angeben.

  • Poolanwendungspakete werden für jeden Knoten im Pool bereitgestellt. Anwendungen werden bereitgestellt, wenn ein Knoten einem Pool hinzugefügt wird, wenn ein Knoten neu gestartet wird oder wenn ein Reimaging des Knotens durchgeführt wird.

    Poolanwendungspakete eignen sich dann, wenn alle Knoten in einem Pool die Aufgaben eines Auftrags durchführen. Sie können ein oder mehrere Anwendungspakete angeben, die beim Erstellen eines Pools bereitgestellt werden sollen. Sie können auch die Pakete eines vorhandenen Pools hinzufügen oder aktualisieren. Zum Installieren eines neuen Pakets in einem vorhandenen Pool müssen Sie dessen Knoten neu starten.

  • Aufgabenanwendungspakete werden nur für einen Computeknoten bereitgestellt, der für die Ausführung einer Aufgabe geplant ist, direkt vor dem Ausführen der Befehlszeile der Aufgabe. Wenn sich das angegebene Anwendungspaket und die angegebene Version bereits auf dem Knoten befinden, wird es nicht erneut bereitgestellt, und das vorhandene Paket wird verwendet.

    Aufgabenanwendungspakete sind in Umgebungen mit freigegebenen Pools nützlich, in denen unterschiedliche Aufträge auf einem Pool ausgeführt werden und der Pool beim Abschluss eines Auftrags nicht gelöscht wird. Wenn Ihr Auftrag weniger Aufgaben als Knoten im Pool hat, können Aufgabenanwendungspakete die Datenübertragung minimieren, da Ihre Anwendung nur für die Knoten bereitgestellt wird, die Aufgaben ausführen.

    Andere Szenarien, die von Aufgabenanwendungspaketen profitieren können, sind Aufträge, die eine große Anwendung ausführen, aber nur für wenige Aufgaben. Beispielsweise können Aufgabenanwendungen für eine Schwergewichtsvorverarbeitungsstufe oder eine Zusammenführungsaufgabe nützlich sein.

Bei Anwendungspaketen muss der Startvorgang des Pools keine lange Liste einzelner Ressourcendateien angeben, die auf den Knoten installiert werden sollen. Sie müssen nicht manuell mehrere Versionen Ihrer Anwendungsdateien in Azure Storage oder auf Ihren Knoten verwalten. Und Sie müssen sich keine Gedanken über das Generieren von SAS-URLs machen, um Zugriff auf die Dateien in Ihrem Azure Storage-Konto bereitzustellen. Batch funktioniert im Hintergrund mit Azure Storage, um Anwendungspakete zu speichern und für Computeknoten bereitzustellen.

Hinweis

Die Gesamtgröße eines Startvorgangs muss kleiner oder gleich 32.768 Zeichen sein, einschließlich Ressourcendateien und Umgebungsvariablen. Wenn ihre Startaufgabe diesen Grenzwert überschreitet, ist die Verwendung von Anwendungspaketen eine weitere Option. Sie können auch eine .zip Datei erstellen, die Ihre Ressourcendateien enthält, die Datei als Blob in Azure Storage hochladen und dann aus der Befehlszeile Ihrer Startaufgabe entzippen.

Hochladen und Verwalten von Anwendungen

Sie können das Azure-Portal oder die Batchverwaltungs-APIs verwenden, um die Anwendungspakete in Ihrem Batchkonto zu verwalten. In den folgenden Abschnitten wird erläutert, wie Sie ein Speicherkonto verknüpfen. Hier erfahren Sie, wie Sie Anwendungen und Anwendungspakete im Azure-Portal hinzufügen und verwalten.

Hinweis

Zwar können Sie Anwendungswerte in der Ressource "Microsoft.Batch/batchAccounts" einer ARM-Vorlage definieren, aber es ist derzeit nicht möglich, eine ARM-Vorlage zum Hochladen von Anwendungspaketen zur Verwendung in Ihrem Batchkonto zu verwenden. Sie müssen sie in Ihr verknüpftes Speicherkonto hochladen, wie in "Neue Anwendung hinzufügen" beschrieben.

Um Anwendungspakete zu verwenden, müssen Sie ein Azure Storage-Konto mit Ihrem Batchkonto verknüpfen. Der Batch-Dienst verwendet das zugeordnete Speicherkonto zum Speichern Ihrer Anwendungspakete. Im Idealfall sollten Sie ein Speicherkonto speziell für die Verwendung mit Ihrem Batchkonto erstellen.

Wenn Sie noch kein Speicherkonto konfiguriert haben, zeigt das Azure-Portal beim ersten Auswählen von Anwendungen im linken Navigationsmenü in Ihrem Batchkonto eine Warnung an. So verknüpfen Sie ein Speicherkonto mit Ihrem Batch-Konto

  1. Wählen Sie das Warnfenster aus, das besagt: "Für dieses Batchkonto wurde kein Speicherkonto konfiguriert."
  2. Wählen Sie dann "Speicherkonto festlegen... auf der nächsten Seite" aus.
  3. Wählen Sie im Abschnitt " Speicherkontoinformationen " den Link " Speicherkonto auswählen" aus.
  4. Wählen Sie das Speicherkonto aus, das Sie mit diesem Batchkonto verwenden möchten, in der Liste im Bereich "Speicherkonto auswählen ".
  5. Wählen Sie dann in der oberen linken Ecke der Seite " Speichern" aus.

Nachdem Sie die beiden Konten verknüpft haben, kann Batch die im verknüpften Speicherkonto gespeicherten Pakete automatisch auf Ihren Computeknoten bereitstellen.

Von Bedeutung

Sie können keine Anwendungspakete mit Azure Storage-Konten verwenden, die mit Firewallregeln oder mit aktiviertem hierarchischen Namespace konfiguriert sind.

Der Batchdienst verwendet Azure Storage, um Ihre Anwendungspakete als Block-Blobs zu speichern. Blockblobdaten werden in der üblichen Höhe in Rechnung gestellt, und die Größe der einzelnen Pakete darf die maximale Blockblobgröße nicht überschreiten. Weitere Informationen finden Sie unter Skalierbarkeits- und Leistungsziele für Blob Storage. Um die Kosten zu minimieren, achten Sie darauf, die Größe und Anzahl Ihrer Anwendungspakete zu berücksichtigen und in regelmäßigen Abständen veraltete Pakete zu entfernen.

Hinzufügen einer neuen Anwendung

Zum Erstellen einer neuen Anwendung fügen Sie ein Anwendungspaket hinzu und geben eine eindeutige Anwendungs-ID an.

Wählen Sie in Ihrem Batchkonto im linken Navigationsmenü "Anwendungen" und dann "Hinzufügen" aus.

Screenshot des Prozesses zur Erstellung neuer Anwendungen im Azure-Portal.

Geben Sie die folgenden Informationen ein:

  • Anwendungs-ID: Die ID Ihrer neuen Anwendung.
  • Version": Die Version für das Anwendungspaket, das Sie hochladen.
  • Anwendungspaket: Die .zip Datei mit den Anwendungsbinärdateien und unterstützenden Dateien, die zum Ausführen der Anwendung erforderlich sind.

Die eingegebene Anwendungs-ID und Version müssen den folgenden Anforderungen entsprechen:

  • Bei Windows-Knoten kann die ID jede Kombination alphanumerischer Zeichen, Bindestriche und Unterstriche enthalten. Bei Linux-Knoten sind nur alphanumerische Zeichen und Unterstriche erlaubt.
  • Darf nicht mehr als 64 Zeichen enthalten.
  • Sie muss innerhalb des Batch-Kontos eindeutig sein.
  • Bei IDs wird die Groß-/Kleinschreibung beibehalten, aber nicht unterschieden.

Wenn Sie fertig sind, wählen Sie "Absenden" aus. Nachdem die .zip Datei in Ihr Azure Storage-Konto hochgeladen wurde, zeigt das Portal eine Benachrichtigung an. Abhängig von der Größe der Datei, die Sie hochladen, und der Geschwindigkeit Ihrer Netzwerkverbindung kann dieser Vorgang einige Zeit in Anspruch nehmen.

Aktuelle Anwendungen anzeigen

Um die Anwendungen in Ihrem Batchkonto anzuzeigen, wählen Sie "Anwendungen" im linken Navigationsmenü aus.

Screenshot des Menüelements

Wenn Sie diese Menüoption auswählen, wird das Fenster "Anwendungen " geöffnet. In diesem Fenster werden die ID jeder Anwendung in Ihrem Konto und die folgenden Eigenschaften angezeigt:

  • Pakete: Die Anzahl der Versionen, die dieser Anwendung zugeordnet sind.
  • Standardversion: Falls zutreffend, wird die Anwendungsversion installiert, wenn beim Bereitstellen der Anwendung keine Version angegeben wird.
  • Updates zulassen: Gibt an, ob Paketupdates und -löschungen zulässig sind.

Um die Dateistruktur des Anwendungspakets auf einem Computeknoten anzuzeigen, navigieren Sie zum Batchkonto im Azure-Portal. Wählen Sie "Pools" aus. Wählen Sie dann den Pool aus, der den Computeknoten enthält. Wählen Sie den Computeknoten aus, auf dem das Anwendungspaket installiert ist, und öffnen Sie den Anwendungsordner .

Anzeigen von Anwendungsdetails

Um die Details für eine Anwendung anzuzeigen, wählen Sie sie im Fenster "Anwendungen " aus. Sie können Ihre Anwendung konfigurieren, indem Sie im linken Navigationsmenü "Einstellungen" auswählen.

  • Updates zulassen: Gibt an, ob Anwendungspakete aktualisiert oder gelöscht werden können. Die Option ist standardmäßig auf Jafestgelegt. Wenn " Nein" festgelegt ist, können vorhandene Anwendungspakete nicht aktualisiert oder gelöscht werden, aber neue Anwendungspaketversionen können weiterhin hinzugefügt werden.
  • Standardversion: Das Standardanwendungspaket, das verwendet werden soll, wenn die Anwendung bereitgestellt wird, wenn keine Version angegeben ist.
  • Anzeigename: Ein Anzeigename, der von Ihrer Batch-Lösung beim Anzeigen von Informationen zur Anwendung verwendet werden kann. Beispielsweise kann dieser Name in der Benutzeroberfläche eines Diensts verwendet werden, den Sie Ihren Kunden über Batch bereitstellen.

Hinzufügen eines neuen Anwendungspakets

Wenn Sie eine Anwendungspaketversion für eine vorhandene Anwendung hinzufügen möchten, wählen Sie die Anwendung auf der Seite "Anwendungen" Ihres Batchkontos aus. Wählen Sie dann Hinzufügen aus.

Geben Sie wie für die neue Anwendung die Version für ihr neues Paket an, laden Sie ihre .zip Datei in das Feld "Anwendungspaket " hoch, und wählen Sie dann "Absenden" aus.

Aktualisieren oder Löschen eines Anwendungspakets

Um ein vorhandenes Anwendungspaket zu aktualisieren oder zu löschen, wählen Sie die Anwendung auf der Seite "Anwendungen" Ihres Batchkontos aus. Wählen Sie das Ellipsis-Symbol in der Zeile des Anwendungspakets aus, das Sie ändern möchten. Wählen Sie dann die Aktion aus, die Sie ausführen möchten.

Screenshot der Update- und Löschoptionen für Anwendungspakete im Azure-Portal.

Wenn Sie "Aktualisieren" auswählen, können Sie eine neue .zip Datei hochladen. Diese Datei ersetzt die vorherige .zip Datei, die Sie für diese Version hochgeladen haben.

Wenn Sie "Löschen" auswählen, werden Sie aufgefordert, den Löschvorgang dieser Version zu bestätigen. Nachdem Sie "OK" ausgewählt haben, löscht Batch die .zip Datei aus Ihrem Azure Storage-Konto. Wenn Sie die Standardversion einer Anwendung löschen, wird die Standardversionseinstellung für diese Anwendung entfernt.

Installieren von Anwendungen auf Computeknoten

Sie haben gelernt, wie Sie Anwendungspakete im Azure-Portal verwalten. Jetzt können Sie lernen, wie Sie sie auf Computeknoten implementieren und mit Batch-Prozessen ausführen.

Installieren von Poolanwendungspaketen

Um ein Anwendungspaket auf allen Computeknoten in einem Pool zu installieren, geben Sie einen oder mehrere Anwendungspaketverweise für den Pool an. Die Anwendungspakete, die Sie für einen Pool angeben, werden auf jedem Computeknoten installiert, der dem Pool beitritt, sowie auf jedem Knoten, der neu gestartet oder neu abgebildet wird.

Geben Sie in Batch .NET eine oder mehrere CloudPool.ApplicationPackageReferences an, wenn Sie einen neuen Pool erstellen oder einen vorhandenen Pool verwenden. Die ApplicationPackageReference-Klasse gibt eine Anwendungs-ID und -Version an, die auf den Computeknoten eines Pools installiert werden soll.

// Create the unbound CloudPool
CloudPool myCloudPool =
    batchClient.PoolOperations.CreatePool(
        poolId: "myPool",
        targetDedicatedComputeNodes: 1,
        virtualMachineSize: "standard_d1_v2",
        VirtualMachineConfiguration: new VirtualMachineConfiguration(
            imageReference: new ImageReference(
                                publisher: "MicrosoftWindowsServer",
                                offer: "WindowsServer",
                                sku: "2019-datacenter-core",
                                version: "latest"),
            nodeAgentSkuId: "batch.node.windows amd64");

// Specify the application and version to install on the compute nodes
myCloudPool.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference {
        ApplicationId = "litware",
        Version = "1.1001.2b" }
};

// Commit the pool so that it's created in the Batch service. As the nodes join
// the pool, the specified application package is installed on each.
await myCloudPool.CommitAsync();

Von Bedeutung

Wenn eine Bereitstellung eines Anwendungspakets fehlschlägt, markiert der Batchdienst den Knoten unbrauchbar , und es werden keine Aufgaben für die Ausführung auf diesem Knoten geplant. Starten Sie in diesem Fall den Knoten neu, um die Paketbereitstellung erneut zu starten. Durch den Neustart des Knotens wird auch die Vorgangsplanung auf dem Knoten wieder aktiviert.

Installieren von Aufgabenanwendungspaketen

Ähnlich wie bei einem Pool geben Sie Anwendungspaketverweise für eine Aufgabe an. Wenn eine Aufgabe auf einem Knoten ausgeführt werden soll, wird das Paket heruntergeladen und extrahiert, unmittelbar bevor die Befehlszeile der Aufgabe ausgeführt wird. Wenn ein angegebenes Paket und eine angegebene Version bereits auf dem Knoten installiert sind, wird das Paket nicht heruntergeladen, und das vorhandene Paket wird verwendet.

Installieren Sie ein Aufgabenanwendungspaket, indem Sie die Eigenschaft CloudTask.ApplicationPackageReferences der Aufgabe konfigurieren:

CloudTask task =
    new CloudTask(
        "litwaretask001",
        "cmd /c %AZ_BATCH_APP_PACKAGE_LITWARE%\\litware.exe -args -here");

task.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference
    {
        ApplicationId = "litware",
        Version = "1.1001.2b"
    }
};

Ausführen der installierten Anwendungen

Die Pakete, die Sie für einen Pool oder eine Aufgabe angeben, werden in ein benanntes Verzeichnis innerhalb AZ_BATCH_ROOT_DIR des Knotens heruntergeladen und extrahiert. Batch erstellt auch eine Umgebungsvariable, die den Pfad zum benannten Verzeichnis enthält. Ihre Aufgabenbefehlszeilen verwenden diese Umgebungsvariable, wenn sie auf die Anwendung auf dem Knoten verweist.

Auf Windows-Knoten weist die Variable das folgende Format auf:

Windows:
AZ_BATCH_APP_PACKAGE_APPLICATIONID#version

Auf Linux-Knoten unterscheidet sich das Format geringfügig. Punkte (.), Bindestriche (-) und Nummernzeichen (#) werden in der Umgebungsvariablen zu Unterstrichen vereinfacht. Die Groß-/Kleinschreibung der Anwendungs-ID wird beibehalten. Beispiel:

Linux:
AZ_BATCH_APP_PACKAGE_applicationid_version

APPLICATIONID und version sind Werte, die der Anwendung und Paketversion entsprechen, die Sie für die Bereitstellung angegeben haben. Wenn Sie z. B. angeben, dass Version 2.7 des Anwendungs-Blenders auf Windows-Knoten installiert werden soll, würden Ihre Aufgabenbefehlszeilen diese Umgebungsvariable verwenden, um auf ihre Dateien zuzugreifen:

Windows:
AZ_BATCH_APP_PACKAGE_BLENDER#2.7

Geben Sie auf Linux-Knoten die Umgebungsvariable in diesem Format an. Ersetzen Sie Punkte (.), Bindestriche (-) und Nummernzeichen (#) durch Unterstriche, und behalten Sie die Groß-/Kleinschreibung der Anwendungs-ID bei:

Linux:
AZ_BATCH_APP_PACKAGE_blender_2_7

Wenn Sie ein Anwendungspaket hochladen, können Sie eine Standardversion angeben, die auf Ihren Computeknoten bereitgestellt werden soll. Wenn Sie eine Standardversion für eine Anwendung angegeben haben, können Sie das Versionssuffix weglassen, wenn Sie auf die Anwendung verweisen. Sie können die Standardanwendungsversion im Azure-Portal im Fenster "Anwendungen " angeben, wie in "Hochladen und Verwalten von Anwendungen" gezeigt.

Wenn Sie z. B. "2.7" als Standardversion für Anwendungsmixer festlegen und Ihre Aufgaben auf die folgende Umgebungsvariable verweisen, verwenden Ihre Windows-Knoten Version 2.7:

AZ_BATCH_APP_PACKAGE_BLENDER

Der folgende Codeausschnitt zeigt eine Beispielaufgaben-Befehlszeile, die die Standardversion der Blenderanwendung startet:

string taskId = "blendertask01";
string commandLine =
    @"cmd /c %AZ_BATCH_APP_PACKAGE_BLENDER%\blender.exe -args -here";
CloudTask blenderTask = new CloudTask(taskId, commandLine);

Tipp

Weitere Informationen zu Einstellungen der Rechenknoten-Umgebung finden Sie unter Umgebungseinstellungen für Aufgaben.

Aktualisieren der Anwendungspakete eines Pools

Wenn bereits ein vorhandener Pool mit einem Anwendungspaket konfiguriert wurde, können Sie ein neues Paket für den Pool angeben. Dies bedeutet:

  • Der Batchdienst installiert das neu angegebene Paket auf allen neuen Knoten, die dem Pool beitreten, und auf jedem vorhandenen Knoten, der neu gestartet oder umimaged ist.
  • Bereits im Pool befindliche Computeknoten installieren das neue Anwendungspaket nicht automatisch, wenn Sie die Paketverweise aktualisieren. Diese Rechnerknoten müssen neu gestartet oder neu installiert werden, um das neue Paket zu erhalten.
  • Wenn ein neues Paket bereitgestellt wird, spiegeln die erstellten Umgebungsvariablen die neuen Anwendungspaketverweise wider.

In diesem Beispiel verfügt der vorhandene Pool über Version 2.7 der Blenderanwendung , die als eine seiner CloudPool.ApplicationPackageReferences konfiguriert ist. Um die Knoten des Pools mit Version 2.76b zu aktualisieren, geben Sie eine neue ApplicationPackageReference mit der neuen Version an, und übernehmen Sie die Änderung.

string newVersion = "2.76b";
CloudPool boundPool = await batchClient.PoolOperations.GetPoolAsync("myPool");
boundPool.ApplicationPackageReferences = new List<ApplicationPackageReference>
{
    new ApplicationPackageReference {
        ApplicationId = "blender",
        Version = newVersion }
};
await boundPool.CommitAsync();

Nachdem die neue Version konfiguriert wurde, installiert der Batchdienst Version 2.76b auf einem beliebigen neuen Knoten, der dem Pool beitritt. Um 2.76b auf den Knoten zu installieren, die sich bereits im Pool befinden, starten Sie diese neu oder erstellen Sie ein neues Abbild. Neu gestartete Knoten behalten Dateien aus vorherigen Paketbereitstellungen bei.

Anwendungen in einem Batchkonto auflisten

Sie können die Anwendungen und deren Pakete in einem Batchkonto mithilfe der ApplicationOperations.ListApplicationSummaries-Methode auflisten.

// List the applications and their application packages in the Batch account.
List<ApplicationSummary> applications = await batchClient.ApplicationOperations.ListApplicationSummaries().ToListAsync();
foreach (ApplicationSummary app in applications)
{
    Console.WriteLine("ID: {0} | Display Name: {1}", app.Id, app.DisplayName);

    foreach (string version in app.Versions)
    {
        Console.WriteLine("  {0}", version);
    }
}

Nächste Schritte