クイック スタート: 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」と入力します。

入力データを準備する

Stream Analytics ジョブを定義する前に、入力データを準備する必要があります。 リアルタイムのセンサー データは、ジョブの入力として構成された IoT Hub に後で取り込まれます。 ジョブで必要な入力データを準備するには、これらの手順に従います。

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

  2. [リソースの作成] > [モノのインターネット] > [IoT Hub] の順に選択します。

    Iot Hub の [リソースの作成] ページを示すスクリーンショット。

  3. [IoT Hub] ページで、次の情報を入力します。

    • サブスクリプション: Azure サブスクリプションを選択します。
    • リソース グループ: 既存のリソース グループを選択するか、新しいリソース グループを作成します。
    • IoT ハブ名: IoT ハブの名前を入力します。
    • リージョン: 最も近いリージョンを選びます。

    IoT ハブの作成ページを示すスクリーンショット。

  4. [管理] ページに移動し、[価格とスケールティア] では、サブスクリプションで引き続き使用できる場合は [F1: Free レベル] を選びます。 詳細については、「Azure IoT Hub の価格」を参照してください。

    IoT Hub 管理ページを示すスクリーンショット。

  5. [Review + create](レビュー + 作成) を選択します。 お客様の IoT ハブの情報を確認して、 [作成] を選択します。 このプロセスは、IoT ハブのデプロイに数分かかる場合があります。

  6. IoT ハブが作成された後、[リソースに移動] を選んで [IoT Hub] ページに移動します。 '

  7. [IoT Hub] ページの左側のメニューで [デバイス] を選択してから、[+ デバイスの追加] を選びます。

    [デバイス] ページの [デバイスの追加] ボタンを示すスクリーンショット。

  8. [デバイス ID] を入力し、[保存] を選択します。

    [デバイスの追加] ページを示すスクリーンショット。

  9. デバイスが作成されると、[IoT デバイス] の一覧にデバイスが表示されるはずです。 表示されない場合は、ページの [最新の情報に更新] ボタンを選びます。

    [デバイス] ページでのデバイスの選択を示すスクリーンショット。

  10. 一覧からお使いのデバイスを選択します。 後で使用するために [プライマリ接続文字列] をコピーしてメモ帳に保存します。

    作成したデバイスのプライマリ接続文字列を示すスクリーンショット。

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

  1. 新しいブラウザー タブで Raspberry Pi Azure IoT オンライン シミュレーターを開きます。

  2. 行 15 のプレースホルダーを、先ほど保存した IoT ハブ デバイス接続文字列で置き換えます。

  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. ドロップダウン メニューから ASA スクリプト *.asaqlAzure サブスクリプションを選択し、Enter キーを押します。

  4. Inputs フォルダーの下に、IoTHub1.json ファイルが作成されていることがわかります。 設定を次の推奨値に置き換え、ここに記載されていないフィールドの既定値はそのままにしておきます。

    設定 推奨値 説明
    名前 入力 この入力名は、クエリの FROM ステートメントに使用されます。
    IotHubNamespace spiothub ご利用の IoT ハブの名前。 サブスクリプションから選択すると、IoT ハブ名が自動的に検出されます。
    SharedAccessPolicyName iothubowner

    VS Code での IoT Hub 構成を示すスクリーンショット。

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

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

ジョブの出力を構成する

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

  2. シンクの種類として、Data Lake Storage Gen2 または Blob Storage を選びます。

  3. この出力を使用してクエリ スクリプトを選択します。

  4. 出力ファイル名として、「BlobStorage1」と入力します。

  5. 次の値を使用して設定を編集します。 ここに記載されていないフィールドは既定値のままにします。

    設定 推奨値 説明
    名前 出力 この出力名は、クエリの INTO ステートメントに使用されます。
    ストレージ アカウント spstorageaccount0901 ストレージ アカウントの名前を選択または入力します。 ストレージ アカウントが同じサブスクリプション内に作成されている場合、ストレージ アカウント名は自動的に検出されます。
    コンテナー spcontainer ストレージ アカウントで作成した既存のコンテナーを選択します。

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

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

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

  1. スクリプトを右クリックし、ASA: Compile Script」と入力します。

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

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

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

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

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

    その後、次の手順に従ってプロセスを完了します: サブスクリプションを選択する > ジョブを選択する > 新しいジョブを作成する > ジョブ名を入力する > リソース グループとリージョンを選ぶ。

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

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

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

  1. [クラウド ジョブ ビュー] タブで、[開始] を選択して、クラウドでジョブを実行します。 このプロセスが完了するまでに数分かかることがあります。

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

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

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

  3. 出力結果を表示するために、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 ツール拡張機能についてさらに学習する場合は、次の記事に進んでください。