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

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

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

必要條件

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

登入 Azure

登入 Azure 入口網站

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

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

建立集區

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

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

    Screenshot of the Pools page in a Batch account that highlights the Add button.

    1. 輸入 [集區識別碼]。 此範例將集區命名為 ocr-pool
    2. 在 [發行者] 選取 [canonical]
    3. 在 [供應項目] 選取 [0001-com-ubuntu-server-jammy]
    4. 在 [Sku] 選取 [22_04-lts]
    5. 在 [節點大小] 區段的 [VM 大小] 選擇 Standard_F2s_v2 - 2 vCPUs, 2 GB Memory
    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],以供稍後用於您的函式。

    Screenshot of the Shared access tokens page that highlights the Permissions dropdown and the Generate SAS token and URL button.

建立 Azure 函式

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

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

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

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

    Screenshot of the Create Function App page on the Basics tab using example information.

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

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

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

  5. 選取 建立

    Screenshot of the Create Function pane that highlights the Azure Blob Storage trigger option and New Function and Path Fields.

  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 上的範例。