API'leri kullanarak IoT Edge stream analytics için CI/CD uygulama

REST API'lerini kullanarak Azure Stream Analytics işleri için sürekli tümleştirmeyi ve dağıtımı etkinleştirebilirsiniz. Bu makalede, hangi API'lerin kullanılacağına ve bunların nasıl kullanılacağına ilişkin örnekler verilmektedir. REST API'ler Azure Cloud Shell'da desteklenmez.

Farklı ortamlardan API'leri çağırma

REST API'ler hem Linux hem de Windows'tan çağrılabilir. Aşağıdaki komutlar API çağrısı için uygun söz dizimini gösterir. Belirli API kullanımı bu makalenin sonraki bölümlerinde özetlenecektir.

Linux

Linux için veya Wget komutlarını kullanabilirsinizCurl:

curl -u { <username:password> }  -H "Content-Type: application/json" -X { <method> } -d "{ <request body> }" { <url> }   
wget -q -O- --{ <method> } -data="<request body>" --header=Content-Type:application/json --auth-no-challenge --http-user="<Admin>" --http-password="<password>" <url>

Windows

Windows için PowerShell'i kullanın:

$user = "<username>" 
$pass = "<password>" 
$encodedCreds = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$pass))) 
$basicAuthValue = "Basic $encodedCreds" 
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" 
$headers.Add("Content-Type", 'application/json') 
$headers.Add("Authorization", $basicAuthValue) 
$content = "<request body>" 
$response = Invoke-RestMethod <url> -Method <method> -Body $content -Headers $Headers 
echo $response 

IoT Edge'da ASA işi oluşturma

Stream Analytics işi oluşturmak için Stream Analytics API'sini kullanarak PUT yöntemini çağırın.

Yöntem İstek URL’si
PUT https://management.azure.com/subscriptions/{subscription-id}/resourcegroups/{resource-group-name}/providers/Microsoft.StreamAnalytics/streamingjobs/{job-name}?api-version=2017-04-01-preview

Curl kullanan komut örneği:

curl -u { <username:password> } -H "Content-Type: application/json" -X { <method> } -d "{ <request body> }" https://management.azure.com/subscriptions/{subscription-id}/resourcegroups/{resource-group-name}/providers/Microsoft.StreamAnalytics/streamingjobs/{jobname}?api-version=2017-04-01-preview  

JSON'da istek gövdesi örneği:

{ 
  "location": "West US", 
  "tags": { "key": "value", "ms-suppressjobstatusmetrics": "true" }, 
  "sku": {  
      "name": "Standard" 
    }, 
  "properties": { 
    "sku": {  
      "name": "standard" 
    }, 
       "eventsLateArrivalMaxDelayInSeconds": 1, 
       "jobType": "edge", 
    "inputs": [ 
      { 
        "name": "{inputname}", 
        "properties": { 
         "type": "stream", 
          "serialization": { 
            "type": "JSON", 
            "properties": { 
              "fieldDelimiter": ",", 
              "encoding": "UTF8" 
            } 
          }, 
          "datasource": { 
            "type": "GatewayMessageBus", 
            "properties": { 
            } 
          } 
        } 
      } 
    ], 
    "transformation": { 
      "name": "{queryName}", 
      "properties": { 
        "query": "{query}" 
      } 
    }, 
    "package": { 
      "storageAccount" : { 
        "accountName": "{blobstorageaccountname}", 
        "accountKey": "{blobstorageaccountkey}" 
      }, 
      "container": "{blobcontaine}]" 
    }, 
    "outputs": [ 
      { 
        "name": "{outputname}", 
        "properties": { 
          "serialization": { 
            "type": "JSON", 
            "properties": { 
              "fieldDelimiter": ",", 
              "encoding": "UTF8" 
            } 
          }, 
          "datasource": { 
            "type": "GatewayMessageBus", 
            "properties": { 
            } 
          } 
        } 
      } 
    ] 
  } 
} 

Daha fazla bilgi için API belgelerine bakın.

IoT Edge paketini yayımlama

stream analytics işini IoT Edge yayımlamak için IoT Edge Paket Yayımlama API'sini kullanarak POST yöntemini çağırın.

Yöntem İstek URL’si
POST https://management.azure.com/subscriptions/{subscriptionid}/resourceGroups/{resourcegroupname}/providers/Microsoft.StreamAnalytics/streamingjobs/{jobname}/publishedgepackage?api-version=2017-04-01-preview

IoT Edge Paketi Yayımlama API'sine yapılan önceki çağrı zaman uyumsuz bir işlemi tetikler ve 202 durumunu döndürür. Konum yanıt üst bilgisi, bu zaman uyumsuz işlemin durumunu almak için kullanılan URI'yi içerir. Konum üst bilgisindeki URI çağrısı, zaman uyumsuz işlemin hala devam ettiğini belirtmek için 202 durumunu döndürür. İşlem tamamlandığında, konum üst bilgisindeki URI çağrısı 200 durumunu döndürür.

Curl kullanarak IoT Edge paketi yayımlama çağrısı örneği:

curl -d -X POST https://management.azure.com/subscriptions/{subscriptionid}/resourceGroups/{resourcegroupname}/providers/Microsoft.StreamAnalytics/streamingjobs/{jobname}/publishedgepackage?api-version=2017-04-01-preview

POST çağrısını yaptıktan sonra boş gövdeli bir yanıt beklemeniz gerekir. Yanıtın konum üst bilgisinde URI'yi arayın ve daha fazla kullanmak üzere kaydedin.

Yanıtın konum üst bilgisinden URI örneği:

https://management.azure.com/subscriptions/{subscriptionid}/resourcegroups/{resourcegroupname}/providers/Microsoft.StreamAnalytics/StreamingJobs/{resourcename}/OperationResults/{guidAssignedToTheAsynchronousOperation}?api-version=2017-04-01-preview

IoT Edge Paket Yayımlama API'sine yanıtın konum üst bilgisinde URI'sini bulduğunuz API'ye çağrı yapmadan önce birkaç saniye ile birkaç dakika arasında bekleyin ve 200 yanıt alana kadar bekleme ve yeniden deneme döngüsünü yineleyin.

Curl ile döndürülen URL ile API çağrısı yapma örneği:

curl -d –X GET https://management.azure.com/subscriptions/{subscriptionid}/resourcegroups/{resourcegroupname}/providers/Microsoft.StreamAnalytics/StreamingJobs/{resourcename}/OperationResults/{guidAssignedToTheAsynchronousOperation}?api-version=2017-04-01-preview

Yanıt, IoT Edge dağıtım betiğine eklemeniz gereken bilgileri içerir. Aşağıdaki örneklerde, hangi bilgileri toplamanız gerektiği ve dağıtım bildiriminde nereye ekleneceği gösterilmektedir.

Başarıyla yayımlandıktan sonra örnek yanıt gövdesi:

{ 
  edgePackageUrl : null 
  error : null 
  manifest : "{"supportedPlatforms":[{"os":"linux","arch":"amd64","features":[]},{"os":"linux","arch":"arm","features":[]},{"os":"windows","arch":"amd64","features":[]}],"schemaVersion":"2","name":"{jobname}","version":"1.0.0.0","type":"docker","settings":{"image":"{imageurl}","createOptions":null},"endpoints":{"inputs":["\],"outputs":["{outputnames}"]},"twin":{"contentType":"assignments","content":{"properties.desired":{"ASAJobInfo":"{asajobsasurl}","ASAJobResourceId":"{asajobresourceid}","ASAJobEtag":"{etag}","PublishTimeStamp":"{publishtimestamp}"}}}}" 
  status : "Succeeded" 
} 

Dağıtım Bildirimi Örneği:

{ 
  "modulesContent": { 
    "$edgeAgent": { 
      "properties.desired": { 
        "schemaVersion": "1.0", 
        "runtime": { 
          "type": "docker", 
          "settings": { 
            "minDockerVersion": "v1.25", 
            "loggingOptions": "", 
            "registryCredentials": {} 
          } 
        }, 
        "systemModules": { 
          "edgeAgent": { 
            "type": "docker", 
            "settings": { 
              "image": "mcr.microsoft.com/azureiotedge-agent:1.0", 
              "createOptions": "{}" 
            } 
          }, 
          "edgeHub": { 
            "type": "docker", 
            "status": "running", 
            "restartPolicy": "always", 
            "settings": { 
              "image": "mcr.microsoft.com/azureiotedge-hub:1.0", 
              "createOptions": "{}" 
            } 
          } 
        }, 
        "modules": { 
          "<asajobname>": { 
            "version": "1.0", 
            "type": "docker", 
            "status": "running", 
            "restartPolicy": "always", 
            "settings": { 
              "image": "<settings.image>", 
              "createOptions": "<settings.createOptions>" 
            } 
            "version": "<version>", 
             "env": { 
              "PlanId": { 
               "value": "stream-analytics-on-iot-edge" 
          } 
        } 
      } 
    }, 
    "$edgeHub": { 
      "properties.desired": { 
        "schemaVersion": "1.0", 
        "routes": { 
            "route": "FROM /* INTO $upstream" 
        }, 
        "storeAndForwardConfiguration": { 
          "timeToLiveSecs": 7200 
        } 
      } 
    }, 
    "<asajobname>": { 
      "properties.desired": {<twin.content.properties.desired>} 
    } 
  } 
} 

Dağıtım bildirimini yapılandırdıktan sonra bkz. Dağıtım için Azure CLI ile Azure IoT Edge modülleri dağıtma.

Sonraki adımlar