教學課程:使用 Azure Functions 觸發 Batch 作業

在本教學課程中,您將瞭解如何使用Azure Functions來觸發 Batch 作業。 本文將逐步解說將檔新增至 Azure 儲存體 Blob 容器的範例,會使用 Azure Batch 套用光學字元辨識 (OCR) 。 為了簡化 OCR 處理,此範例會設定 Azure 函式,該函式會在每次將檔案新增至 Blob 容器時執行 Batch OCR 作業。 您會了解如何:

  • 使用Azure 入口網站來建立集區和作業。
  • (SAS) 建立 Blob 容器和共用存取簽章。
  • 建立 Blob 觸發的 Azure 函式。
  • 將輸入檔案上傳至儲存體。
  • 監視工作執行。
  • 擷取輸出檔案。

必要條件

  • 具有有效訂用帳戶的 Azure 帳戶。 免費建立帳戶
  • Azure Batch 帳戶和連結的 Azure 儲存體帳戶。 如需如何建立和連結帳戶的詳細資訊,請參閱 建立 Batch 帳戶

登入 Azure

登入 Azure 入口網站

使用 Azure 入口網站 建立 Batch 集區和 Batch 作業

在本節中,您會使用 Azure 入口網站 來建立執行 OCR 工作的 Batch 集區和 Batch 作業。

建立集區

  1. 使用您的 Azure 認證登入Azure 入口網站。

  2. 選取左側導覽上的 [ 區],然後選取搜尋表單上方的 [ 新增 ] 按鈕,以建立集區。

    Batch 帳戶中 [集區] 頁面的螢幕擷取畫面,其中醒目提示 [新增] 按鈕。

    1. 輸入 集區識別碼。 此範例會將集 ocr-pool 區命名為 。
    2. 選取 [標準 ] 作為 [發行者]。
    3. 選取 [0001-com-ubuntu-server-jammy ] 作為 [供應專案]。
    4. 選取 [22_04-lts ] 作為 Sku
    5. 選擇 Standard_F2s_v2 - 2 vCPUs, 2 GB Memory 作為[節點大小] 區段中的VM 大小
    6. 將 [調整]區段中的[模式] 設定為[固定],然後針對[目標專用節點] 輸入 3。
    7. [開始] 工作設定為[啟用] 開始工作,然後在[命令列] 中輸入 命令 /bin/bash -c "sudo update-locale LC_ALL=C.UTF-8 LANG=C.UTF-8; sudo apt-get update; sudo apt-get -y install ocrmypdf" 。 請務必將[提高許可權] 層級設定為 [集區自動使用者],管理員,這可讓啟動工作包含命令。 sudo
    8. 選取 [確定]。

建立作業

  1. 選取左側導覽中的 [ 作業 ],然後選擇搜尋表單上方的 [ 新增 ] 按鈕,以在集區上建立作業。
    1. 輸入 作業識別碼。 此範例會使用 ocr-job
    2. ocr-pool針對[目前集區] 選取 ,或您為集區選擇的任何名稱。
    3. 選取 [確定]。

建立 Blob 容器

在這裡,您會建立 Blob 容器,以儲存 OCR Batch 作業的輸入和輸出檔案。 在此範例中,輸入容器的名稱為 input,它是沒有 OCR 的所有文件最初上傳處理的位置。 輸出容器的名稱為 output,它是 Batch 作業利用 OCR 寫入已處理文件的位置。

  1. 在Azure 入口網站中搜尋並選取 [儲存體帳戶]。

  2. 選擇連結至 Batch 帳戶的儲存體帳戶。

  3. 從左側導覽中選取 [容器 ],然後針對輸入檔案建立兩個 Blob 容器 (一個,另一個用於輸出檔案,請遵循建立 Blob 容器中的步驟) 。

  4. 選取輸出容器來建立輸出容器的共用存取簽章,然後在 [共用存取權杖] 頁面上,選取 [許可權] 下拉式清單中的 [寫入]。 不需任何其他權限。

  5. 選取 [產生 SAS 權杖和 URL],然後複製 Blob SAS URL 以供稍後用於您的函式。

    [共用存取權杖] 頁面的螢幕擷取畫面,其中醒目提示 [許可權] 下拉式清單和 [產生 SAS 權杖和 URL] 按鈕。

建立 Azure 函式

在本節中,您會建立 Azure 函式,每當檔案上傳至您的輸入容器時,就會觸發 OCR Batch 作業。

  1. 請依照建立由 Azure Blob 儲存體所觸發的函式中的步驟建立函式。

    1. 針對執行階段堆疊,選擇 .NET。 此範例函式會使用 C# 來利用 Batch .NET SDK。
    2. 在 [ 儲存體] 頁面上,使用您連結至 Batch 帳戶的相同儲存體帳戶。
    3. 選取[檢閱 + 建立 > ]。

    下列螢幕擷取畫面:使用範例資訊在 [基本]索引標籤上的 [建立函式應用程式] 頁面。

    使用範例資訊在 [基本] 索引標籤上的 [建立函式應用程式] 頁面螢幕擷取畫面。

  2. 在您的函式中,從左側導覽中選取 [ 函式 ],然後選取 [ 建立]。

  3. 在 [建立函式] 窗格中,選取 [Azure Blob 儲存體觸發程式]。

  4. [新增函式] 中輸入函式的名稱。 在此範例中,名稱為 OcrTrigger。 輸入路徑作為 input/{name} ,其中輸入 Blob 容器的名稱。

  5. 選取 [建立]。

    [建立函式] 窗格的螢幕擷取畫面,其中醒目提示 [Azure Blob 儲存體觸發程式] 選項和 [新增函式和路徑欄位]。

  6. 建立 Blob 觸發的函式後,請選取 [程式碼 + 測試]。 從 Function 的 GitHub 使用 run.csxfunction.projfunction.proj 預設不存在,所以請選取 [上傳] 按鈕,上傳至您的開發工作區。

    • 當新的 Blob 新增至輸入 Blob 容器時,就會執行 run.csx
    • function.proj 會列出您函式程式碼中的外部程式庫,例如 Batch .NET SDK。
  7. 變更 run.csx 檔案中 Run() 函式的變數預留位置值,以反映您的 Batch 和儲存體認證。 您可以在 Batch 和儲存體帳戶的 [金鑰] 區段中的 [Azure 入口網站中找到 Batch 和儲存體帳號憑證。

觸發函式並取出結果

從 GitHub 上的 input_files 目錄將任何或所有已掃描的檔案上傳至輸入容器。

您可以從函式的 [程式代碼 + 測試] 頁面上Azure 入口網站測試函式。

  1. 在 [程式代碼 + 測試] 頁面上選取[測試/執行]。
  2. 在 [輸入] 索引標籤的 [內文] 中輸入容器的路徑。
  3. 選取 [執行]。

幾秒之後,套用 OCR 的檔案會新增至輸出容器。 記錄資訊輸出至底部視窗。 檔案接著即可在儲存體總管上看見並可取出。

或者,您可以在 [ 監視 ] 頁面上找到記錄資訊:

2019-05-29T19:45:25.846 [Information] Creating job...
2019-05-29T19:45:25.847 [Information] Accessing input container <inputContainer>...
2019-05-29T19:45:25.847 [Information] Adding <fileName> as a resource file...
2019-05-29T19:45:25.848 [Information] Name of output text file: <outputTxtFile>
2019-05-29T19:45:25.848 [Information] Name of output PDF file: <outputPdfFile>
2019-05-29T19:45:26.200 [Information] Adding OCR task <taskID> for <fileName> <size of fileName>...

若要將輸出檔案下載到本機電腦,請移至儲存體帳戶中的輸出容器。 在您想要的檔案上選取更多選項,然後選取 [ 下載]。

秘訣

如果以 PDF 閱讀程式開啟,則下載的檔案為可搜尋。

清除資源

即使沒有排程任何作業,節點執行時,您仍需支付集區的費用。 當您不再需要集區時,請使用下列步驟刪除集區:

  1. 從 Batch 帳戶的 [ 區] 頁面中,選取集區上的更多選項。
  2. 選取 [刪除]。

當您刪除集區時,節點上的所有工作輸出也會跟著刪除。 不過,輸出檔案會保留在儲存體帳戶中。 若不再需要,也可刪除 Batch 帳戶和儲存體帳戶。

後續步驟

如需更多使用 .NET API 來排程和處理 Batch 工作負載的範例,請參閱 GitHub 上的範例。