Tworzenie i używanie plików zasobów

Zadanie usługi Azure Batch często wymaga przetworzenia jakiejś formy danych. Pliki zasobów to sposób przekazywania tych danych do maszyny wirtualnej usługi Batch za pośrednictwem zadania. Wszystkie typy zadań obsługują pliki zasobów: zadania podrzędne, zadania podrzędne uruchamiania, zadania podrzędne przygotowania zadania, zadania zwolnienia zadania itp. W tym artykule opisano kilka typowych metod tworzenia plików zasobów i umieszczania ich na maszynie wirtualnej.

Pliki zasobów umieszczają dane na maszynie wirtualnej w usłudze Batch, ale typ danych i sposób ich użycia są elastyczne. Istnieją jednak niektóre typowe przypadki użycia:

  • Aprowizuj typowe pliki na każdej maszynie wirtualnej przy użyciu plików zasobów w zadaniu uruchamiania.
  • Aprowizuj dane wejściowe, które mają być przetwarzane przez zadania.

Typowe pliki mogą być na przykład pliki w zadaniu uruchamiania używanym do instalowania aplikacji uruchamianych przez zadania podrzędne. Dane wejściowe mogą być danymi nieprzetworzonymi obrazami lub danymi wideo albo wszelkie informacje, które mają być przetwarzane przez usługę Batch.

Typy plików zasobów

Istnieje kilka różnych opcji generowania plików zasobów, z których każda ma własne metody. Proces tworzenia plików zasobów różni się w zależności od tego, gdzie są przechowywane oryginalne dane i czy należy utworzyć wiele plików.

  • Adres URL kontenera magazynu: generuje pliki zasobów z dowolnego kontenera magazynu na platformie Azure.
  • Nazwa kontenera magazynu: generuje pliki zasobów na podstawie nazwy kontenera na koncie usługi Azure Storage połączonego z kontem usługi Batch (konto automatycznego tworzenia magazynu).
  • Pojedynczy plik zasobu z internetowego punktu końcowego: generuje pojedynczy plik zasobu z dowolnego prawidłowego adresu URL HTTP.

Adres URL kontenera magazynu

Użycie adresu URL kontenera magazynu oznacza, że z odpowiednimi uprawnieniami można uzyskiwać dostęp do plików w dowolnym kontenerze magazynu na platformie Azure.

W tym przykładzie w języku C# pliki zostały już przekazane do kontenera usługi Azure Storage jako magazynu obiektów blob. Aby uzyskać dostęp do danych potrzebnych do utworzenia pliku zasobów, najpierw musimy uzyskać dostęp do kontenera magazynu. Można to zrobić na kilka sposobów.

Sygnatura dostępu współdzielonego

Utwórz identyfikator URI sygnatury dostępu współdzielonego (SAS) z odpowiednimi uprawnieniami dostępu do kontenera magazynu. Ustaw czas wygaśnięcia i uprawnienia dla sygnatury dostępu współdzielonego. W takim przypadku nie określono czasu rozpoczęcia, więc sygnatura dostępu współdzielonego staje się prawidłowa natychmiast i wygasa dwie godziny po jego wygenerowaniu.

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

Uwaga

W przypadku dostępu do kontenera musisz mieć zarówno Read uprawnienia, jak i List , natomiast w przypadku dostępu do obiektów blob potrzebne są Read tylko uprawnienia.

Po skonfigurowaniu uprawnień utwórz token SAS i sformatuj adres URL sygnatury dostępu współdzielonego w celu uzyskania dostępu do kontenera magazynu. Używając sformatowanego adresu URL sygnatury dostępu współdzielonego dla kontenera magazynu, wygeneruj plik zasobu za pomocą polecenia FromStorageContainerUrl.

CloudBlobContainer container = blobClient.GetContainerReference(containerName);

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

ResourceFile inputFile = ResourceFile.FromStorageContainerUrl(containerSasUrl);

W razie potrzeby można użyć właściwości blobPrefix , aby ograniczyć pobieranie tylko do tych obiektów blob, których nazwa zaczyna się od określonego prefiksu:

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

Tożsamość zarządzana

Utwórz tożsamość zarządzaną przypisaną przez użytkownika i przypisz jej Storage Blob Data Reader rolę dla kontenera usługi Azure Storage. Następnie przypisz tożsamość zarządzaną do puli, aby maszyny wirtualne mogły uzyskiwać dostęp do tożsamości. Na koniec możesz uzyskać dostęp do plików w kontenerze, określając tożsamość, która ma być używana przez usługę Batch.

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" });

Dostęp publiczny

Alternatywą do generowania adresu URL sygnatury dostępu współdzielonego lub przy użyciu tożsamości zarządzanej jest włączenie anonimowego, publicznego dostępu do odczytu do kontenera i jego obiektów blob w usłudze Azure Blob Storage. Dzięki temu można udzielić dostępu tylko do odczytu do tych zasobów bez udostępniania klucza konta i bez konieczności używania sygnatury dostępu współdzielonego. Dostęp publiczny jest zwykle używany w scenariuszach, w których niektóre obiekty blob mają być zawsze dostępne dla anonimowego dostępu do odczytu. Jeśli ten scenariusz odpowiada Twojemu rozwiązaniu, zobacz Konfigurowanie anonimowego publicznego dostępu do odczytu dla kontenerów i obiektów blob, aby dowiedzieć się więcej na temat zarządzania dostępem do danych obiektów blob.

Nazwa kontenera magazynu (autostorage)

Zamiast konfigurować i tworzyć adres URL sygnatury dostępu współdzielonego, możesz użyć nazwy kontenera usługi Azure Storage, aby uzyskać dostęp do danych obiektów blob. Używany kontener magazynu musi znajdować się na koncie usługi Azure Storage połączonym z kontem usługi Batch, czasami nazywanym kontem automatycznego tworzenia magazynu. Użycie kontenera autostorage umożliwia obejście konfigurowania i tworzenia adresu URL sygnatury dostępu współdzielonego w celu uzyskania dostępu do kontenera magazynu. Zamiast tego należy podać nazwę kontenera magazynu na połączonym koncie magazynu.

Jeśli nie masz jeszcze konta automatycznego tworzenia, zobacz kroki opisane w temacie Tworzenie konta usługi Batch, aby uzyskać szczegółowe informacje na temat tworzenia i łączenia konta magazynu.

W poniższym przykładzie użyto narzędzia AutoStorageContainer do wygenerowania pliku na podstawie danych na koncie automatycznego tworzenia.

ResourceFile inputFile = ResourceFile.FromAutoStorageContainer(containerName);

Podobnie jak w przypadku adresu URL kontenera magazynu, możesz użyć właściwości blobPrefix , aby określić, które obiekty blob zostaną pobrane:

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

Pojedynczy plik zasobu z internetowego punktu końcowego

Aby utworzyć pojedynczy plik zasobu, możesz określić prawidłowy adres URL HTTP zawierający dane wejściowe. Adres URL jest udostępniany interfejsowi API usługi Batch, a następnie dane są używane do tworzenia pliku zasobów. Tej metody można użyć, czy dane do utworzenia pliku zasobu są w usłudze Azure Storage, czy w innej lokalizacji internetowej, takiej jak punkt końcowy usługi GitHub.

W poniższym przykładzie użyto metody FromUrl do pobrania pliku z ciągu zawierającego prawidłowy adres URL, a następnie generuje plik zasobu, który ma być używany przez zadanie. W tym scenariuszu nie są wymagane żadne poświadczenia. (Poświadczenia są wymagane w przypadku korzystania z magazynu obiektów blob, chyba że w kontenerze obiektów blob jest włączony publiczny dostęp do odczytu).

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

Możesz również użyć ciągu zdefiniowanego jako adres URL (lub kombinacji ciągów, które razem tworzą pełny adres URL pliku).

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

Jeśli plik znajduje się w usłudze Azure Storage, możesz użyć tożsamości zarządzanej zamiast generowania sygnatury dostępu współdzielonego dla pliku zasobu.

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

Uwaga

Uwierzytelnianie tożsamości zarządzanej będzie działać tylko z plikami w usłudze Azure Storage. Tożsamość nanaged wymaga Storage Blob Data Reader przypisania roli dla kontenera, w którym znajduje się plik, i musi być również przypisana do puli usługi Batch.

Wskazówki i sugestie

Zadania usługi Azure Batch mogą używać plików na wiele sposobów, dlatego usługa Batch udostępnia różne opcje zarządzania plikami w zadaniach. Poniższe scenariusze nie mają być kompleksowe, ale obejmują kilka typowych sytuacji i udostępniają zalecenia.

Wiele plików zasobów

Jeśli wspólne pliki zadań są współużytkowane przez wiele zadań w zadaniu usługi Batch, możesz użyć pakietu aplikacji do przechowywania tych plików. Pakiety aplikacji zapewniają optymalizację szybkości pobierania, a dane w pakietach aplikacji są buforowane między zadaniami. W przypadku pakietów aplikacji nie trzeba ręcznie zarządzać kilkoma plikami zasobów ani generować adresów URL sygnatur dostępu współdzielonego w celu uzyskania dostępu do plików w usłudze Azure Storage. Usługa Batch działa w tle z usługą Azure Storage w celu przechowywania i wdrażania pakietów aplikacji w węzłach obliczeniowych. Jeśli pliki zadań nie zmieniają się często, pakiety aplikacji mogą być dobrym rozwiązaniem.

Z drugiej strony, jeśli zadania podrzędne mają wiele plików unikatowych dla tego zadania, pliki zasobów są prawdopodobnie najlepszą opcją. Zadania korzystające z unikatowych plików często muszą być aktualizowane lub zastępowane, co nie jest tak proste, jak w przypadku zawartości pakietu aplikacji. Pliki zasobów zapewniają dodatkową elastyczność aktualizowania, dodawania lub edytowania poszczególnych plików.

Liczba plików zasobów na zadanie

Gdy zadanie określa dużą liczbę plików zasobów, usługa Batch może odrzucić zadanie jako zbyt duże. Zależy to od całkowitej długości nazw plików lub adresów URL (a także odwołania do tożsamości) dla wszystkich plików dodanych do zadania. Najlepiej zachować małe zadania, minimalizując liczbę plików zasobów w samym zadaniu.

Jeśli nie ma możliwości zminimalizowania liczby plików, których potrzebuje zadanie, możesz zoptymalizować zadanie, tworząc pojedynczy plik zasobów, który odwołuje się do kontenera magazynu plików zasobów. W tym celu umieść pliki zasobów w kontenerze usługi Azure Storage i użyj jednej z metod opisanych powyżej, aby wygenerować pliki zasobów zgodnie z potrzebami.

Następne kroki