このチュートリアルでは、 Azure Functions を使用して Batch ジョブをトリガーする方法について説明します。 この記事では、Azure Storage BLOB コンテナーに追加されたドキュメントを受け取り、Azure Batch を使用して光学式文字認識 (OCR) を適用する例について説明します。 OCR 処理を効率化するために、この例では、ファイルが BLOB コンテナーに追加されるたびに Batch OCR ジョブを実行する Azure 関数を構成します。 次の方法を学びます:
- Azure portal を使用してプールとジョブを作成します。
- BLOB コンテナーと Shared Access Signature (SAS) を作成します。
- BLOB によってトリガーされる Azure 関数を作成します。
- Storage に入力ファイルをアップロードします。
- タスクの実行を監視する。
- 出力ファイルを取得します。
[前提条件]
- アクティブなサブスクリプションを持つ Azure アカウント。 無料でアカウントを作成できます。
- Azure Batch アカウントとリンクされた Azure Storage アカウント。 アカウントを作成してリンクする方法の詳細については、「 Batch アカウントの作成」を参照してください。
Azure にサインインする
Azure portal にサインインします。
Azure portal を使用して Batch プールと Batch ジョブを作成する
このセクションでは、Azure portal を使用して、OCR タスクを実行する Batch プールと Batch ジョブを作成します。
プールを作成する
Azure 資格情報を使用して Azure portal にサインインします。
左側のナビゲーションで [ プール ] を選択し、検索フォームの上にある [ 追加 ] ボタンを選択してプールを作成します。
-
プール ID を入力します。 次の使用例は、プール
ocr-poolに名前を付けます。 - パブリッシャーとして カノニカル を選択 します。
- オファーとして 0001-com-ubuntu-server-jammy を選択します。
- SKU として 22_04-lts を選択します。
- [
Standard_F2s_v2 - 2 vCPUs, 2 GB Memory] セクションの VM サイズとしてを選択します。 - [スケール] セクションの [モード] を [固定] に設定し、[ターゲットの専用ノード] に「3」と入力します。
-
[開始タスク] を [開始タスクを有効] に設定し、[コマンド ライン] にコマンド
/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コマンドを含めることができます。 - [OK] を選択.
-
プール ID を入力します。 次の使用例は、プール
ジョブの作成
- 左側のナビゲーションで [ ジョブ ] を選択してプールにジョブを作成し、検索フォームの上にある [追加] ボタンを選択します。
-
ジョブ ID を入力します。 この例では、
ocr-jobを使用します。 - [
ocr-pool] にを選択するか、プールに対して選択した任意の名前を選択します。 - [OK] を選択.
-
ジョブ ID を入力します。 この例では、
BLOB コンテナーを作成する
ここでは、OCR Batch ジョブの入力ファイルと出力ファイルを格納する BLOB コンテナーを作成します。 この例では、入力コンテナーには input という名前が付けられ、OCR を使用しないすべてのドキュメントが最初にアップロードされて処理されます。 出力コンテナーは output という名前で、Batch ジョブが処理されたドキュメントを OCR で書き込む場所です。
Azure portal で ストレージ アカウントを 検索して選択します。
Batch アカウントにリンクされているストレージ アカウントを選択します。
左側のナビゲーションから [コンテナー] を選択し、「BLOB コンテナーの作成」の手順に従って、2 つの BLOB コンテナー (入力ファイル用に 1 つ、出力ファイル用に 1 つ) を作成します。
出力コンテナーを選択して、出力コンテナーの共有アクセス署名を作成し、[共有アクセス トークン] ページの [アクセス許可] ドロップダウンで [書き込み] を選択します。 他のアクセス許可は必要ありません。
[ SAS トークンと URL の生成] を選択し、後で関数に使用する BLOB SAS URL を コピーします。
Azure Function の作成
このセクションでは、ファイルが入力コンテナーにアップロードされるたびに OCR Batch ジョブをトリガーする Azure 関数を作成します。
「Azure Blob Storage によってトリガーされる関数を作成する」の手順に従って、関数を作成します。
- ランタイム スタックの場合は、[.NET] を選択します。 この関数例では、C# を使用して Batch .NET SDK を利用します。
- [ ストレージ ] ページで、Batch アカウントにリンクしたのと同じストレージ アカウントを使用します。
- [確認および作成] > [作成]を選びます。
次のスクリーンショットは、[基本] タブの [関数アプリの作成] ページで、例の情報を使用しています。
関数で、左側のナビゲーションから [関数 ] を選択し、[ 作成] を選択します。
[ 関数の作成 ] ウィンドウで、Azure Blob Storage トリガーを選択します。
新しい関数に関数の名前を入力します。 この例では、名前は OcrTrigger です。 [Path] に「
input/{name}」と入力します。ここには BLOB コンテナーの名前を入力します。を選択してを作成します。
BLOB によってトリガーされる関数が作成されたら、[ コード + テスト] を選択します。 関数で GitHub の
run.csxとfunction.projを使用します。function.projは既定では存在しないため、[ アップロード ] ボタンを選択して開発ワークスペースにアップロードします。-
run.csxは、新しい BLOB が入力 BLOB コンテナーに追加されたときに実行されます。 -
function.projには、関数コード内の外部ライブラリ (Batch .NET SDK など) が一覧表示されます。
-
batch とストレージの資格情報を反映するように、
Run()ファイルのrun.csx関数の変数のプレースホルダー値を変更します。 Batch とストレージ アカウントの資格情報は、Azure portal の Batch アカウントとストレージ アカウントの [キー ] セクションで確認できます。
関数をトリガーして結果を取得する
GitHub の input_files ディレクトリから入力コンテナーに、スキャンされたファイルの一部またはすべてをアップロードします。
関数のコード + テスト ページで、Azure portal から関数をテストできます。
- [コード + テスト] ページで [テスト/実行] を選択します。
- [c1]入力[/c1]タブの[本文]に入力コンテナーのパスを入力します。
- [実行] を選択します。
数秒後、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 リーダーで開くと検索できます。
リソースをクリーンアップする
ジョブがスケジュールされていない場合でも、ノードの実行中はプールに対して料金が発生します。 プールが不要になったら、次の手順で削除します。
- Batch アカウントの [ プール ] ページで、プールのその他のオプションを選択します。
- を選択して、を削除します。
プールを削除すると、ノード上のタスク出力はすべて削除されます。 ただし、出力ファイルはストレージ アカウントに残ります。 不要になったら、Batch アカウントとストレージ アカウントを削除することもできます。
次のステップ
.NET API を使用して Batch ワークロードをスケジュールおよび処理する例については、GitHub のサンプルを参照してください。