画像を処理するための Azure 関数を作成する

Stream Analytics ジョブをクラウドで実行されている機械学習モデルに接続する方法の 1 つは、Stream Analytics の出力として Azure 関数を使うことです。

関数は、Stream Analytics で出力が生成されるたびに呼び出されて、予測を実行するよう機械学習モデルに通知できます。

  1. Azure portal で、[+ リソースの作成][コンピューティング][関数アプリ] の順にクリックします。

    重要

    現在、ポータルで Azure 関数を作成するための新しいワークフローをサポートするように、サンドボックスを更新する作業に取り組んでいます。 それが使用できるようになったときに、手順が更新されます。 それまでは、現在の手順に一致する作成エクスペリエンスのバージョンを使用することができます。これを行うには、[関数アプリ] ページの上部にある、[従来の関数アプリの作成エクスペリエンスをご希望ですか?] というラベルの付いた通知バーをクリックします。 このエクスペリエンスには、Azure Marketplace から [関数アプリ (クラシック)] オプションを選択してアクセスすることもできます。

    Azure 関数アプリの作成

  2. Azure 全体で一意のアプリ名を入力します。 前に作成したのと同じリソース グループに、関数アプリを配置します。

  3. [リソース グループ] が、前のユニットで使用していたリソース グループに設定されていることを確認します。

  4. [ランタイム スタック] として [Node.js] を選択します。

  5. [リージョン] として [米国中南部] を選択します。

  6. [次へ] をクリックして、[ホスティング] タブに進みます。

  7. [ストレージ アカウント] 内で、以前に作成されたストレージ アカウントを選択します

  8. [オペレーティング システム][Windows] に設定します

  9. [プラン][プランの種類][App Service プラン] に設定します。 これにより、プランを選択するためのオプションが表示されます。

    ヒント

    Azure 関数アプリを作成するときは、次の 2 つのホスティング プランから選択できます: 従量課金プランまたは App Service プラン。 前者は、関数が実行されているときにだけ支払うので安価です。 ただし、従量課金プランでは、関数が呼び出されてから何分間も実行されない可能性があります。 App Service プランでは、支払い額は増えますが、関数はすぐに実行されます。

  10. 新しいプランを作成するには、[Windows プラン (米国中南部)] を選択したままにします。

  11. 現在の S1 の [SKU とサイズ] オプションの [サイズの変更] リンクを選択します。

  12. [スペックの選択] パネルで、[Dev/Test] タブを選択し、[F1] オプションを選択します。

  13. [次: 監視 >] をクリックして関数アプリ オプションの次のタブに移動します。

  14. この演習では監視は必要ないので、[Application Insights を有効にする][いいえ] を選択してオフにします。

  15. このリソースのタグはカスタマイズしないので、[確認および作成] ボタンを選択します。

    Azure 関数アプリの作成

  16. 構成が検証されたら、[作成] をクリックします。

関数アプリをカスタマイズする

関数アプリの作成には数秒かかります。 完了したら、その中の一部の設定をカスタマイズします。

  1. ポータルでリソース グループを選択し、関数アプリが表示されるまで [最新の情報に更新] をクリックします。 関数アプリをクリックし、[プラットフォーム機能] タブに切り替えます

  2. [SSL] パネルを開きます。

    関数アプリの SSL の設定を開く

  3. [プロトコル設定] で、TLS の最小バージョンが [1.0] に設定されていることを確認します。

    TLS の最小バージョンの設定

  4. [設定] パネルを閉じて、関数アプリの [プラットフォーム機能] セクションに戻ります。

  5. [関数] の右にある [+] 記号をクリックします。 [ポータル内] オプション、[続行] の順にクリックします。

    関数の追加

  6. [webhook + API] をクリックし、[作成] をクリックします。

    Webhook 関数の追加

  7. コード エディターに表示されているコードを、次のステートメントに置き換えます。 次に、[保存][実行] の順にクリックします。

    module.exports = async function (context, req) {
        context.log(req.rawBody);
    };
    

    関数の保存と実行

  8. リソース グループに戻り、左側のメニューで [出力] を選択して、ポータルで Stream Analytics ジョブに戻ります。

  9. [+ 追加] をクリックして、[Azure 関数] を選択し、出力として Azure 関数を追加します。

    出力の追加

  10. 出力に FunctionOutput という名前を付けます。 この演習で前に作成した関数アプリを選択し、それ以外はすべて既定値をそのまま使います。 次に、[保存] をクリックします。

    出力の作成

    Stream Analytics ジョブは、複数の入力を受け付けるように、複数の出力もサポートします。 出力を Azure 関数に渡すだけでなく、Azure SQL データベース、Azure Cosmos DB データベース、Blob Storage、その他の場所のジョブからの出力をログに記録するための出力を簡単に追加できます。

  11. 出力の一覧に出力が表示されるまで待ちます。これは、Stream Analytics ジョブに正常に追加されたことを示します。

  12. Stream Analytics ジョブで、左側のメニューの [クエリ] を選択します。

  13. 前の演習で作成した CameraInput クエリを変更して、追加したばかりの出力にクエリの結果を送る INTO 句 (次の 2 行目) を含めます。

    SELECT C1.deviceId, C1.latitude, C1.longitude, C1.url, C1.timestamp
      INTO FunctionOutput
      FROM CameraInput C1 TIMESTAMP BY timestamp
      JOIN CameraInput C2 TIMESTAMP BY timestamp
        ON C1.deviceId = C2.deviceId
            AND DATEDIFF(ss, C1, C2) BETWEEN 0 AND 10
            AND C1.timestamp != C2.timestamp
    
  14. [保存] をクリックしてクエリを保存します。

  15. 左側のメニューで [概要] を選択し、[開始] をクリックして Stream Analytics ジョブの実行を開始します。

    Stream Analytics ジョブの開始

  16. [ジョブ出力の開始時刻][現在] に設定されていることを確認してから、[開始] をクリックして実行を開始します。

    ジョブの開始時刻の指定

ジョブが開始するまでに数分かかります。 次のユニットに移動し、カメラ イベントを生成するシミュレーションの設定を開始できます。