Реализация CI/CD для Stream Analytics на IoT Edge с использованием API
Вы можете включить непрерывную интеграцию и развертывание для заданий Azure Stream Analytics с помощью REST API. Эта статья содержит примеры и способы использования нужных API-интерфейсов. Интерфейсы REST API не поддерживаются в службе Azure Cloud Shell.
Вызов API-интерфейсов из различных сред
Интерфейсы REST API могут вызываться из Windows и Linux. В следующих командах продемонстрирован правильный синтаксис вызова API-интерфейсов. Использование определенных API-интерфейсов будет показано в следующих разделах этой статьи.
Linux
Для Linux можно использовать команды Curl
или Wget
:
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 используйте 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
Создание задания ASA в IoT Edge
Чтобы создать задание Stream Analytics, вызовите метод PUT с помощью API-интерфейса Stream Analytics.
Метод | 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 |
Пример использования команды 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
Пример текста запроса в формате 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": {
}
}
}
}
]
}
}
Дополнительные сведения см. в документации по API-интерфейсам.
Публикация пакета IoT Edge
Чтобы опубликовать задание Stream Analytics в IoT Edge, вызовите метод POST с помощью API-интерфейса публикации пакета IoT Edge.
Метод | URL-адрес запроса |
---|---|
POST | https://management.azure.com/subscriptions/{subscriptionid}/resourceGroups/{resourcegroupname}/providers/Microsoft.StreamAnalytics/streamingjobs/{jobname}/publishedgepackage?api-version=2017-04-01-preview |
Предыдущий вызов API публикации пакета IoT Edge активирует асинхронную операцию и возвращает состояние 202. Заголовок ответа location содержит универсальный код ресурса (URI), который используется для получения состояния асинхронной операции. Вызов URI в заголовке location возвращает состояние 202, указывающее, что асинхронная операция все еще выполняется. После завершения операции вызов URI в заголовке location возвращает состояние 200.
Пример вызова публикации пакета IoT Edge с помощью команды 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
После отправки POST-запроса ожидается пустой текст ответа. Найдите URL-адрес, расположенный в заголовке location ответа, и запишите его для дальнейшего использования.
Пример URI из заголовка location ответа:
https://management.azure.com/subscriptions/{subscriptionid}/resourcegroups/{resourcegroupname}/providers/Microsoft.StreamAnalytics/StreamingJobs/{resourcename}/OperationResults/{guidAssignedToTheAsynchronousOperation}?api-version=2017-04-01-preview
Подождите несколько секунд или минут, прежде чем выполнять вызов API, URI которого вы видели в заголовке location ответа, к API публикации пакета IoT Edge, и повторяйте цикл ожидания и повторных попыток, пока не получите ответ 200.
Пример вызова API с возвращаемым URL-адресом с помощью команды 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
Ответ содержит сведения, которые необходимо добавить в скрипт развертывания IoT Edge. В примерах ниже показаны сведения, которые вам необходимо собрать, а также места их вставки в манифесте развертывания.
Пример текста ответа после успешной публикации:
{
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"
}
Пример манифеста развертывания:
{
"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>}
}
}
}
После того как вы настроите манифест развертывания, ознакомьтесь со статьей о развертывании модулей Azure IoT Edge с помощью Azure CLI, чтобы приступить к развертыванию.
Дальнейшие действия
- Azure Stream Analytics в IoT Edge
- Deploy Azure Stream Analytics as an IoT Edge module - preview (Развертывание Azure Stream Analytics в качестве модуля IoT Edge (предварительная версия))
- Разработка заданий IoT Edge Stream Analytics с помощью средств Visual Studio