Bereitstellen von Anwendungen auf Computeknoten mit Batch-Anwendungspaketen

Anwendungspakete können sowohl den Code in Ihrer Azure Batch-Lösung vereinfachen als auch die Verwaltung der von Ihren Tasks ausgeführten Anwendungen erleichtern. Mit Anwendungspaketen können Sie mehrere Versionen der von Ihren Tasks ausgeführten Anwendungen hochladen und verwalten, einschließlich der dazugehörigen Unterstützungsdateien. Die Anwendungen können Sie dann für die Computeknoten in Ihrem Pool bereitstellen.

Die APIs zum Erstellen und Verwalten von Anwendungspaketen sind Teil der Bibliothek Batch Management .NET. Die APIs für die Installation von Anwendungspaketen auf einem Computeknoten sind Teil der Bibliothek Batch .NET. In den verfügbaren Batch-APIs für andere Programmiersprachen finden Sie vergleichbare Features.

In diesem Artikel wird erläutert, wie Sie Anwendungspakete über das Azure-Portal hochladen und verwalten. Außerdem wird gezeigt, wie Sie diese Pakete mit der Bibliothek Batch .NET auf den Computeknoten eines Pools installieren.

Anforderungen für Anwendungspakete

Vor der Verwendung von Anwendungspaketen müssen Sie ein Azure Storage-Konto mit Ihrem Batch-Konto verknüpfen.

Es gibt Einschränkungen für die Anzahl der Anwendungen und Anwendungspakete in einem Batch-Konto sowie bezüglich der maximalen Anwendungspaketgröße. Weitere Informationen finden Sie im Artikel Batch-Dienst – Kontingente und Limits.

Hinweis

Batch-Pools, die vor dem 5. Juli 2017 erstellt wurden, unterstützen keine Anwendungspakete (es sei denn, sie wurden nach dem 10. März 2016 über die Clouddienstkonfiguration erstellt). Das hier beschriebene Feature für Anwendungspakete ersetzt das Feature für Batch-Apps, das in früheren Versionen des Diensts verfügbar war.

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 mindestens ein Anwendungspaket, das verschiedene Anwendungsversionen darstellt.

Jedes Anwendungspaket ist eine ZIP-Datei mit den Anwendungsbinärdateien und allen unterstützenden Dateien. Nur das ZIP-Format wird unterstützt.

Abbildung: allgemeine Übersicht über Anwendungen und Anwendungspakete

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

  • Pool-Anwendungspakete werden auf jedem 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. Beim Erstellen eines Pools können Sie Anwendungspakete angeben, die 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.

  • Task-Anwendungspakete werden nur für einen Serverknoten ausgeführt, für den die Ausführung des Tasks geplant ist, bevor die Befehlszeile des Tasks ausgeführt wird. Wenn das angegebene Anwendungspaket in der angegebenen Version auf dem Knoten bereits vorhanden ist, erfolgt keine erneute Bereitstellung, und das vorhandene Paket wird verwendet.

    Task-Anwendungspakete sind in Umgebungen mit gemeinsam genutzten Pools praktisch, bei denen verschiedene Aufträge in einem einzigen Pool ausgeführt werden und der Pool nach Abschluss eines Auftrags nicht gelöscht wird. Wenn es bei Ihrem Auftrag weniger Tasks als Knoten im Pool gibt, können Task-Anwendungspakete die Datenübertragung minimieren, da Ihre Anwendung nur auf den Knoten bereitgestellt wird, die Tasks ausführen.

    Andere Szenarien, die von Aufgabenanwendungspaketen profitieren können, sind Aufträge, die eine große Anwendung für nur einige wenige Aufgaben nutzen. Aufgabenanwendungen können z. B. für eine komplexe Vorverarbeitungsstufe oder eine Zusammenführungsaufgabe nützlich sein.

Bei Anwendungspaketen muss die Startaufgabe Ihres Pools keine lange Liste einzelner, auf dem Knoten zu installierender Ressourcendateien angeben. Sie müssen nicht manuell mehrere Versionen der Anwendungsdateien in Azure Storage oder auf Ihren Knoten verwalten. Und Sie müssen sich auch keine Gedanken über das Generieren von SAS-URLs für den Zugriff auf die Dateien in Ihrem Azure Storage-Konto machen. Batch funktioniert im Hintergrund mit Azure Storage zum speichern von Anwendungspaketen und zum Bereitstellen der Pakete auf Serverknoten.

Hinweis

Eine Startaufgabe darf einschließlich Ressourcendateien und Umgebungsvariablen höchstens 32.768 Zeichen groß sein. Wenn Ihre Startaufgabe diesen Grenzwert überschreitet, ist die Verwendung von Anwendungspaketen eine weitere Option. Sie können auch eine ZIP-Datei mit Ihren Ressourcendateien erstellen, diese als Blob in Azure Storage hochladen und dann über die Befehlszeile Ihrer Startaufgabe entzippen.

Hochladen und Verwalten von Anwendungen

Sie können die Anwendungspakete in Ihrem Batch-Konto über das Azure-Portal oder die Batch Management-APIs verwalten. In den folgenden Abschnitten wird erläutert, wie Sie ein Speicherkonto verknüpfen und wie Sie Anwendungen und Anwendungspakete im Azure-Portal hinzufügen und verwalten.

Hinweis

Sie können zwar Anwendungswerte in der Microsoft.Batch/batchAccount-Ressource einer ARM-Vorlagedefinieren. Derzeit ist es aber nicht möglich, eine ARM-Vorlage zum Hochladen von Anwendungspaketen zu verwenden, die in Ihrem Batch-Konto verwendet werden sollen. Sie müssen sie in Ihr verknüpftes Speicherkonto hochladen, wie unter Hinzufügen einer neuen Anwendung beschrieben.

Damit Sie Anwendungspakete verwenden können, müssen Sie zunächst ein Azure Storage-Konto mit Ihrem Batch-Konto verknüpfen. Der Batch-Dienst verwendet das zugeordnete Speicherkonto zum Speichern Ihrer Anwendungspakete. Idealerweise erstellen Sie ein Speicherkonto speziell für die Verwendung mit Ihrem Batch-Konto.

Falls Sie noch kein Speicherkonto konfiguriert haben, wird im Azure-Portal eine Warnung angezeigt, wenn Sie in Ihrem Batch-Konto im linken Navigationsmenü zum ersten Mal Anwendungen auswählen. So verknüpfen Sie ein Speicherkonto mit Ihrem Batch-Konto:

  1. Wählen Sie das Warnungsfenster aus, in dem gemeldet wird, dass für dieses Batch-Konto noch kein Speicherkonto konfiguriert wurde.
  2. Wählen Sie auf der nächsten Seite Speicherkontoeinstellungen aus.
  3. Wählen Sie den Link Speicherkonto auswählen im Abschnitt Informationen zum Speicherkonto aus.
  4. Wählen Sie im Bereich Speicherkonto auswählen das Speicherkonto aus der Liste aus, das Sie mit diesem Batch-Konto verwenden möchten .
  5. Wählen Sie dann in der linken oberen Ecke der Seite Speichern aus.

Nachdem Sie die beiden Konten verknüpft haben, kann Batch die im verknüpften Storage-Konto gespeicherten Pakete automatisch auf Ihren Serverknoten bereitstellen.

Wichtig

In einem Azure Storage-Konto, das mit Firewallregeln konfiguriert wurde oder für das Hierarchischer Namespace auf Aktiviert festgelegt wurde, können keine Anwendungspakete verwendet werden.

Der Batch-Dienst verwendet das Azure Storage-Konto, um Ihre Anwendungspakete als Blockblobs 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. Beachten Sie zur Minimierung der Kosten unbedingt Größe und Anzahl Ihrer Anwendungspakete, und entfernen Sie veraltete Pakete in regelmäßigen Abständen.

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 Batch-Konto im linken Navigationsmenü die Option Anwendungen und dann Hinzufügen aus.

Screenshot: Prozess zum Erstellen einer neuen Anwendung im Azure-Portal

Geben Sie die folgenden Informationen ein:

  • Anwendungs-ID: Die ID Ihrer neuen Anwendung.
  • Version: Die Version des Anwendungspakets, das Sie hochladen.
  • Anwendungspaket: Die ZIP-Datei mit den Binärdateien und den unterstützenden Dateien der Anwendung, die für die Ausführung der Anwendung erforderlich sind.

Die eingegebene Anwendungs-ID und Version müssen folgende Anforderungen erfüllen:

  • 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 umfassen.
  • Sie muss innerhalb des Batch-Kontos eindeutig sein.
  • Bei IDs wird die Groß-/Kleinschreibung beibehalten, aber nicht unterschieden.

Wählen Sie Senden aus, wenn Sie fertig sind. Nach dem Hochladen der ZIP-Datei in Ihr Azure Storage-Konto wird im Portal eine Benachrichtigung angezeigt. Dieser Vorgang kann je nach Größe der hochzuladenden Datei und der Geschwindigkeit Ihrer Netzwerkverbindung einige Zeit in Anspruch nehmen.

Anzeigen aktueller Anwendungen

Wenn Sie die Anwendungen in Ihrem Batch-Konto anzeigen möchten, wählen Sie im linken Navigationsmenü Anwendungen aus.

Screenshot: Menüelement „Anwendungen“ im Azure-Portal

Durch Auswählen dieser Menüoption wird das Fenster Anwendungen geöffnet. In diesem Fenster werden die IDs aller Anwendungen in Ihrem Konto und die folgenden Eigenschaften angezeigt:

  • Pakete: Die Anzahl von Versionen, die dieser Anwendung zugeordnet sind.
  • Standardversion: Gegebenenfalls die Anwendungsversion, die installiert wird, wenn bei der Bereitstellung der Anwendung keine Version angegeben wurde.
  • Updates zulassen: Gibt an, ob Pakete aktualisiert und gelöscht werden dürfen.

Wenn Sie die Dateistruktur des Anwendungspakets auf einem Serverknoten anzeigen möchten, navigieren Sie im Azure-Portal zu Ihrem Batch-Konto. Wählen Sie Pools aus. Wählen Sie danach den Pool aus, der den Serverknoten enthält. Wählen Sie den Serverknoten aus, auf dem das Anwendungspaket installiert wurde, und öffnen Sie den Ordner Anwendungen.

Anzeigen von Anwendungsdetails

Wenn Sie die Details einer Anwendung anzeigen möchten, wählen Sie im FensterAnwendungen die entsprechende Anwendung aus. Sie können die Anwendung über die Einstellungen konfigurieren, auf die Sie im linken Navigationsmenü zugreifen können.

  • Updates zulassen: Gibt an, ob Anwendungspakete aktualisiert oder gelöscht werden können. Die Option ist standardmäßig auf Jafestgelegt. Wenn sie auf Nein festgelegt wird, können vorhandene Anwendungspakete nicht aktualisiert oder gelöscht, neue Anwendungspaketversionen aber noch hinzugefügt werden.
  • Standardversion: Das Standardanwendungspaket, das bei der Bereitstellung der Anwendung verwendet werden soll, wenn keine Version angegeben wurde.
  • Anzeigename: Ein Anzeigename, der von Ihrer Batch-Lösung beim Anzeigen von Informationen zur Anwendung verwendet werden kann. Dieser Name kann beispielsweise 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 Batch-Kontos aus. Wählen Sie anschließend Hinzufügen.

Geben Sie wie bei der neuen Anwendung die Version für das neue Paket ein, laden Sie die ZIP-Datei in das Feld Anwendungspaket hoch, und wählen Sie dann Übermitteln aus.

Aktualisieren oder Löschen eines Anwendungspakets

Wenn Sie ein vorhandenes Anwendungspaket aktualisieren oder löschen möchten, wählen Sie die Anwendung auf der Seite Anwendungen Ihres Batch-Kontos aus. Wählen Sie in der Zeile des Anwendungspakets, das Sie ändern möchten, die Schaltfläche mit den Auslassungspunkten aus. Wählen Sie dann die Aktion aus, die Sie ausführen möchten.

Screenshot: Optionen zum Aktualisieren und Löschen von Anwendungspaketen 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 für diese Version zu bestätigen. Nachdem Sie OK ausgewählt haben, löscht Batch die ZIP-Datei in Ihrem Azure Storage-Konto. Wenn Sie die Standardversion einer Anwendung löschen, wird die Einstellung Standardversion für diese Anwendung entfernt.

Installieren von Anwendungen auf Serverknoten

Sie haben erfahren, wie Sie Anwendungspakete im Azure-Portal verwalten. Als Nächstes erfahren Sie, wie Sie diese auf Serverknoten bereitstellen und mithilfe von Batch-Aufgaben ausführen.

Installieren von Pool-Anwendungspaketen

Geben Sie mindestens einen Verweis auf ein Anwendungspaket für den Pool an, um ein Anwendungspaket auf allen Computeknoten in einem Pool zu installieren. Die Anwendungspakete, die Sie für einen Pool angeben, werden auf Serverknoten, der dem Pool hinzugefügt wird, sowie auf jedem Knoten installiert, der neu gestartet oder für den ein Reimaging durchgeführt wird.

Legen Sie in Batch .NET CloudPool.ApplicationPackageReferences fest, wenn Sie einen neuen Pool erstellen oder einen bereits vorhandenen Pool verwenden. Die ApplicationPackageReference-Klasse gibt eine Anwendungs-ID und eine Version für die Installation auf den Computeknoten eines Pools an.

// 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();

Wichtig

Falls bei der Bereitstellung eines Anwendungspakets ein Fehler auftritt, markiert der Batch-Dienst den Knoten als nicht verwendbar, und es werden keine Aufgaben zur Ausführung auf diesem Knoten geplant. Starten Sie in diesem Fall den Knoten neu, um die Initiierung der Paketbereitstellung zu wiederholen. Durch Neustarten des Knotens können erneut Aufgaben auf dem Knoten geplant werden.

Installieren von Task-Anwendungspaketen

Geben Sie wie bei einem Pool Verweise zu Anwendungspaketen für einen Task an. Wenn eine Aufgabe zur Ausführung auf einem Knoten geplant ist, wird das Paket heruntergeladen und extrahiert, direkt bevor die Befehlszeile der Aufgabe ausgeführt wird. Wenn ein angegebenes Paket in der angegebenen Version bereits auf dem Knoten installiert ist, wird das Paket nicht heruntergeladen, und das vorhandene Paket wird verwendet.

Um ein Task-Anwendungspaket zu installieren, konfigurieren Sie die Task-Eigenschaft CloudTask.ApplicationPackageReferences:

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 angegeben haben, werden heruntergeladen und in ein benanntes Verzeichnis im AZ_BATCH_ROOT_DIR des Knotens extrahiert. Batch erstellt auch eine Umgebungsvariable mit dem Pfad zu dem benannten Verzeichnis. Ihre Task-Befehlszeilen verwenden diese Umgebungsvariable beim Verweisen auf die Anwendung auf dem Knoten.

Bei Windows-Knoten weist die Variable folgendes Format auf:

Windows:
AZ_BATCH_APP_PACKAGE_APPLICATIONID#version

Bei Linux-Knoten weicht das Format geringfügig ab. 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 beispielsweise festgelegt haben, dass Version 2.7 der Anwendung Blender auf Windows-Knoten installiert werden soll, verwenden die Befehlszeilen der Aufgabe diese Umgebungsvariable, um auf die Dateien zuzugreifen:

Windows:
AZ_BATCH_APP_PACKAGE_BLENDER#2.7

Geben Sie die Umgebungsvariable bei Linux-Knoten im folgenden 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 festlegen, die für Ihre Serverknoten bereitgestellt werden soll. Wenn Sie eine Standardversion für eine Anwendung angegeben haben, können Sie beim Verweisen auf die Anwendung das Versionssuffix weglassen. Sie können die Standardanwendungsversion im Azure-Portal im Fenster Anwendungen angeben, wie unter Hochladen und Verwalten von Anwendungen gezeigt.

Wenn Sie beispielsweise „2.7“ als Standardversion für die Anwendung Blender angegeben haben und Ihre Aufgaben auf die folgende Umgebungsvariable verweisen, verwenden Ihre Windows-Knoten Version 2.7:

AZ_BATCH_APP_PACKAGE_BLENDER

Der folgende Codeausschnitt zeigt ein Beispiel für eine Task-Befehlszeile, die die Standardversion der Anwendung Blender 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 Umgebungseinstellungen für Computeknoten finden Sie unter Umgebungseinstellungen für Tasks.

Aktualisieren der Anwendungspakete eines Pools

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

  • Der Batch-Dienst installiert das neue angegebene Paket auf allen neuen Knoten, die dem Pool hinzugefügt werden, sowie jegliche bereits vorhandene Knoten, die neu gestartet werden bzw. für die ein Reimaging durchgeführt wird.
  • Auf Serverknoten, die sich bereits im Pool befinden, wenn Sie die Paketverweise aktualisieren, wird das neue Anwendungspaket nicht automatisch installiert. Für diese Computeknoten muss ein Neustart oder ein Reimaging durchgeführt werden, um das neue Paket zu erhalten.
  • Wenn ein neues Paket bereitgestellt wird, spiegeln die neu erstellten Umgebungsvariablen die neuen Anwendungspaketverweise wider.

In diesem Beispiel ist als einer der CloudPool.ApplicationPackageReferences-Verweise des vorhandenen Pools die Version 2.7 der Anwendung Blender konfiguriert. Wenn Sie die Knoten des Pools mit der Version 2.76b aktualisieren möchten, geben Sie einen neuen ApplicationPackageReference-Verweis mit der neuen Version an, und committen 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 Batch-Dienst Version 2.76b auf jedem neuen Knoten, der dem Pool beitritt. Um 2.76b auf den Knoten zu installieren, die sich bereits im Pool befinden , muss für die Knoten ein Neustart oder Reimaging durchgeführt werden. Auf neu gestarteten Knoten werden die Dateien aus vorherigen Paketbereitstellungen beibehalten.

Auflisten der Anwendungen in einem Batch-Konto

Sie können die Anwendungen und ihre Pakete mit der Methode ApplicationOperations.ListApplicationSummaries in einem Batch-Konto 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