ストレージ内の Event Grid イベントからバッチ エンドポイントを実行する

適用対象:Azure CLI ml extension v2 (現行)Python SDK azure-ai-ml v2 (現行)

Event Grid は、さまざまな Azure サービスおよびアプリケーションにわたってイベントを簡単に管理するために使用できるフル マネージド サービスです。 このサービスは、イベント ドリブンかつサーバーレスなアプリケーションの構築手順を簡略化します。 このチュートリアルでは、ファイルがストレージ アカウント内に作成された瞬間にファイルを処理するためのバッチ エンドポイントのジョブをトリガーする方法を説明します。 このアーキテクチャでは、ロジック アプリ ワークフローを使用してこれらのイベントをサブスクライブし、エンドポイントをトリガーします。

次の図は、このソリューションのアーキテクチャを示したものです。

このアーキテクチャのコンポーネントを示す概念図。

以下の手順は、このソリューションにおける大まかな手順を示したものです。

  1. 特定のストレージ アカウント内に新しい BLOB が作成されると、ファイル作成イベントがトリガーされます。

  2. そのイベントは Event Grid に送信され、すべてのサブスクライバーに対して処理が行われます。

  3. ロジック アプリ ワークフローは、これらのイベントをサブスクライブしてリッスンします。

    ストレージ アカウントは複数のデータ資産を含んでいる可能性があるため、イベント フィルター処理は、ストレージ アカウント内の特定のフォルダーで発生したイベントにのみ反応するように適用されます。 必要であれば、追加のフィルター処理を (たとえば、ファイル拡張子に基づいて) 行うことができます。

  4. ロジック アプリ ワークフローがトリガーされ、以下のアクションが実行されます。

    1. サービス プリンシパルからの資格情報を使用して、バッチ エンドポイントを呼び出す認可トークンを取得します。

    2. 新しく作成されたファイルを入力として、バッチ エンドポイント (既定のデプロイ) をトリガーします。

  5. バッチ エンドポイントは、ファイルを処理するために作成されたジョブの名前を返します。

重要

Event Grid と接続してバッチ エンドポイントを呼び出すロジック アプリ ワークフローを使用する場合は、ストレージ アカウント内に作成された "BLOB ファイルごと" に 1 つのジョブを生成します。 バッチ エンドポイントはファイル レベルで作業を分散するため、並列処理は行われないことに注意してください。 そうではなく、バッチ エンドポイントの機能は、同じコンピューティング クラスターで複数のジョブを実行するために使用します。 すべてのフォルダー上で自動的にジョブを実行する必要がある場合は、Azure Data Factory からバッチ エンドポイントを呼び出す方法に切り替えることをお勧めします。

前提条件

  • モデルがバッチ エンドポイントとして正しくデプロイされていること。 必要に応じて、パイプライン コンポーネント デプロイと連携するようにこのアーキテクチャを拡張できること。

  • バッチ デプロイは、batch-cluster という名前のコンピューティング クラスター内で実行されていること。

  • 作成するロジック アプリは、REST を使用して Azure Machine Learning バッチ エンドポイントと通信すること。

    バッチ エンドポイントで REST API を使用する方法の詳細については、「バッチ エンドポイント用のジョブと入力データの作成」を参照してください。

バッチ エンドポイントに対して認証する

Azure Logic Apps では、HTTP アクションを使用することで、バッチ エンドポイントの REST API を呼び出すことができます。 バッチ エンドポイントは認可のために Microsoft Entra ID をサポートしています。そのため、API に対する要求には適切な認証処理が必要です。

このチュートリアルでは、このシナリオにおいてバッチ エンドポイントとの認証と対話にサービス プリンシパルを使用します。

  1. Microsoft Entra ID を使用したアプリケーションの登録とサービス プリンシパルの作成」に従って、サービス プリンシパルを作成します。

  2. オプション 3: 新しいクライアント シークレットの作成」に従って、認証に使用するシークレットを作成します。

  3. クライアント シークレットのを保存するのを忘れないでください。これは 1 回しか表示されません。

  4. アプリケーションの [概要] ペインの client IDtenant id を保存するのを忘れないでください。

  5. アクセス権の付与」に従って、サービス プリンシパルにワークスペースへのアクセス権を付与します。 この例では、サービス プリンシパルには以下のものが必要です。

    • バッチ デプロイを読み取り、それらに対してアクションを実行するためのワークスペース内のアクセス許可。
    • データ ストアの読み取りと書き込みを行うアクセス許可。

データ アクセスを有効にする

デプロイ ジョブに送信したい入力データを指定するために、このチュートリアルでは Event Grid によって提供されるクラウド URI を使用します。 バッチ エンドポイントは、マウントされたデータを読み取るためにジョブの ID を保持していますが、データのマウントにはコンピューティングの ID を使用します。 そのため、ユーザー割り当てマネージド ID をコンピューティング クラスターに割り当て、クラスターが基になるデータをマウントするためのアクセス権を持つようにする必要があります。 データ アクセスを確保するためには、以下の手順に従います。

  1. マネージド ID リソースを作成します。

    IDENTITY=$(az identity create  -n azureml-cpu-cluster-idn  --query id -o tsv)
    
  2. 以下のようにして、作成したマネージド ID を使用するようにコンピューティング クラスターを更新します。

    Note

    この例では、cpu-cluster という名前のコンピューティング クラスターを作成済みであり、それがエンドポイントの既定のデプロイとして使用されていることを前提としています。

    az ml compute update --name cpu-cluster --identity-type user_assigned --user-assigned-identities $IDENTITY
    
  3. Azure portal で、マネージド ID にデータを読み取る適切なアクセス許可があることを確認します。

    ストレージ サービスにアクセスするには、少なくともストレージ BLOB データ閲覧者としての、ストレージ アカウントへのアクセス権が必要です。 Azure portal を使用してアクセス レベルを変更できるのは、ストレージ アカウントの所有者だけです。

ロジック アプリを作成します

  1. Azure portal の Azure ホーム ページで、[リソースの作成] を選択します。

  2. Azure Marketplace メニューで、 [統合]>[ロジック アプリ] を選択します。

    Azure Marketplace メニューで [統合] と [ロジック アプリ] のオプションが選択されている様子を表すスクリーンショット。

  3. [ロジック アプリの作成] ペインの [基本] タブで、ロジック アプリ リソースに関する次の情報を入力します。

    プロパティ 必要 説明
    サブスクリプション はい <Azure サブスクリプション名> Azure サブスクリプション名。 この例では、従量課金制を使用します。
    リソース グループ はい LA-TravelTime-RG ロジック アプリ リソースと関連リソースを作成する Azure リソース グループ。 この名前は、リージョン間で一意である必要があり、文字、数字、ハイフン (-)、アンダースコア (_)、かっこ (())、ピリオド (.) のみを含めることができます。
    名前 はい LA-TravelTime ロジック アプリ リソースの名前。リージョン間で一意である必要があり、文字、数字、ハイフン (-)、アンダースコア (_)、かっこ (())、およびピリオド (.) のみを含めることができます。

    Azure portal、ロジック アプリの作成ペイン、新しいロジック アプリ リソースの情報を示すスクリーンショット。

  4. 選択を続ける前に、[プラン] セクションに移動します。 [プランの種類] として [従量課金] を選択すると、マルチテナント Azure Logic Apps で実行される従量課金ロジック アプリ ワークフローの設定のみが表示されます。

    重要

    プライベートリンクが有効なワークスペースの場合は、プライベート ネットワーク構成を許可する Azure Logic Apps の Standard プランを使用する必要があります。

    また、[プランの種類] プロパティでは、使用する課金モデルも指定します。

    プランの種類 説明
    Standard このロジック アプリの種類は既定の選択肢であり、シングルテナント Azure Logic Apps で実行され、Standard 価格モデルを使用します。
    従量課金プラン このロジック アプリの種類は、グローバルなマルチテナント Azure Logic Apps で実行され、従量課金価格モデルを使用します。
  5. 以下の選択を続けます。

    プロパティ 必要 説明
    [リージョン] はい 米国西部 アプリの情報を格納するための Azure データセンター リージョン。 この例では、サンプル ロジック アプリを Azure の米国西部リージョンにデプロイします。
    Log Analytics を有効にする はい いいえ このオプションは、従量課金のロジック アプリの種類を選んだ場合にのみ表示されて適用されます。 診断ログを有効にする場合にのみ、このオプションを変更します。 このチュートリアルでは、既定の選択をそのまま使います。
  6. 完了したら、 [確認および作成] を選択します。 Azure によってロジック アプリ リソースに関する情報が検証されたら、[作成] を選択します。

  7. Azure によってアプリがデプロイされたら、 [リソースに移動] を選択します。

    Azure によってロジック アプリのワークフロー デザイナーが開かれます。

ワークフロー パラメーターを構成する

このロジック アプリ ワークフローでは、パラメーターを使用してバッチ デプロイの実行に必要な特定の情報を保存します。

  1. ワークフロー デザイナー ツール バーで、[パラメーター] を選択します。

    ワークフローに必要なパラメーターを定義するための [パラメーター] ペインを示すスクリーンショット。

  2. [パラメーター] ペインで、[パラメーターの作成] を選択し、作成する各パラメーターに関する以下の情報を指定します。

    ヒント

    バッチ エンドポイントに対する認証」で構成した値を使います。

    パラメーター名 説明 サンプルの値
    tenant_id エンドポイントがデプロイされるテナントの ID。 00000000-0000-0000-00000000
    client_id エンドポイントの呼び出しに使用されるサービス プリンシパルのクライアント ID。 00000000-0000-0000-00000000
    client_secret エンドポイントの呼び出しに使われるサービス プリンシパルのクライアント シークレット ABCDEFGhijkLMNOPQRstUVwz
    endpoint_uri エンドポイント スコアリング URI

    重要: この URI は、実行したいエンドポイント用です。 エンドポイントには、既定のデプロイを構成しておく必要があります。
    https://<endpoint_name>.<region>.inference.ml.azure.com/jobs

    次の例で、サンプルのパラメーターを示します。

    デザイナーで 1 つのパラメーターを追加する方法を示すスクリーンショット。

    詳細については、「Azure Logic Apps のワークフロー入力のためのクロス環境パラメーターの作成」を参照してください。

トリガーを追加する

ここではストレージ アカウントの指定したフォルダー (データ資産) 内に新しいファイルが作成されるたびにロジック アプリ ワークフローをトリガーする必要があります。 ロジック アプリはイベントの情報を使用してバッチ エンドポイントを呼び出し、処理するべき特定のファイルを渡します。

  1. ワークフロー デザイナーで、こちらの一般的な手順に従ってリソース イベントの発生時という名前の Event Grid トリガーを追加します

  2. 接続情報ボックスで、使用する認証の種類を選択した後、[サインイン] を選択します。

  3. トリガー ボックスに次の情報を指定します。

    プロパティ 説明
    リソースの種類 Microsoft.Storage.StorageAccounts イベントを出力するリソースの種類。
    サブスクリプション お使いのサブスクリプション名 ストレージ アカウント用のサブスクリプション。
    リソース名 ストレージ アカウント名の取得 ファイルが生成されるストレージ アカウントの名前。
    イベントの種類の項目 Microsoft.Storage.BlobCreated イベントの種類。
  4. [詳細パラメーター] リストから [プレフィックス フィルター] を選択し、次の値を指定します。

    /blobServices/default/containers/<container-name>/blobs/<path-to-data-folder>

    重要

    プレフィックス フィルター プロパティによって、Event Grid は指定した特定のパス内に BLOB が作成された場合にのみ、ワークフローに通知を行うことができます。 この場合、ファイルは何らかの外部プロセスによって、選択したストレージ アカウント内にあるコンテナー <container-name> 内の <path-to-data-folder> によって指定されるフォルダー内に作成されるものと想定します。 データの場所に合わせてこのパラメーターを構成します。 そうしないと、ストレージ アカウントの任意の場所で作成されたすべてのファイルに対してこのイベントが発生します。 詳細については、「Event Grid 用のイベント フィルター処理」を参照してください。

    次の例は、トリガーがどのように表示されるかを示しています。

    ロジック アプリのトリガー アクティビティのスクリーンショット。

アクションを構成する

  1. [リソース イベントの発生時] トリガーで、こちらの一般的な手順に従って HTTP アクションを追加します。 アクションの名前を承認に変更します。

  2. [承認] アクションで、以下の情報を指定します。

    プロパティ メモ
    方法 POST HTTP メソッド
    URI concat('https://login.microsoftonline.com/', parameters('tenant_id'), '/oauth2/token') この式を入力するには、[URI] ボックスの内部を選択します。 表示される選択肢から、式エディター (数式アイコン) を選択します。
    ヘッダー Content-Type (値 application/x-www-form-urlencoded)
    本文​​ concat('grant_type=client_credentials&client_id=', parameters('client_id'), '&client_secret=', parameters('client_secret'), '&resource=https://ml.azure.com') この式を入力するには、[本文] ボックスの内部を選択します。 表示される選択肢から、式エディター (数式アイコン) を選択します。

    次の例は、サンプルの承認アクションを示しています。

    ロジック アプリ ワークフロー内のサンプルの承認アクションを示すスクリーンショット。

  3. [承認] アクションで、別の HTTP アクションを追加し、タイトルを [呼び出し] に変更します。

  4. [呼び出し] アクションで、以下の情報を指定します。

    プロパティ メモ
    方法 POST HTTP メソッド
    URI endpoint_uri [URI] ボックスの内部を選択した後、[パラメーター][endpoint_uri] を選択します。
    ヘッダー Content-Type (値 application/json)
    ヘッダー Authorization (値 concat('Bearer ', body('Authorize')['access_token'])) この式を入力するには、[ヘッダー] ボックスの内部を選択します。 表示される選択肢から、式エディター (数式アイコン) を選択します。
  5. [本文] ボックスの内部を選択し、表示される選択肢から式エディター (数式アイコン) を選択して、次の式を入力します。

    replace('{
     "properties": {
       "InputData": {
         "mnistinput": {
            "JobInputType" : "UriFile",
            "Uri" : "<JOB_INPUT_URI>"
         }
       }
      }
    }', '<JOB_INPUT_URI>', triggerBody()?[0]['data']['url'])
    

    ヒント

    前のペイロードは、モデル デプロイに対応するものです。 パイプライン コンポーネント デプロイを使用する場合は、パイプラインの入力の想定に従って形式を調整します。 REST 呼び出しで入力を構造化する方法の詳細については、「バッチ エンドポイント (REST) 用のジョブと入力データの作成」を参照してください。

    次の例は、サンプルの呼び出しアクションを示しています。

    ロジック アプリ ワークフローのサンプルの呼び出しアクションを示すスクリーンショット。

    Note

    呼び出しアクションはバッチ ジョブをトリガーしますが、このアクションはその完了を待機しません。 既定では、Azure Logic Apps は実行時間の長いアプリケーション用には設定されていません。 ジョブが完了するまで待機する必要がある場合は、Azure Data Factory からバッチ エンドポイントを実行する方法に切り替えることをお勧めします。

  6. 完了したら、ワークフローを保存します。

    ロジック アプリ ワークフローは実行の準備が整い、指定されたパスの下に新しいファイルが作成されるたびに自動的にトリガーされます。

  7. アプリがイベントを正常に受信したことを確認するには、以下のようにアプリの [実行履歴] を確認します。

    ロジック アプリ ワークフローの実行履歴を示すスクリーンショット。

次のステップ