Erstellen und Verwenden von Ressourcendateien

Eine Azure Batch-Aufgabe erfordert oft eine Form von Daten zur Verarbeitung. Sie können diese Daten Ihrem virtuellen Batch-Computer über eine Aufgabe mithilfe von Ressourcendateien bereitstellen. Ressourcendateien werden von allen Arten von Aufgaben unterstützt: Aufgaben, Startaufgaben, Aufgaben für die Arbeitsvorbereitung, Aufgaben für die Freigabe von Aufträgen, etc. Dieser Artikel behandelt einige gängige Methoden, wie Ressourcendateien erstellt und auf einem virtuellen Computer platziert werden.

Ressourcendateien übertragen Daten auf einen virtuellen Computer im Batch, aber die Art der Daten und wie sie verwendet werden, ist flexibel. Es gibt jedoch einige gängige Anwendungsfälle:

  • Bereitstellung allgemeiner Dateien auf jeder VM mithilfe von Ressourcendateien in einem Starttask
  • Bereitstellung von Eingabedaten für die Verarbeitung durch Tasks

Allgemeine Dateien können z.B. Dateien einer Startaufgabe sein, die zur Installation von Anwendungen verwendet werden, die Ihre Aufgabe ausführt. Die Eingabedaten können unbearbeitete Bild- oder Videodaten oder beliebige Informationen sein, die von Batch verarbeitet werden sollen.

Ressourcendateitypen

Es gibt einige verschiedene Optionen zum Generieren von Ressourcendateien, wobei jeweils eine eigene Methode verwendet wird. Der Erstellungsprozess für Ressourcendateien variiert je nachdem, wo die ursprünglichen Daten gespeichert werden und ob mehrere Dateien erstellt werden sollen.

Speichercontainer-URL

Die Verwendung einer Speichercontainer-URL bedeutet, dass Sie mit den richtigen Berechtigungen auf Dateien in jedem Speichercontainer in Azure zugreifen können.

In diesem C#-Beispiel wurden die Dateien bereits als Blobspeicher in einen Azure-Speichercontainer hochgeladen. Um auf die Daten zuzugreifen, die für die Erstellung einer Ressourcendatei benötigt werden, müssen wir zunächst Zugriff auf den Speichercontainer erhalten. Dies kann auf verschiedene Arten erfolgen.

Shared Access Signature (SAS)

Erstellen Sie eine URI für Shared Access Signatures (SAS) mit den richtigen Berechtigungen für den Zugriff auf den Speichercontainer. Legen Sie die Ablaufzeit und die Berechtigungen für die SAS fest. In diesem Fall wird keine Startzeit angegeben, sodass die SAS sofort gültig wird und zwei Stunden nach ihrer Generierung abläuft.

SharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy
{
    SharedAccessExpiryTime = DateTime.UtcNow.AddHours(2),
    Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.List
};

Hinweis

Für den Containerzugriff müssen Sie sowohl Read- als auch List-Berechtigungen haben, wohingegen Sie beim Blobzugriff nur Read-Berechtigungen benötigen.

Nachdem die Berechtigungen konfiguriert sind, erstellen Sie das SAS-Token und formatieren Sie die SAS-URL für den Zugriff auf den Speichercontainer. Generieren Sie mithilfe der formatierten SAS-URL für den Speichercontainer eine Ressourcendatei mit StorageContainerUri.

CloudBlobContainer container = blobClient.GetContainerReference(containerName);

string sasToken = container.GetSharedAccessSignature(sasConstraints);
string containerSasUrl = String.Format("{0}{1}", container.Uri, sasToken);

ResourceFile inputFile = ResourceFile.FromStorageContainerUrl(containerSasUrl);

Sie können bei Bedarf die Eigenschaft blobPrefix verwenden, um Downloads auf die Blobs zu beschränken, deren Name mit einem angegebenen Präfix beginnt:

ResourceFile inputFile = ResourceFile.FromStorageContainerUrl(containerSasUrl, blobPrefix = yourPrefix);

Verwaltete Identität

Erstellen Sie eine benutzerseitig zugewiesene verwaltete Identität, und weisen Sie ihr die Storage Blob Data Reader-Rolle für Ihren Azure Storage-Container zu. Als Nächstes weisen Sie die verwaltete Identität Ihrem Pool zu, damit Ihre VMs auf die Identität zugreifen können. Schließlich können Sie auf die Dateien in Ihrem Container zugreifen, indem Sie die Identität angeben, die von Azure Batch verwendet werden soll.

CloudBlobContainer container = blobClient.GetContainerReference(containerName);

ResourceFile inputFile = ResourceFile.FromStorageContainerUrl(container.Uri, identityReference: new ComputeNodeIdentityReference() { ResourceId = "/subscriptions/SUB/resourceGroups/RG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name" });

Öffentlicher Zugriff

Eine Alternative zum Generieren einer SAS-URL oder zur Verwendung einer verwalteten Identität ist die Aktivierung eines anonymen öffentlichen Lesezugriffs auf einen Container und dessen Blobs in Azure Blob Storage. Auf diese Weise können Sie Lesezugriff auf diese Ressourcen gewähren, ohne Ihren Kontoschlüssel freizugeben und ohne dass eine SAS erforderlich ist. Öffentlicher Zugriff wird in der Regel für Szenarien verwendet, in denen bestimmte Blobs stets für anonymen Lesezugriff zur Verfügung stehen sollen. Wenn dieses Szenario zu Ihrer Lösung passt, lesen Sie Konfigurieren des anonymen öffentlichen Lesezugriffs für Container und Blobs, um mehr über die Verwaltung des Zugriffs auf Ihre Blobdaten zu erfahren.

Speichercontainername (Autostorage)

Anstatt eine SAS-URL zu konfigurieren und zu erstellen, können Sie den Namen Ihres Azure-Speichercontainers verwenden, um auf Ihre Blobdaten zuzugreifen. Der verwendete Speichercontainer muss sich im Azure-Speicherkonto befinden, das mit Ihrem Batch-Konto verknüpft ist und manchmal als Autostorage-Konto bezeichnet wird. Die Verwendung des Autostorage-Containers ermöglicht es Ihnen, die Konfiguration und Erstellung einer SAS-URL für den Zugriff auf einen Speichercontainer zu umgehen. Geben Sie stattdessen den Namen des Speichercontainers in Ihrem verknüpften Speicherkonto an.

Wenn Sie noch nicht über ein Autostorage-Konto verfügen, finden Sie unter Erstellen eines Batch-Kontos eine Anleitung zum Erstellen und Verknüpfen eines Speicherkontos.

Im folgenden Beispiel wird AutoStorageContainerName verwendet, um die Datei aus Daten im AutoStorage-Konto zu generieren.

ResourceFile inputFile = ResourceFile.FromAutoStorageContainer(containerName);

Wie bei einer Speichercontainer-URL können Sie die blobPrefix-Eigenschaft verwenden, um anzugeben, welche Blobs heruntergeladen werden:

ResourceFile inputFile = ResourceFile.FromAutoStorageContainer(containerName, blobPrefix = yourPrefix);

Einzelne Ressourcendatei vom Webendpunkt

Sie können eine gültige HTTP-URL angeben, die Ihre Eingabedaten enthält, um eine einzelne Ressourcendatei zu erstellen. Die URL wird der Batch API bereitgestellt, und dann werden die Daten verwendet, um eine Ressourcendatei zu erstellen. Diese Methode kann unabhängig davon verwendet werden, ob sich die Daten zum Erstellen Ihrer Ressourcendatei in Azure Storage oder an einem anderen Webspeicherort wie einem GitHub-Endpunkt befinden.

Im folgenden Beispiel wird httpUri verwendet, um die Datei aus einer Zeichenfolge abzurufen, die eine gültige URL enthält, und generiert dann eine Ressourcendatei, die von Ihrem Vorgang verwendet werden soll. Für dieses Szenario sind keine Anmeldeinformationen erforderlich. (Anmeldeinformationen sind erforderlich, wenn Blob Storage verwendet wird, es sei denn, der öffentliche Lesezugriff ist für den Blobcontainer aktiviert.)

ResourceFile inputFile = ResourceFile.FromUrl(yourURL, filePath);

Sie können auch eine Zeichenfolge verwenden, die Sie als URL definieren (oder eine Kombination aus Zeichenfolgen, die zusammen die vollständige URL für Ihre Datei ergeben).

ResourceFile inputFile = ResourceFile.FromUrl(yourDomain + yourFile, filePath);

Wenn sich Ihre Datei in Azure Storage befindet, können Sie eine verwaltete Identität verwenden, anstatt eine Shared Access Signature für die Ressourcendatei zu generieren.

ResourceFile inputFile = ResourceFile.FromUrl(yourURLFromAzureStorage, 
    identityReference: new ComputeNodeIdentityReference() { ResourceId = "/subscriptions/SUB/resourceGroups/RG/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name"},
    filePath: filepath
);

Hinweis

Die Authentifizierung der verwalteten Identität funktioniert nur mit Dateien in Azure Storage. Die verwaltete Identität benötigt die Rollenzuweisung Storage Blob Data Reader für den Container, in dem sich die Datei befindet, und muss außerdem dem Batch-Pool zugewiesen sein.

Tipps und Vorschläge

Azure Batch-Tasks können Dateien auf viele verschiedene Arten verwenden. Aus diesem Grund bietet Azure Batch verschiedene Optionen zum Verwalten von Dateien für Tasks. Die folgenden Szenarios sind nicht als vollständig zu verstehen, decken aber einige gängige Situationen ab und geben Empfehlungen.

Viele Ressourcendateien

Wenn gemeinsame Taskdateien von vielen Tasks in Ihrem Batch-Auftrag gemeinsam genutzt werden, sollten Sie ein Anwendungspaket verwenden, um diese Dateien zu enthalten. Anwendungspakete ermöglichen eine Optimierung der Downloadgeschwindigkeit, und Daten in Anwendungspaketen werden zwischen den Tasks zwischengespeichert. Mit Anwendungspaketen müssen Sie nicht mehrere Ressourcendateien manuell verwalten oder SAS-URLs generieren, um auf die Dateien in Azure Storage zuzugreifen. Batch arbeitet im Hintergrund mit Azure Storage zusammen, um Anwendungspakete zu speichern und auf Computeknoten bereitzustellen. Wenn sich Ihre Taskdateien nicht häufig ändern, eignen sich möglicherweise Anwendungspakete für Ihre Lösung.

Wenn Ihre Tasks hingegen jeweils über viele, für den Task spezifische Dateien verfügen, sind wahrscheinlich Ressourcendateien die beste Option. Tasks, die eindeutige Dateien verwenden, müssen oft aktualisiert oder ersetzt werden, was mit den Anwendungspaketinhalten nicht so einfach ist. Ressourcendateien bieten zusätzliche Flexibilität beim Aktualisieren, Hinzufügen oder Bearbeiten einzelner Dateien.

Anzahl von Ressourcendateien pro Aufgabe

Wenn ein Task eine große Anzahl von Ressourcendateien angibt, lehnt Azure Batch den Task möglicherweise ab, da er zu groß ist. Dies hängt von der Gesamtlänge der Dateinamen oder URLs (sowie der Identitätsreferenz) für alle Dateien ab, die der Aufgabe hinzugefügt wurden. Es ist am besten, Ihre Aufgaben klein zu halten, indem Sie die Anzahl der Ressourcendateien in der Aufgabe selbst minimieren.

Wenn es keine Möglichkeit gibt, die Anzahl der Dateien zu minimieren, die Ihre Aufgabe benötigt, können Sie die Aufgabe optimieren, indem Sie eine einzelne Ressourcendatei erstellen, die auf einen Speichercontainer mit Ressourcendateien verweist. Legen Sie hierzu Ihre Ressourcendateien in einem Azure Storage-Container ab, und verwenden Sie eine der oben beschriebenen Methoden, um je nach Bedarf Ressourcendateien zu generieren.

Nächste Schritte