共用方式為


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

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

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

先決條件

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

登入 Azure

登入 Azure 入口網站

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

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

建立集區

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

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

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

    1. 輸入 集區 ID。 此範例將集區命名為ocr-pool
    2. 選取 canonical 作為 Publisher
    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. 輸入 工作 ID。 這個範例使用 ocr-job
    2. 選擇ocr-pool目前的集區,或您為集區選擇的任何名稱。
    3. 請選擇 [確定]

建立 Blob 容器

您可以在此處建立 Blob 容器,以儲存 OCR 批次作業的輸入和輸出檔案。 在此範例中,輸入容器已命名 input ,並且是最初上傳所有沒有 OCR 的文件以進行處理的位置。 輸出容器會命名 output ,並且是批次工作使用 OCR 寫入已處理文件的位置。

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

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

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

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

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

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

建立 Azure 函式

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

  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 觸發函式之後,請選取 [ 程式碼 + 測試]。 在函數中使用來自 GitHub 的 run.csxfunction.projfunction.proj 預設不存在,因此選取 上傳 按鈕以將其上傳至您的開發工作區。

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

觸發函數並擷取結果

將存放在 GitHub 目錄 input_files 的任何或所有掃描檔案上傳至您的輸入容器。

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

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

幾秒鐘後,套用 OCR 的檔案會新增至輸出容器。 將紀錄訊息輸出到底部視窗。 檔案隨即可在 Storage Explorer 上顯示並檢索。

或者,您可以在 「監視器」 頁面上找到記錄資訊:

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. 從批次帳戶的集區頁面中,在您的集區上選擇更多選項。
  2. 選擇 刪除

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

後續步驟

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