1

IOTハブ操作監視エンドポイントへの入力マッピングを持つストリーム分析ジョブがあります。もともと私たちはAzure Portalで仕事を定義していました。作成/更新するとうまく動作します。New-StreamAnalyticsJobがIOTハブの操作監視入力を作成できません

私たちは複数の "Azure環境"でジョブロジックを使用しており、ソース管理を維持しています。 Visual Studio Stream Analytics Projectタイプを使用してソースコードを管理しました。

Powershellコマンドを使用して、異なる環境にジョブを展開しています。

ただし、結果のStream Analyticsジョブの入力は、Operations MonitoringエンドポイントではなくIOTハブのMessagingエンドポイントを指しています。

エンドポイントタイプを表すために入力のJSONファイルに入力できるものはありますか?ここではコマンドレットに私たちのJSON入力のInput内容は次のとおりです。

"Inputs": [{ "Name": "IOT-Hub-Monitoring-By-Consumer-Group", "Properties": { "DataSource": { "Properties": { "ConsumerGroupName": "theConsumerGroup", "IotHubNamespace": "theIotNamespace", "SharedAccessPolicyKey": null, "SharedAccessPolicyName": "iothubowner" }, "Type": "Microsoft.Devices/IotHubs" }, "Serialization": { "Properties": { "Encoding": "UTF8", "Format": "LineSeparated" }, "Type": "Json" }, "Type": "Stream" } }, { "Name": "IOT-Hub-Messaging-By-Consumer-Group", "Properties": { "DataSource": { "Properties": { "ConsumerGroupName": "anotherConsumerGroup", "IotHubNamespace": "theIotNamespace", "SharedAccessPolicyKey": null, "SharedAccessPolicyName": "iothubowner" }, "Type": "Microsoft.Devices/IotHubs" }, "Serialization": { "Properties": { "Encoding": "UTF8", "Format": "LineSeparated" }, "Type": "Json" }, "Type": "Stream" } } ],

は、私たちが発現していないしているIotHubPropertiesendpoint要素はありますか?それはどこかに文書化されていますか? https://docs.microsoft.com/en-us/rest/api/streamanalytics/stream-analytics-definition

それはhttps://main.streamanalytics.ext.azure.com/api下のエンドポイントを使用しています。

+0

このドキュメントは、入力用のJSON形式(https://docs.microsoft.com/en-us/rest/api/streamanalytics/stream-analytics-input)で見つかりました。しかし、IOTハブのエンドポイントは言及されていないので、私の質問は残っています。 Operations Monitoring Endpointを使用する必要があるという事実をどのように表現しますか? –

答えて

0

提案は良いものだったが、必要ではないことが判明しました。

単純なCMDLETアップグレードでこの問題が解決されました。

根本問題

はバージョン 4.1.xまでを含むAzureのPowerShellのコマンドレットは、すなわち 1.0Microsoft.Azure.Management.StreamAnalyticsアセンブリの古いバージョンを使用していたということが判明しました。バージョン 2.0Microsoft.Azure.Management.StreamAnalyticsの数ヶ月前にリリースされました。そのリリースには、わかっているとおり、 JSON構造に endpoint要素を追加しました。

新しいCMDLETsのリリースは、https://github.com/Azure/azure-powershell/releases/tag/v4.2.0-July2017に記載されています。このリリースのコミットにはhttps://github.com/Azure/azure-powershell/commit/0c00632aa8f767e58077e966c04bb6fc505da1efが含まれ、これはMicrosoft.Azure.Management.StreamAnalytics v2.0にアップグレードされました。

これは、JSONがPascalCaseからcamelCaseに変更されたという点で、大きな変化であったことに注意してください。我々はProperties/DataSource/Properties IOT入力にendpoint要素を追加することができます手で、この変更に伴い

、展開としてストリーム解析ジョブが正常に operationsMonitoringエンドポイントに縫い付けIOT入力が含まれています。

1

私はAzureのポータルがここに示されているよりも、別のエンドポイントを呼び出すことに注意してください。例えば? GET/API /ジョブ/ GetStreamingJob subscriptionId = {GUID} & resourceGroupName = MyRG & jobNameは= MyJobName

あなたは結果をJSONに気づくでしょう:あなたは"endpoint":"messages/operationsMonitoringEvents"

が表示されます監視操作について

{ 
    "properties": { 
    "inputs": { 
     { 
     "properties": { 
      "datasource": { 
      "inputIotHubSource": { 
       "iotHubNamespace":"HeliosIOTHubDev", 
       "sharedAccessPolicyName":"iothubowner", 
       "sharedAccessPolicyKey":null, 
     ---> "endpoint":"messages/events", <--- 
       "consumerGroupName":"devicehealthmonitoring" 
      } 

彼らはendpointの同じ2つの値を持つ同じように構築されたJSONを取るPATCH /api/Inputs/PatchInput?...として入力として保存を実装しているようです。 このエンドポイントは何とか使えますか?エミュレート/複製しようとするあまりにも多くの認証 - 通常どおり、すなわち、その後Invoke-WebRequest -Method Patch -Uri ...

--Edit--

New-AzureRmStreamAnalyticsJobを呼び出すInvoke-WebRequestは無行きました。

より良いオプションは、this tutorialを経由してコンソールアプリケーションを作成し、Powershellスクリプトを使用して展開した後にエンドポイントを設定することです。

このような何かが(全くエラー/ nullをチェックはあるものの)動作するはずです:@DaveMontgomeryから

string tenantId = "...";  //Tenant Id Guid 
string subscriptionId = "..."; //Subcription Id Guid 
string rgName = "...";   //Name of Resource Group 
string jobName = "...";   //Name of Stream Analytics Job 
string inputName = "...";  //Name-of-Input-requiring-operations-monitoring 
string accesskey = "...";  //Shared Access Key for the IoT Hub 

var login = new ServicePrincipalLoginInformation(); 
login.ClientId = "...";   //Client/Application Id for AD Service Principal (from tutorial) 
login.ClientSecret = "...";  //Password for AD Service Principal (from tutorial) 

var environment = new AzureEnvironment 
{ 
    AuthenticationEndpoint = "https://login.windows.net/", 
    GraphEndpoint = "https://graph.windows.net/", 
    ManagementEnpoint = "https://management.core.windows.net/", 
    ResourceManagerEndpoint = "https://management.azure.com/", 
}; 
var credentials = new AzureCredentials(login, tenantId, environment) 
    .WithDefaultSubscription(subscriptionId); 

var azure = Azure 
    .Configure() 
    .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic) 
    .Authenticate(credentials) 
    .WithDefaultSubscription(); 

var client = new StreamAnalyticsManagementClient(credentials); 
client.SubscriptionId = azure.SubscriptionId; 

var job = client.StreamingJobs.List(expand: "inputs").Where(j => j.Name == jobName).FirstOrDefault(); 
var input = job.Inputs.Where(i => i.Name == inputName).FirstOrDefault(); 

var props = input.Properties as StreamInputProperties; 
var ds = props.Datasource as IoTHubStreamInputDataSource; 

ds.Endpoint = "messages/operationsMonitoringEvents"; 
ds.SharedAccessPolicyKey = accesskey; 

client.Inputs.CreateOrReplace(input, rgName, jobName, inputName); 
関連する問題