クイック スタート: Visual Studio Code を使用して Stream Analytics ジョブを作成する
このクイックスタートでは、ローカル コンピューターで Visual Studio Code 用 ASA ツール拡張機能を使用して、Azure Stream Analytics (ASA) ジョブを作成、実行、送信する方法を示します。 IoT Hub からリアルタイム ストリーミング データを読み取り、温度が 27° を超えるイベントをフィルター処理する ASA ジョブを構築する方法を学習します。 出力結果は、BLOB ストレージ内のファイルに送信されます。 このクイック スタートで使用される入力データは、Raspberry Pi オンライン シミュレーターによって生成されます。
注意
Visual Studio Code ツールでは、中国東部、中国北部、ドイツ中部、ドイツ北東部のリージョンでのジョブはサポートされていません。
前提条件
- Azure のサブスクリプション。 Azure サブスクリプションをお持ちでない場合は、無料アカウントを作成してください。
- Visual Studio Code。
Azure Stream Analytics ツール拡張機能をインストールする
Visual Studio Code (VS Code) を開きます。
左ペインの [拡張機能] から Stream Analytics を検索し、Azure Stream Analytics ツール拡張機能で [インストール] を選択します。
インストール後に、アクティビティ バーの Azure アイコンを選択し、Azure にサインインします。
サインインすると、Azure アカウントの下にサブスクリプションが表示されます。
注意
ASA ツール拡張機能により、VS Code を開くたびに自動的にサインインされます。 アカウントに 2 要素認証がある場合は、PIN を使用せずに電話による認証を使用することをお勧めします。 Azure アカウントをサインアウトするには、Ctrl + Shift + P
キーを押して「Azure: Sign Out
」と入力します。
入力データを準備する
Stream Analytics ジョブを定義する前に、入力データを準備する必要があります。 リアルタイムのセンサー データは、ジョブの入力として構成された IoT Hub に後で取り込まれます。 ジョブで必要な入力データを準備するには、これらの手順に従います。
Azure portal にサインインします。
[リソースの作成] > [モノのインターネット] > [IoT Hub] の順に選択します。
[IoT Hub] ページで、次の情報を入力します。
- サブスクリプション: Azure サブスクリプションを選択します。
- リソース グループ: 既存のリソース グループを選択するか、新しいリソース グループを作成します。
- IoT ハブ名: IoT ハブの名前を入力します。
- リージョン: 最も近いリージョンを選びます。
[管理] ページに移動し、[価格とスケールティア] では、サブスクリプションで引き続き使用できる場合は [F1: Free レベル] を選びます。 詳細については、「Azure IoT Hub の価格」を参照してください。
[Review + create](レビュー + 作成) を選択します。 お客様の IoT ハブの情報を確認して、 [作成] を選択します。 このプロセスは、IoT ハブのデプロイに数分かかる場合があります。
IoT ハブが作成された後、[リソースに移動] を選んで [IoT Hub] ページに移動します。 '
[IoT Hub] ページの左側のメニューで [デバイス] を選択してから、[+ デバイスの追加] を選びます。
[デバイス ID] を入力し、[保存] を選択します。
デバイスが作成されると、[IoT デバイス] の一覧にデバイスが表示されるはずです。 表示されない場合は、ページの [最新の情報に更新] ボタンを選びます。
一覧からお使いのデバイスを選択します。 後で使用するために [プライマリ接続文字列] をコピーしてメモ帳に保存します。
IoT シミュレーターを実行する
新しいブラウザー タブで Raspberry Pi Azure IoT オンライン シミュレーターを開きます。
行 15 のプレースホルダーを、先ほど保存した IoT ハブ デバイス接続文字列で置き換えます。
[実行] を選択します。 お客様の IoT ハブに送信されているセンサー データとメッセージが出力に表示されます。
BLOB ストレージを作成する
Azure portal の左上隅で、 [リソースの作成]>[ストレージ]>[ストレージ アカウント] の順に選択します。
[ストレージ アカウントの作成] ウィンドウで、ストレージ アカウントの名前、場所、リソース グループを入力します。 お客様が作成した IoT ハブと同じ場所およびリソース グループを選択します。 次に、[確認] と [作成] を選択して、ストレージ アカウントを作成します。
[ストレージ アカウント] ページの左側のメニューで [コンテナー] を選んでから、コマンド バーの [+ コンテナー] を選びます。
[新しいコンテナー] ページで、コンテナーの [名前] を指定し、[パブリック アクセス レベル] は [プライベート (匿名アクセスなし)] のままにして、[OK] を選びます。
Stream Analytics プロジェクトを作成する
Visual Studio Code で、Ctrl + Shift + P キー を押して、「ASA: 新しいプロジェクトの作成」と入力します。
「myASAproj」のようにプロジェクト名を入力し、プロジェクトのフォルダーを選択します。
ASA プロジェクトがワークスペースに追加されます。 これは、3 つのフォルダー (Inputs、Outputs、Functions) で構成されています。 また、クエリ スクリプト (*.asaql) 、JobConfig.json ファイル、asaproj.json 構成ファイルも含まれます。
asaproj.json ファイルには、Stream Analytics ジョブを Azure に送信するための入力、出力、およびジョブ構成ファイルの設定が含まれています。
Note
コマンド パレットから入力と出力を追加すると、対応するパスが自動的に asaproj.json に追加されます。 ディスク上で入力または出力を直接追加または削除する場合は、asaproj.json に手動で追加または削除する必要があります。 入力と出力を 1 か所にまとめてから、それぞれの asaproj.json にパスを指定して、それらを異なるジョブで参照するように選択することもできます。
変換クエリを定義する
ジョブの入力を構成する
Stream Analytics プロジェクトの [入力] フォルダーを右クリックします。 次に、コンテキスト メニューから [ASA: 入力の追加] を選択します。
または、Ctrl + Shift + P キーを押してコマンド パレットを開き、「ASA: 入力の追加」と入力します。
入力の種類として [IoT Hub] を選択します。
ドロップダウン メニューから ASA スクリプト *.asaql と Azure サブスクリプションを選択し、Enter キーを押します。
Inputs フォルダーの下に、IoTHub1.json ファイルが作成されていることがわかります。 設定を次の推奨値に置き換え、ここに記載されていないフィールドの既定値はそのままにしておきます。
設定 推奨値 説明 名前 入力 この入力名は、クエリの FROM ステートメントに使用されます。 IotHubNamespace spiothub ご利用の IoT ハブの名前。 サブスクリプションから選択すると、IoT ハブ名が自動的に検出されます。 SharedAccessPolicyName iothubowner [データのプレビュー] を選択して、入力データがジョブに対して正常に構成されているかどうかを確認します。 IoT Hub のサンプルがフェッチされ、プレビュー ウィンドウに表示されます。
ジョブの出力を構成する
Ctrl + Shift + P キーを押してコマンド パレットを開き、「ASA: 出力の追加」と入力します。
シンクの種類として、Data Lake Storage Gen2 または Blob Storage を選びます。
この出力を使用してクエリ スクリプトを選択します。
出力ファイル名として、「BlobStorage1」と入力します。
次の値を使用して設定を編集します。 ここに記載されていないフィールドは既定値のままにします。
設定 推奨値 説明 名前 出力 この出力名は、クエリの INTO ステートメントに使用されます。 ストレージ アカウント spstorageaccount0901 ストレージ アカウントの名前を選択または入力します。 ストレージ アカウントが同じサブスクリプション内に作成されている場合、ストレージ アカウント名は自動的に検出されます。 コンテナー spcontainer ストレージ アカウントで作成した既存のコンテナーを選択します。
スクリプトをコンパイルして Azure に送信する
スクリプトのコンパイルでは、構文がチェックされ、自動デプロイ用の Azure Resource Manager テンプレートが生成されます。
スクリプトを右クリックし、ASA: Compile Script」と入力します。
コンパイル後、2 つの Azure Resource Manager テンプレートを含む Deploy フォルダーがプロジェクトの下に表示されます。 これら 2 つのファイルは自動デプロイに使用されます。
クエリ エディターで [Azure に送信] を選択します。
その後、次の手順に従ってプロセスを完了します: サブスクリプションを選択する > ジョブを選択する > 新しいジョブを作成する > ジョブ名を入力する > リソース グループとリージョンを選ぶ。
[Azure に発行する] を選択して完了します。 ジョブの状態を示す新しいタブ [クラウド ジョブ ビュー] が開くのを待ちます。
Stream Analytics ジョブを開始して出力を確認する
[クラウド ジョブ ビュー] タブで、[開始] を選択して、クラウドでジョブを実行します。 このプロセスが完了するまでに数分かかることがあります。
ジョブが正常に開始されると、ジョブの状態が [実行中] に変わります。 ASA ジョブの実行方法を示す論理図を確認できます。
出力結果を表示するために、Visual Studio Code 拡張機能または Azure portal で 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 ジョブ、およびすべての関連するリソースは、不要になったら削除します。 ジョブを削除すると、ジョブによって消費されるストリーミング ユニットに対する課金を回避することができます。 ジョブを後で使用する計画がある場合は、ジョブを停止し、必要なときに再起動することができます。 このジョブを使い続けない場合は、以下の手順のようにして、このクイックスタートで作成したすべてのリソースを削除します。
Azure portal の左側のメニューで [リソース グループ] を選択し、作成したリソースの名前を選択します。
リソース グループ ページで [削除] を選択します。 削除するリソース グループの名前をテキスト ボックスに入力し、 [削除] を選択します。
次のステップ
Visual Studio Code 用の ASA ツール拡張機能についてさらに学習する場合は、次の記事に進んでください。