Implémenter CI/CD pour Stream Analytics sur IoT Edge à l’aide d’APIImplement CI/CD for Stream Analytics on IoT Edge using APIs

Vous pouvez activer l’intégration et le déploiement continus pour les tâches Azure Stream Analytics à l’aide d’API REST.You can enable continuous integration and deployment for Azure Stream Analytics jobs using REST APIs. Cet article fournit des exemples d’API à utiliser, et explique comment les utiliser.This article provides examples on which APIs to use and how to use them. Les API REST ne sont pas prises en charge sur Azure Cloud Shell.REST APIs aren't supported on Azure Cloud Shell.

Appeler des API à partir de différents environnementsCall APIs from different environments

Vous pouvez appeler des API REST à partir de Linux et Windows.REST APIs can be called from both Linux and Windows. Les commandes suivantes illustrent la syntaxe correcte pour l’appel d’API.The following commands demonstrate proper syntax for the API call. L’utilisation spécifique de chaque API est décrite dans les sections suivantes de cet article.Specific API usage will be outlined in later sections of this article.

LinuxLinux

Pour Linux, vous pouvez utiliser la commande Curl ou Wget :For Linux, you can use Curl or Wget commands:

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>

WindowsWindows

Pour Windows, utilisez PowerShell :For Windows, use 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 

Créer une tâche ASA sur EdgeCreate an ASA job on Edge

Pour créer une tâche Stream Analytics, appelez la méthode PUT à l’aide de l’API Stream Analytics.To create Stream Analytics job, call the PUT method using the Stream Analytics API.

MéthodeMethod URL de la demandeRequest URL
PUTPUT https://management.azure.com/subscriptions/{\**subscription-id**}/resourcegroups/{**resource-group-name**}/providers/Microsoft.StreamAnalytics/streamingjobs/{**job-name**}?api-version=2017-04-01-preview

Exemple d’utilisation de la commande curl :Example of command using 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  

Exemple de corps de la requête au format JSON :Example of request body 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": { 
            } 
          } 
        } 
      } 
    ] 
  } 
} 

Pour plus d’informations, consultez la documentation de l’API.For more information, see the API documentation.

Publier le package de périphériePublish Edge package

Pour publier une tâche Stream Analytics sur IoT Edge, appelez la méthode POST à l’aide de l’API de publication de package Edge.To publish a Stream Analytics job on IoT Edge, call the POST method using the Edge Package Publish API.

MéthodeMethod URL de la demandeRequest URL
POSTPOST https://management.azure.com/subscriptions/{\**subscriptionid**}/resourceGroups/{**resourcegroupname**}/providers/Microsoft.StreamAnalytics/streamingjobs/{**jobname**}/publishedgepackage?api-version=2017-04-01-preview

Cette opération asynchrone retourne l’état 202 tant que la tâche n’est pas publiée.This asynchronous operation returns a status of 202 until the job has been successfully published. L’en-tête de réponse d’emplacement contient l’URI utilisé pour obtenir l’état du processus.The location response header contains the URI used to get the status of the process. Pendant que le processus est en cours d’exécution, un appel à l’URI dans l’en-tête d’emplacement retourne l’état 202.While the process is running, a call to the URI in the location header returns a status of 202. Une fois le processus terminé, l’URI dans l’en-tête d’emplacement retourne l’état 200.When the process finishes, the URI in the location header returns a status of 200.

Exemple d’appel de publication de package Edge à l’aide de curl :Example of an Edge package publish call using 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

Après avoir effectué l’appel POST, attendez-vous à une réponse avec un corps vide.After making the POST call, you should expect a response with an empty body. Recherchez l’URL située dans la tête de la réponse et notez-la pour plus tard.Look for the URL located in the HEAD of the response and record it for further use.

Exemple d’URL de la tête de la réponse :Example of the URL from the HEAD of response:

https://management.azure.com/subscriptions/{**subscriptionid**}/resourcegroups/{**resourcegroupname**}/providers/Microsoft.StreamAnalytics/StreamingJobs/{**resourcename**}/OperationResults/023a4d68-ffaf-4e16-8414-cb6f2e14fe23?api-version=2017-04-01-preview 

Patientez une ou deux minutes avant d’exécuter la commande suivante pour effectuer un appel d’API avec l’URL que vous avez trouvée dans la tête de la réponse.A Wait for one to two minutes before running the following command to make an API call with the URL you found in the HEAD of the response. Réessayez d’exécuter la commande si vous n’obtenez pas une réponse HTTP 200.Retry the command if you do not get a 200 response.

Exemple d’appel d’API avec l’URL retournée avec curl :Example of making API call with returned URL with curl:

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

La réponse inclut les informations que vous devez ajouter au script de déploiement Edge.The response includes the information you need to add to the Edge deployment script. Les exemples ci-dessous illustrent les informations que vous devez recueillir et où les ajouter dans le manifeste du déploiement.The examples below show what information you need to collect and where to add it in the deployment manifest.

Exemple de corps de réponse une fois la publication réussie :Sample response body after publishing successfully:

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

Exemple de manifeste de déploiement :Sample of Deployment Manifest:

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

Après la configuration du manifeste de déploiement, consultez Déployer des modules Azure IoT Edge avec Azure CLI pour plus d’informations sur le déploiement.After the configuration of the deployment manifest, refer to Deploy Azure IoT Edge modules with Azure CLI for deployment.

Étapes suivantesNext steps