次の方法で共有


クイック スタート: Visual Studio Code を使用して Stream Analytics ジョブを作成する

このクイックスタートでは、ローカル コンピューターで Visual Studio Code 用 ASA ツール拡張機能を使用して、Azure Stream Analytics (ASA) ジョブを作成、実行、送信します。 IoT Hub からリアルタイム ストリーミング データを読み取り、温度が 27° を超えるイベントをフィルター処理する ASA ジョブを構築する方法を学習します。 出力結果は、BLOB ストレージ内のファイルに送信されます。 このクイック スタートで使用される入力データは、Raspberry Pi オンライン シミュレーターによって生成されます。

注意

Visual Studio Code ツールでは、中国東部、中国北部、ドイツ中部、ドイツ北東部のリージョンでのジョブはサポートされていません。

前提条件

Azure Stream Analytics ツール拡張機能をインストールする

  1. Visual Studio Code (VS Code) を開きます。

  2. 左ペインの [拡張機能] から Stream Analytics を検索し、Azure Stream Analytics ツール拡張機能で [インストール] を選択します。

    Visual Studio Code の [拡張機能] ページと Stream Analytics 拡張機能をインストールするオプションを示すスクリーンショット。

  3. インストール後に、アクティビティ バーの Azure アイコンを選択し、Azure にサインインします。

    Azure にサインインする方法を示すスクリーンショット。

  4. サインインすると、Azure アカウントの下にサブスクリプションが表示されます。

注意

ASA ツール拡張機能により、VS Code を開くたびに自動的にサインインされます。 アカウントに 2 要素認証がある場合は、PIN を使用せずに電話による認証を使用することをお勧めします。 Azure アカウントをサインアウトするには、Ctrl + Shift + P キーを押して「Azure: Sign Out」と入力します。

IoT シミュレーターを実行する

  1. Raspberry Pi Azure IoT オンライン シミュレーターを開きます。

  2. 前のセクションで保存した Azure IoT Hub デバイスの接続文字列を使用して、行 15 のプレースホルダーを置き換えます。

  3. [実行] を選択します。 お客様の IoT ハブに送信されているセンサー データとメッセージが出力に表示されます。

    サンプル クエリを含む **Raspberry Pi Azure IoT オンライン シミュレーター**のページを示すスクリーンショット。

    重要

    数分後に [リセット] を選択して、接続文字列をリセットします。

BLOB ストレージを作成する

  1. Azure portal の左上隅で、 [リソースの作成]>[ストレージ]>[ストレージ アカウント] の順に選択します。

    [ストレージ アカウントの作成] メニューを示すスクリーンショット。

  2. [ストレージ アカウントの作成] ウィンドウで、ストレージ アカウントの名前、場所、リソース グループを入力します。 お客様が作成した IoT ハブと同じ場所およびリソース グループを選択します。 次に、[確認][作成] を選択して、ストレージ アカウントを作成します。

    [ストレージ アカウントの作成] ページを示すスクリーンショット。

  3. [ストレージ アカウント] ページの左側のメニューで [コンテナー] を選んでから、コマンド バーの [+ コンテナー] を選びます。

    [コンテナー] ページを示すスクリーンショット。

  4. [新しいコンテナー] ページで、コンテナーの [名前] を指定し、[パブリック アクセス レベル][プライベート (匿名アクセスなし)] のままにして、[OK] を選びます。

    BLOB コンテナーの作成ページを示すスクリーンショット。

Stream Analytics プロジェクトを作成する

  1. Visual Studio Code で、Ctrl + Shift + P キー を押して、「ASA: 新しいプロジェクトの作成」と入力します。

    コマンド パレットでの [ASA: 新しいプロジェクトの作成] の選択を示すスクリーンショット。

  2. myASAproj」のようにプロジェクト名を入力し、プロジェクトのフォルダーを選択します。

    ASA プロジェクト名の入力を示すスクリーンショット。

  3. ASA プロジェクトがワークスペースに追加されます。 これは、3 つのフォルダー (InputsOutputsFunctions) で構成されています。 また、クエリ スクリプト (*.asaql)JobConfig.json ファイル、asaproj.json 構成ファイルも含まれます。

    Visual Studio Code での Stream Analytics プロジェクト ファイルを示すスクリーンショット。

    asaproj.json ファイルには、Stream Analytics ジョブを Azure に送信するための入力、出力、およびジョブ構成ファイルの設定が含まれています。

    Note

    コマンド パレットから入力と出力を追加すると、対応するパスが自動的に asaproj.json に追加されます。 ディスク上で入力または出力を直接追加または削除する場合は、asaproj.json に手動で追加または削除する必要があります。 入力と出力を 1 か所にまとめてから、それぞれの asaproj.json にパスを指定して、それらを異なるジョブで参照するように選択することもできます。

変換クエリを定義する

  1. myASAproj.asaql ファイルを開き、次のクエリを追加します。

    SELECT *
    INTO Output
    FROM Input
    WHERE Temperature > 27
    

    変換クエリを示すスクリーンショット。

ジョブの入力を構成する

  1. Stream Analytics プロジェクトの [入力] フォルダーを右クリックします。 次に、コンテキスト メニューから [ASA: 入力の追加] を選択します。

    Visual Studio Code の [ASA: 入力の追加] メニューを示すスクリーンショット。

    または、Ctrl + Shift + P キーを押してコマンド パレットを開き、「ASA: 入力の追加」と入力します。

  2. 入力の種類として [IoT Hub] を選択します。

    VS Code のコマンド パレットでの IoT ハブの選択を示すスクリーンショット。

  3. ドロップダウン メニューで [Select from Azure Subscriptions]\(Azure サブスクリプションから選択\) を選んで、Enter キーを押します。

  4. 名前に「Input」と入力し、Enter キーを押します。

  5. Inputs フォルダーの下に、IoTHub1.json ファイルが作成されていることがわかります。

  6. JSON ファイルで、指定された [名前]Input であることを確認します。

  7. Input.json の JSON エディターで、[Select from your subscriptions]\(サブスクリプションから選択\) を選んで、IoT ハブがある Azure サブスクリプションを選択します。

    [Select from your subscriptions]\(サブスクリプションから選択\) リンクを含む JSON エディターを示すスクリーンショット。

  8. JSON エディターで、[IoT Hub の選択] を選び、作成した IoT ハブを選択します。

    [IoT Hub の選択] リンクを含む JSON エディターを示すスクリーンショット。

  9. 既定では、SharedAccessPolicyNameiothubowner に設定されます。 そうでない場合は、[共有アクセス ポリシー名の選択] リンクを選び、ドロップダウン リストから [iothubowner] を選択します。

  10. SharedAccessPolicyKey 値は、自動的に設定されるはずです。

  11. [データのプレビュー] を選択して、入力データがジョブに対して正常に構成されているかどうかを確認します。 IoT Hub のサンプルがフェッチされ、プレビュー ウィンドウに表示されます。

    IoT ハブでの入力データのプレビューを示すスクリーンショット。

ジョブの出力を構成する

  1. エクスプローラーの [出力] を右クリックし、[ASA: 出力の追加] を選択します。
  2. ドロップダウン リストで、シンクの種類として Data Lake Storage Gen2 または Blob Storage を選びます。
  3. [Select from Azure Subscriptions]\(Azure サブスクリプションから選択\) を選択します
  4. エイリアスの名前に「Output」と入力し、Enter キーを押します。 この出力名は、クエリの INTO ステートメントに使用されます。
  5. Output.json の JSON エディターで、[Select from your subscriptions]\(サブスクリプションから選択\) を選んで、Azure ストレージ アカウントがある Azure サブスクリプションを選択します
  6. 自動的に入力されるストレージ アカウントを変更する必要がある場合は、[ストレージ アカウントの選択] を選び、Azure ストレージ アカウントを選択します。 ストレージ アカウントが同じサブスクリプション内に作成されている場合、ストレージ アカウント名は自動的に検出されます。
  7. コンテナー名を変更する必要がある場合は、 [コンテナーを選択する] を選び、作成した BLOB コンテナーを選択します。

Stream Analytics ジョブの出力の構成を示すスクリーンショット。

スクリプトをコンパイルして Azure に送信する

スクリプトのコンパイルでは、構文がチェックされ、自動デプロイ用の Azure Resource Manager テンプレートが生成されます。

  1. エクスプローラー ウィンドウでスクリプト ファイルを右クリックし、[ASA: スクリプトのコンパイル] をポイントし、[ASA: ARM Template V2 (recommended)]\(ASA: ARM Template V2 (推奨)\) を選択します。

    VS Code での Stream Analytics Explorer からのスクリプト出力のコンパイルを示すスクリーンショット。

  2. コンパイル後、2 つの Azure Resource Manager テンプレートを含む Deploy フォルダーがプロジェクトの下に表示されます。 これら 2 つのファイルは自動デプロイに使用されます。

    プロジェクト フォルダーの生成されたデプロイ テンプレートを示すスクリーンショット。

  3. クエリ エディターで [Azure に送信] を選択します。

    Azure に Stream Analytics ジョブを送信するジョブ送信ボタンを示すスクリーンショット。

  4. [送信] ウィンドウで、次の手順に従います。

    1. Azure サブスクリプションを選択します。

    2. Azure リソース グループを選択します。

    3. Stream Analytics ジョブを作成するリージョンを選びます。

    4. 次に、 [送信] をクリックします。

      [送信] オプションを示すスクリーンショット。

  5. [Azure に発行する] を選択して完了します。 ジョブの状態を示す新しいタブ [クラウド ジョブ ビュー] が開くのを待ちます。

    VS Code の [Azure に発行する] ボタンを示すスクリーンショット。

Stream Analytics ジョブを開始して出力を確認する

  1. [クラウド ジョブ ビュー] タブで、[開始] を選択して、クラウドでジョブを実行します。

    [クラウド ビュー] ページの [開始] ジョブ ボタンを示すスクリーンショット。

  2. [ストリーミング ジョブの開始] ウィンドウで、[OK] を選択します。 このプロセスが完了するには数分かかることがあります。

  3. ジョブが正常に開始されると、ジョブの状態が [実行中] に変わります。 ASA ジョブの実行方法を示す論理図を確認できます。

    VS Code でのジョブの実行状態を示すスクリーンショット。

  4. 出力結果を表示するために、Visual Studio Code 拡張機能または Azure portal で BLOB ストレージを開くことができます。

    BLOB コンテナーの出力ファイルを示すスクリーンショット。

    ファイルをダウンロードして開き、出力を確認します。

    {"messageId":11,"deviceId":"Raspberry Pi Web Client","temperature":28.165519323167562,"humidity":76.875393581654379,"EventProcessedUtcTime":"2022-09-01T22:53:58.1015921Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:52:57.6250000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:52:57.6290000Z"}}
    {"messageId":14,"deviceId":"Raspberry Pi Web Client","temperature":29.014941877871451,"humidity":64.93477299527828,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:03.6100000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:03.6140000Z"}}
    {"messageId":17,"deviceId":"Raspberry Pi Web Client","temperature":28.032846241745975,"humidity":66.146114343897338,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:19.5960000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:19.5830000Z"}}
    {"messageId":18,"deviceId":"Raspberry Pi Web Client","temperature":30.176185593576143,"humidity":72.697359909427419,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:21.6120000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:21.6140000Z"}}
    {"messageId":20,"deviceId":"Raspberry Pi Web Client","temperature":27.851894248213021,"humidity":71.610229530268214,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:25.6270000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:25.6140000Z"}}
    {"messageId":21,"deviceId":"Raspberry Pi Web Client","temperature":27.718624694772238,"humidity":66.540445035685153,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:48.0820000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:48.0830000Z"}}
    {"messageId":22,"deviceId":"Raspberry Pi Web Client","temperature":27.7849054424326,"humidity":74.300662748167085,"EventProcessedUtcTime":"2022-09-01T22:54:09.3393532Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:54:09.2390000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:54:09.2400000Z"}}
    {"messageId":28,"deviceId":"Raspberry Pi Web Client","temperature":30.839892925680324,"humidity":76.237611741451786,"EventProcessedUtcTime":"2022-09-01T22:54:47.8053253Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:54:47.6180000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:54:47.6150000Z"}}
    {"messageId":29,"deviceId":"Raspberry Pi Web Client","temperature":30.561040300759053,"humidity":78.3845172058103,"EventProcessedUtcTime":"2022-09-01T22:54:49.8070489Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:54:49.6030000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:54:49.5990000Z"}}
    {"messageId":31,"deviceId":"Raspberry Pi Web Client","temperature":28.163585438418679,"humidity":60.0511571297096,"EventProcessedUtcTime":"2022-09-01T22:55:25.1528729Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:55:24.9050000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:55:24.9120000Z"}}
    {"messageId":32,"deviceId":"Raspberry Pi Web Client","temperature":31.00503387156985,"humidity":78.68821066044552,"EventProcessedUtcTime":"2022-09-01T22:55:43.2652127Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:55:43.0480000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:55:43.0520000Z"}}
    

リソースをクリーンアップする

リソース グループ、Stream Analytics ジョブ、およびすべての関連するリソースは、不要になったら削除します。 ジョブを削除すると、ジョブによって消費されるストリーミング ユニットに対する課金を回避することができます。 ジョブを後で使用する計画がある場合は、ジョブを停止し、必要なときに再起動することができます。 このジョブを使い続けない場合は、以下の手順のようにして、このクイックスタートで作成したすべてのリソースを削除します。

  1. Azure portal の左側のメニューで [リソース グループ] を選択し、作成したリソースの名前を選択します。

  2. リソース グループ ページで [削除] を選択します。 削除するリソース グループの名前をテキスト ボックスに入力し、 [削除] を選択します。

次のステップ

Visual Studio Code 用の ASA ツール拡張機能についてさらに学習する場合は、次の記事に進んでください。