クイック スタート: 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
」と入力します。
IoT シミュレーターを実行する
前のセクションで保存した Azure IoT Hub デバイスの接続文字列を使用して、行 15 のプレースホルダーを置き換えます。
[実行] を選択します。 お客様の 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] を選択します。
ドロップダウン メニューで [Select from Azure Subscriptions]\(Azure サブスクリプションから選択\) を選んで、Enter キーを押します。
名前に「Input」と入力し、Enter キーを押します。
Inputs フォルダーの下に、IoTHub1.json ファイルが作成されていることがわかります。
JSON ファイルで、指定された [名前] が Input であることを確認します。
Input.json の JSON エディターで、[Select from your subscriptions]\(サブスクリプションから選択\) を選んで、IoT ハブがある Azure サブスクリプションを選択します。
JSON エディターで、[IoT Hub の選択] を選び、作成した IoT ハブを選択します。
既定では、
SharedAccessPolicyName
はiothubowner
に設定されます。 そうでない場合は、[共有アクセス ポリシー名の選択] リンクを選び、ドロップダウン リストから [iothubowner] を選択します。SharedAccessPolicyKey
値は、自動的に設定されるはずです。[データのプレビュー] を選択して、入力データがジョブに対して正常に構成されているかどうかを確認します。 IoT Hub のサンプルがフェッチされ、プレビュー ウィンドウに表示されます。
ジョブの出力を構成する
- エクスプローラーの [出力] を右クリックし、[ASA: 出力の追加] を選択します。
- ドロップダウン リストで、シンクの種類として Data Lake Storage Gen2 または Blob Storage を選びます。
- [Select from Azure Subscriptions]\(Azure サブスクリプションから選択\) を選択します
- エイリアスの名前に「Output」と入力し、Enter キーを押します。 この出力名は、クエリの INTO ステートメントに使用されます。
- Output.json の JSON エディターで、[Select from your subscriptions]\(サブスクリプションから選択\) を選んで、Azure ストレージ アカウントがある Azure サブスクリプションを選択します
- 自動的に入力されるストレージ アカウントを変更する必要がある場合は、[ストレージ アカウントの選択] を選び、Azure ストレージ アカウントを選択します。 ストレージ アカウントが同じサブスクリプション内に作成されている場合、ストレージ アカウント名は自動的に検出されます。
- コンテナー名を変更する必要がある場合は、 [コンテナーを選択する] を選び、作成した BLOB コンテナーを選択します。
スクリプトをコンパイルして Azure に送信する
スクリプトのコンパイルでは、構文がチェックされ、自動デプロイ用の Azure Resource Manager テンプレートが生成されます。
エクスプローラー ウィンドウでスクリプト ファイルを右クリックし、[ASA: スクリプトのコンパイル] をポイントし、[ASA: ARM Template V2 (recommended)]\(ASA: ARM Template V2 (推奨)\) を選択します。
コンパイル後、2 つの Azure Resource Manager テンプレートを含む Deploy フォルダーがプロジェクトの下に表示されます。 これら 2 つのファイルは自動デプロイに使用されます。
クエリ エディターで [Azure に送信] を選択します。
[送信] ウィンドウで、次の手順に従います。
Azure サブスクリプションを選択します。
Azure リソース グループを選択します。
Stream Analytics ジョブを作成するリージョンを選びます。
次に、 [送信] をクリックします。
[Azure に発行する] を選択して完了します。 ジョブの状態を示す新しいタブ [クラウド ジョブ ビュー] が開くのを待ちます。
Stream Analytics ジョブを開始して出力を確認する
[クラウド ジョブ ビュー] タブで、[開始] を選択して、クラウドでジョブを実行します。
[ストリーミング ジョブの開始] ウィンドウで、[OK] を選択します。 このプロセスが完了するには数分かかることがあります。
ジョブが正常に開始されると、ジョブの状態が [実行中] に変わります。 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 ツール拡張機能についてさらに学習する場合は、次の記事に進んでください。