チュートリアル:Azure Functions を使用して Batch ジョブをトリガーする

このチュートリアルでは、Azure Functions を使用して Batch ジョブをトリガーする方法について説明します。 この記事では、Azure Storage BLOB コンテナーに追加されたドキュメントを受け取り、Azure Batch を使用して光学式文字認識 (OCR) を適用する例について説明します。 OCR 処理を効率化するために、この例では BLOB コンテナーにファイルが追加されるたびに Batch OCR ジョブを実行する Azure 関数を構成します。 以下の方法について説明します。

  • Azure portal を使用してプールとジョブを作成します。
  • BLOB コンテナーと共有アクセス署名 (SAS) を作成します。
  • BLOB によってトリガーされる Azure 関数を作成します。
  • Storage に入力ファイルをアップロードします。
  • タスクの実行を監視する。
  • 出力ファイルを取得します。

前提条件

Azure へのサインイン

Azure portal にサインインします。

Azure portal を使用して Batch プールと Batch ジョブを作成する

このセクションでは、Azure portal を使用して、OCR タスクを実行する Batch プールと Batch ジョブを作成します。

プールを作成する

  1. Azure 資格情報を使用して、Azure portal にサインインします。

  2. 左側のナビゲーションにある [プール] を選び、次に検索フォームの上にある [追加] ボタンを選び、プールを作成します。

    Batch アカウントの [プール] ページで [追加] ボタンが強調表示されているスクリーンショット。

    1. [プール ID] を入力します。 この例では、プールに「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"」を入力します。 必ず [昇格レベル][プール autouser、管理者] として設定します。これにより、開始タスクに "sudo" を使用したコマンドを含めることができます。
    8. [OK] を選択します。

ジョブの作成

  1. 左側のナビゲーションにある [ジョブ] を選び、次に検索フォームの上にある [追加] ボタンを選び、プールにジョブを作成します。
    1. [ジョブ ID] を入力します。 この例では、ocr-job を使用します。
    2. [現在のプール] で [ocr-pool] を選ぶか、任意の名前を設定します。
    3. [OK] を選択します。

BLOB コンテナーを作成する

ここで、OCR Batch ジョブの入出力ファイルを格納する BLOB コンテナーを作成します。 この例では、入力コンテナーは input という名前で、そこには OCR が適用されていないドキュメントがすべて処理のために最初にアップロードされます。 出力コンテナーは output という名前で、そこには OCR が適用された処理済みのドキュメントが Batch ジョブによって書き込まれます。

  1. Azure portal で、[ストレージ アカウント] を検索して選びます。

  2. Batch アカウントにリンクされているストレージ アカウントを選びます。

  3. 左側のナビゲーションにある [コンテナー] を選び、「BLOB コンテナーを作成する」の手順に従って、2 つの BLOB コンテナーを作成します (1 つは入力ファイル用、1 つは出力ファイル用)。

  4. 出力コンテナーを選び、出力コンテナー用の共有アクセス署名を作成し、[共有アクセス トークン] ページの [アクセス許可] ドロップダウンで [書き込み] を選びます。 それ以外のアクセス許可は必要ありません。

  5. [SAS トークンおよび URL の生成] を選び、後で関数に使用する [BLOB SAS URL] をコピーします。

    [アクセス許可] ドロップダウンと [SAS トークンおよび URL の生成] ボタンが強調表示された [共有アクセス トークン] ページのスクリーンショット。

Azure Function の作成

このセクションでは、入力コンテナーにファイルがアップロードされるたびに OCR Batch ジョブをトリガーする Azure 関数を作成します。

  1. Azure Blob Storage によってトリガーされる関数の作成」の手順に従って、関数を作成します。

    1. [ランタイム スタック] で [.NET] を選択します。 この関数の例では、Batch .NET SDK を活用するために C# を使用します。
    2. [ストレージ] ページで、Batch アカウントにリンクしたものと同じストレージ アカウントを使用します。
    3. [確認および作成] > [作成]を選びます。

    次のスクリーンショットは、例の情報を使用した [関数アプリの作成] ページの [基本] タブです。

    例の情報を使用した [関数アプリの作成] ページの [基本] タブのスクリーンショット。

  2. 関数で、左側のナビゲーションから [関数] を選択し、[作成] を選びます。

  3. [関数の作成] ウィンドウで [Azure Blob Storage trigger] を選びます。

  4. [新しい関数] に関数名を入力します。 この例での名前は「OcrTrigger」です。 [Path] に「input/{name}」と入力します。ここには BLOB コンテナーの名前を入力します。

  5. [作成] を選択します

    [Azure Blob Storage trigger] オプション、[新しい関数] と [Path] フィールドが強調表示された、[関数の作成] ウィンドウのスクリーンショット。

  6. BLOB によってトリガーされる関数が作成されたら、 [Code + Test](コードとテスト) を選択します。 関数内で GitHub の run.csxfunction.proj を使用します。 function.proj は既定では存在しないので、 [アップロード] ボタンを選択して開発ワークスペースにアップロードします。

    • run.csx は、ご自分の入力 BLOB コンテナーに新しい BLOB が追加されると実行されます。
    • function.proj は、Batch .NET SDK など、ご自分の関数コード内で外部ライブラリを列挙します。
  7. run.csx ファイルの Run() 関数内にある変数のプレースホルダーの値を変更して、ご自分の Batch およびストレージの資格情報を反映させます。 Batch とストレージ アカウントの資格情報は、Azure portal の Batch とストレージ アカウントの [キー] セクションで確認できます。

関数をトリガーし、結果を取得する

スキャン済みファイルの一部またはすべてを GitHub 上の input_files ディレクトリからご自分の入力コンテナーにアップロードします。

Azure portal で、関数の [コードとテスト] ページから関数をテストできます。

  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. Batch アカウントの [プール] ページで、プールのその他のオプションを選びます。
  2. [削除] を選択します。

プールを削除すると、ノード上のタスク出力はすべて削除されます。 ただし、出力ファイルはストレージ アカウントに残ります。 Batch アカウントとストレージ アカウントも、不要になったら削除できます。

次のステップ

.NET API を使用して Batch ワークロードのスケジュール設定と処理を行う他の例については、GitHub のサンプルを参照してください。