建立和使用資源檔

Azure Batch 工作通常需要處理特定形式的資料。 資源檔是透過工作將此資料提供給 Batch 虛擬機器 (VM) 的方式。 所有類型的工作都支援資源檔:工作、啟動工作、作業準備工作、作業解除工作等等。此文章涵蓋一些常見的方法,說明如何建立資源檔並將其放置在 VM 上。

資源檔會將資料放入 Batch 中的 VM,但資料的類型和使用方式是彈性的。 但是,有一些常見的使用案例:

  • 使用啟動工作的資源檔,在每個 VM 上佈建通用檔案。
  • 佈建要由工作處理的輸入資料。

例如,通用檔案可能是啟動工作的檔案,用來安裝您工作執行的應用程式。 輸入資料可能是未經處理的影像或影片資料,或要由 Batch 處理的任何資訊。

資源檔類型

一些產生資源檔的不同選項,每個選項包含專屬的方法。 資源檔的建立程序會根據原始資料的儲存位置,或是否應建立多個檔案而異。

儲存體容器 URL

使用儲存體容器 URL 意味著,利用正確的權限,您可以存取 Azure 中任何儲存體容器內的檔案。

在此 C# 範例中,檔案已上傳至 Azure 儲存體容器,作為 Blob 儲存體。 若要存取建立資源檔所需的資料,我們必須先取得儲存體容器的存取權。 取得存取權的方式有兩種。

共用存取簽章

利用正確的權限建立共用存取簽章 (SAS) URI 以存取儲存體容器。 設定 SAS 的到期時間和權限。 在此情況下,系統不會指定開始時間,因此 SAS 會立即生效,並在產生後的兩小時後到期。

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

注意

若要存取容器,您必須同時具備 ReadList 權限;若要存取 Blob,您只需要 Read 權限。

設定權限之後,建立 SAS 權杖並設定 SAS URL 格式,以存取儲存體容器。 針對儲存體容器使用格式化的 SAS URL,產生包含 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);

如有需要,您可以使用 blobPrefix 屬性,僅限下載名稱開頭為指定前置詞的 Blob:

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

受控識別

建立使用者指派的受控識別,並指派 Azure 儲存體容器的 Storage Blob Data Reader 角色。 接著,指派受控識別至集區,讓 VM 可以存取身分識別。 最後,您可以指定 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" });

公用存取

產生 SAS URL 或使用受控識別的替代方式是啟用容器和 Azure Blob 儲存體中 Blob 的匿名、公用讀取權限。 如此您就可以將這些資源的唯讀存取權限授與他人,而無須共用您的帳戶金鑰,也無須使用 SAS。 公用存取通常用於您想要一律可以使用特定 Blob 來匿名進行讀取存取時。 如果此案例適用於您的解決方案,請參閱設定容器和 Blob 的匿名公用讀取權限,深入了解如何管理 Blob 資料的存取權。

儲存體容器名稱 (自動儲存體)

您可以使用 Azure 儲存體容器的名稱來存取 Blob 資料,而不需要設定和建立 SAS URL。 您使用的儲存體容器必須位於連結 Batch 帳戶的 Azure 儲存體帳戶 (有時也稱為「自動儲存體帳戶」) 中。 使用 autostorage 容器可讓您略過設定和建立 SAS URL,就可以存取儲存體容器。 但您在連結的儲存體帳戶中,改為提供儲存體名稱。

如果沒有自動儲存體帳戶,請參閱建立 Batch 帳戶中的步驟,了解如何建立並連結儲存體帳戶的詳細資料。

下列範例使用 AutoStorageContainer,從自動儲存體帳戶的資料產生檔案。

ResourceFile inputFile = ResourceFile.FromAutoStorageContainer(containerName);

如同儲存體容器 URL,您可以使用 blobPrefix 屬性指定要下載的 Blob:

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

Web 端點的單一資源檔

若要建立單一資源檔,您可以指定包含輸入資料的有效 HTTP URL。 系統會將 URL 提供給 Batch API,然後使用該資料建立資源檔。 無論建立資源檔的資料是否位於 Azure 儲存體,或任何其他 Web 位置 (例如 GitHub 端點),您都可以使用此方法。

下列範例使用 FromUrl,從包含有效 URL 的字串擷取檔案,然後產生工作要使用的資源檔。 此案例不需要任何認證。 (使用 blob 儲存體即需認證,但 blob 容器上啟用公用讀取權限者除外)

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

您也可以使用定義為 URL 的字串 (或同時使用字串的組合,建立檔案的完整 URL)。

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

如果檔案位於 Azure 儲存體,您可以使用受控識別,而不產生資源檔的共用存取簽章。

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

注意

受控識別驗證僅適用於 Azure 儲存體中的檔案。 受控識別需要檔案所在容器的 Storage Blob Data Reader 角色指派,且必須同時指派給 Batch 集區

祕訣與建議

Azure Batch 工作可以許多方式使用檔案,所以 Batch 提供各種選項管理工作上的檔案。 下列案例不一定完整,但涵蓋一些常見情況並提供建議。

許多資源檔

如果 Batch 作業中有很多工作共用一般工作檔案,建議您使用應用程式套件來包含這些檔案。 應用程式套件針對下載速度提供最佳化,所以工作間會快取應用程式套件中的資料。 使用應用程式套件時,您不需要手動管理數個資源檔或產生 SAS URL,就可以存取 Azure 儲存體中的檔案。 Batch 會在背景搭配 Azure 儲存體運作,以儲存應用程式套件,並將其部署到計算節點。 如果您的工作檔案不常變更,應用程式套件可能適合您的解決方案。

反之,如果每個工作包含很多該工作的唯一檔案,資源檔可能是最佳選項。 使用唯一檔案的工作通常需要更新或更換,所以比使用應用程式套件內容困難。 資源檔可為更新、新增或編輯個別檔案提供額外的彈性。

每項工作的資源檔數目

當工作指定大量資源檔時,Batch 可能會拒絕工作太大。 這取決於新增至工作之所有檔案的檔名或 URL 總長度(以及身分識別參考)。 最好是將工作本身的資源檔數目減至最少,讓您的工作變小。

如果沒有任何方法可將您工作所需的檔案數目減至最少,您可以建立能夠參考資源檔儲存體容器的單一資源檔,以便將工作最佳化。 若要這樣做,請將資源檔放入 Azure 儲存體容器,並視需要使用上述其中一個方法產生資源檔。

下一步