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.