Implementieren von CI/CD für Stream Analytics in IoT Edge mithilfe von APIs

Sie können Continuous Integration und Deployment für Azure Stream Analytics-Aufträge mithilfe von REST-APIs aktivieren. Dieser Artikel bietet Beispiele zu den zu verwendenden APIs und ihrer Verwendung. REST-APIs werden in Azure Cloud Shell nicht unterstützt.

Rufen Sie APIs aus anderen Umgebungen auf

REST-APIs können sowohl aus Linux als auch aus Windows aufgerufen werden. Die folgenden Befehle veranschaulichen die korrekte Syntax für den API-Aufruf. Die spezifische API-Verwendung wird in späteren Abschnitten dieses Artikels angesprochen.

Linux

Unter Linux können Sie die Befehle Curl oder Wget verwenden:

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

Verwenden Sie unter Windows PowerShell:

$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 

Erstellen eines ASA-Auftrags auf IoT Edge

Um einen Stream Analytics-Auftrag zu erstellen, rufen Sie die PUT-Methode mithilfe der Stream Analytics-API auf.

Methode Anforderungs-URL
PUT https://management.azure.com/subscriptions/{subscription-id}/resourcegroups/{resource-group-name}/providers/Microsoft.StreamAnalytics/streamingjobs/{job-name}?api-version=2017-04-01-preview

Befehlsbeispiel unter Verwendung von curl:

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  

Beispiel für den Anforderungskörper in JSON:

{ 
  "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": { 
            } 
          } 
        } 
      } 
    ] 
  } 
} 

Weitere Informationen finden Sie in der API-Dokumentation.

Veröffentlichen des IOT Edge-Pakets

Um einen Stream Analytics-Auftrag auf IoT Edge zu veröffentlichen, rufen Sie die POST-Methode mithilfe der Veröffentlichungs-API für IOT Edge-Pakete auf.

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

Der vorherige Aufruf der Veröffentlichungs-API für IOT Edge-Pakete löst einen asynchronen Vorgang aus und gibt den Status 202 zurück. Der Antwortheader der Adresse enthält den URI, der zum Abrufen des Status dieses asynchronen Vorgangs verwendet wird. Ein Aufruf an den URI im Adressheader gibt einen Status von 202 zurück. Dadurch wird angegeben, dass der asynchrone Vorgang weiterhin ausgeführt wird. Wenn der Vorgang abgeschlossen ist, gibt der Aufruf des URI im Adressheader den Status 200 zurück.

Beispiel für einen Veröffentlichungsaufruf für ein IOT Edge-Paket mithilfe von curl:

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

Nach dem POST-Aufruf sollten Sie eine Antwort mit einem leeren Körper erwarten. Suchen Sie nach dem URI im Adressheader, und halten Sie ihn zur späteren Verwendung fest.

Beispiel für den URI aus dem Adressheader der Antwort:

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

Warten Sie einige Sekunden/einige Minuten, bevor Sie einen Aufruf an die API vornehmen, deren URI Sie im Adressheader der Antwort an die Veröffentlichungs-API für IOT Edge-Pakete gefunden haben, und wiederholen Sie den Zyklus des Wartens und Wiederholens, bis Sie eine 200-Antwort erhalten.

Beispiel für den API-Aufruf mit der zurückgegebenen URL mit curl:

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

Die Antwort enthält die Informationen, die Sie dem IoT Edge-Bereitstellungsskript hinzufügen müssen. Die Beispiele unten zeigen, welche Informationen Sie sammeln und an welchen Stellen Sie sie im Bereitstellungsmanifest hinzufügen müssen.

Beispiel-Antwortkörper nach erfolgreicher Veröffentlichung:

{ 
  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" 
} 

Beispiel für ein Bereitstellungsmanifest:

{ 
  "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>} 
    } 
  } 
} 

Lesen Sie nach der Konfiguration des Bereitstellungsmanifests Bereitstellen von Azure IoT Edge-Modulen mit der Azure CLI, um sich über die Bereitstellung zu informieren.

Nächste Schritte