Creare un hub IoT con l'API REST del provider di risorse (.NET)Create an IoT hub using the resource provider REST API (.NET)

È possibile usare l'API REST del provider di risorse dell'hub IoT per creare e gestire hub IoT di Azure a livello di codice.You can use the IoT Hub resource provider REST API to create and manage Azure IoT hubs programmatically. In questa esercitazione viene illustrato come usare l'API REST del provider di risorse hub IoT per creare un hub IoT da un programma C#.This tutorial shows you how to use the IoT Hub resource provider REST API to create an IoT hub from a C# program.

Nota

Azure offre due modelli di distribuzione per creare e usare le risorse: modello di distribuzione classica e Azure Resource Manager.Azure has two different deployment models for creating and working with resources: Azure Resource Manager and classic. In questo articolo viene illustrato l'uso del modello di distribuzione Azure Resource Manager.This article covers using the Azure Resource Manager deployment model.

Per completare l'esercitazione, sono necessari gli elementi seguenti:To complete this tutorial, you need the following:

  • Visual Studio 2015 o Visual Studio 2017.Visual Studio 2015 or Visual Studio 2017.
  • Un account Azure attivo.An active Azure account.
    Se non si ha un account, è possibile crearne uno gratuito in pochi minuti.If you don't have an account, you can create a free account in just a couple of minutes.
  • Azure PowerShell 1.0 o versione successiva.Azure PowerShell 1.0 or later.

Prepararsi all'autenticazione delle richieste di Azure Resource ManagerPrepare to authenticate Azure Resource Manager requests

Si devono autenticare tutte le attività da eseguire sulle risorse mediante Gestione risorse di Azure con Azure Active Directory (AD).You must authenticate all the operations that you perform on resources using the Azure Resource Manager with Azure Active Directory (AD). Il modo più semplice per configurare questa impostazione è usare PowerShell o l’interfaccia della riga di comando di Azure.The easiest way to configure this is to use PowerShell or Azure CLI.

Installare i cmdlet di Azure PowerShell prima di continuare.Install the Azure PowerShell cmdlets before you continue.

La procedura seguente illustra come configurare l'autenticazione della password per un'applicazione di AD mediante PowerShell.The following steps show how to set up password authentication for an AD application using PowerShell. È possibile eseguire questi comandi in una sessione standard di PowerShell.You can run these commands in a standard PowerShell session.

  1. Accedere alla sottoscrizione di Azure usando il comando seguente:Log in to your Azure subscription using the following command:

    Login-AzureRmAccount
    
  2. Se si usano più sottoscrizioni Azure e si esegue l'accesso ad Azure, è possibile accedere a tutte le sottoscrizioni di Azure associate alle credenziali.If you have multiple Azure subscriptions, signing in to Azure grants you access to all the Azure subscriptions associated with your credentials. Usare il comando seguente per elencare gli account Azure che è possibile usare:Use the following command to list the Azure subscriptions available for you to use:

    Get-AzureRMSubscription
    

    Usare il comando seguente per selezionare la sottoscrizione che si vuole usare per eseguire i comandi per gestire l'hub IoT.Use the following command to select subscription that you want to use to run the commands to manage your IoT hub. È possibile usare il nome o l'ID della sottoscrizione dall'output del comando precedente:You can use either the subscription name or ID from the output of the previous command:

    Select-AzureRMSubscription `
        -SubscriptionName "{your subscription name}"
    
  3. Prendere nota dei valori di TenantId e SubscriptionId.Make a note of your TenantId and SubscriptionId. Saranno necessari più avanti.You need them later.

  4. Creare una nuova applicazione Azure Active Directory mediante il comando seguente, sostituendo i segnaposto:Create a new Azure Active Directory application using the following command, replacing the place holders:

    • {Display name}: un nome visualizzato per l'applicazione, ad esempio MySampleApp.{Display name}: a display name for your application such as MySampleApp
    • {Home page URL}: l'URL della home page dell'app, ad esempio http://mysampleapp/home.{Home page URL}: the URL of the home page of your app such as http://mysampleapp/home. Non è necessario che questo URL punti a un'applicazione reale.This URL does not need to point to a real application.
    • {Application identifier}: un identificatore univoco, ad esempio http://mysampleapp.{Application identifier}: A unique identifier such as http://mysampleapp. Non è necessario che questo URL punti a un'applicazione reale.This URL does not need to point to a real application.
    • {Password}: password da usare per l'autenticazione con l'app.{Password}: A password that you use to authenticate with your app.

      New-AzureRmADApplication -DisplayName {Display name} -HomePage {Home page URL} -IdentifierUris {Application identifier} -Password {Password}
      
  5. Annotare l’ ApplicationId dell'applicazione creata.Make a note of the ApplicationId of the application you created. Sarà necessario più avanti.You need this later.
  6. Creare una nuova entità servizio usando il comando seguente, sostituendo {MyApplicationId} con il valore di ApplicationId del passaggio precedente:Create a new service principal using the following command, replacing {MyApplicationId} with the ApplicationId from the previous step:

    New-AzureRmADServicePrincipal -ApplicationId {MyApplicationId}
    
  7. Configurare un'assegnazione di ruolo usando il comando seguente, sostituendo {MyApplicationId} con il valore di ApplicationId.Set up a role assignment using the following command, replacing {MyApplicationId} with your ApplicationId.

    New-AzureRmRoleAssignment -RoleDefinitionName Owner -ServicePrincipalName {MyApplicationId}
    

A questo punto è terminata la creazione dell'applicazione Azure AD che consentirà di eseguire l'autenticazione dall'applicazione C# personalizzata.You have now finished creating the Azure AD application that enables you to authenticate from your custom C# application. Più avanti in questa esercitazione saranno necessari i valori seguenti:You need the following values later in this tutorial:

  • TenantIdTenantId
  • SubscriptionIdSubscriptionId
  • ApplicationIdApplicationId
  • PasswordPassword

Preparare il progetto di Visual StudioPrepare your Visual Studio project

  1. In Visual Studio creare un progetto desktop classico di Windows Visual C# usando il modello di progetto App console (.NET Framework).In Visual Studio, create a Visual C# Windows Classic Desktop project using the Console App (.NET Framework) project template. Denominare il progetto CreateIoTHubREST.Name the project CreateIoTHubREST.

  2. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto, quindi scegliere Gestisci pacchetti NuGet.In Solution Explorer, right-click on your project and then click Manage NuGet Packages.

  3. In Gestione pacchetti NuGet selezionare Includi versione preliminare e nella pagina Sfoglia cercare Microsoft.Azure.Management.ResourceManager.In NuGet Package Manager, check Include prerelease, and on the Browse page search for Microsoft.Azure.Management.ResourceManager. Selezionare il pacchetto, fare clic su Installa, in Rivedi modifiche fare clic su OK, quindi fare clic su I Accept (Accetto) per accettare le licenze.Select the package, click Install, in Review Changes click OK, then click I Accept to accept the licenses.

  4. In Gestione pacchetti NuGet cercare Microsoft.IdentityModel.Clients.ActiveDirectory.In NuGet Package Manager, search for Microsoft.IdentityModel.Clients.ActiveDirectory. Fare clic su Installa, in Rivedi modifiche fare clic su OK, quindi fare clic su I Accept (Accetto) per accettare la licenza.Click Install, in Review Changes click OK, then click I Accept to accept the license.

  5. In Program.cs sostituire le istruzioni using esistenti con il codice seguente:In Program.cs, replace the existing using statements with the following code:

    using System;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using System.Text;
    using Microsoft.Azure.Management.ResourceManager;
    using Microsoft.Azure.Management.ResourceManager.Models;
    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    using Newtonsoft.Json;
    using Microsoft.Rest;
    using System.Linq;
    using System.Threading;
    
  6. In Program.cs aggiungere le seguenti variabili statiche sostituendo i valori dei segnaposto.In Program.cs, add the following static variables replacing the placeholder values. Nella parte precedente di questa esercitazione si è preso nota di ApplicationId, SubscriptionId, TenantId e Password.You made a note of ApplicationId, SubscriptionId, TenantId, and Password earlier in this tutorial. Nome gruppo di risorse è il nome del gruppo di risorse che viene usato quando si crea l'hub IoT.Resource group name is the name of the resource group you use when you create the IoT hub. È possibile usare un gruppo di risorse preesistente o nuovo.You can use a pre-existing or a new resource group. Nome hub IoT è il nome dell'hub IoT creato, ad esempio MioHubIoT.IoT Hub name is the name of the IoT Hub you create, such as MyIoTHub. Il nome dell'hub IoT deve essere globalmente univoco.The name of your IoT hub must be globally unique. Nome distribuzione è un nome per la distribuzione, ad esempio Deployment_01.Deployment name is a name for the deployment, such as Deployment_01.

    static string applicationId = "{Your ApplicationId}";
    static string subscriptionId = "{Your SubscriptionId}";
    static string tenantId = "{Your TenantId}";
    static string password = "{Your application Password}";
    
    static string rgName = "{Resource group name}";
    static string iotHubName = "{IoT Hub name including your initials}";
    

    Importante

    L'hub IoT sarà individuabile pubblicamente come endpoint DNS, quindi evitare di indicare informazioni riservate nell'assegnazione del nome.The IoT hub will be publicly discoverable as a DNS endpoint, so make sure to avoid any sensitive information while naming it.

Ottenere un token di Azure Resource ManagerObtain an Azure Resource Manager token

Azure Active Directory deve autenticare tutte le attività da eseguire sulle risorse con Gestione risorse di Azure.Azure Active Directory must authenticate all the tasks that you perform on resources using the Azure Resource Manager. Nell'esempio illustrato di seguito si usa l'autenticazione della password. Per altri approcci, vedere Autenticazione delle richieste di Azure Resource Manager.The example shown here uses password authentication, for other approaches see Authenticating Azure Resource Manager requests.

  1. Aggiungere il codice seguente al metodo Main in Program.cs per recuperare un token da Azure AD tramite l'id dell'applicazione e la password.Add the following code to the Main method in Program.cs to retrieve a token from Azure AD using the application id and password.

    var authContext = new AuthenticationContext(string.Format  
      ("https://login.microsoftonline.com/{0}", tenantId));
    var credential = new ClientCredential(applicationId, password);
    AuthenticationResult token = authContext.AcquireTokenAsync
      ("https://management.core.windows.net/", credential).Result;
    
    if (token == null)
    {
      Console.WriteLine("Failed to obtain the token");
      return;
    }
    
  2. Creare un oggetto ResourceManagementClient che usa il token aggiungendo il codice seguente alla fine del metodo Main:Create a ResourceManagementClient object that uses the token by adding the following code to the end of the Main method:

    var creds = new TokenCredentials(token.AccessToken);
    var client = new ResourceManagementClient(creds);
    client.SubscriptionId = subscriptionId;
    
  3. Creare o ottenere un riferimento al gruppo di risorse in uso:Create, or obtain a reference to, the resource group you are using:

    var rgResponse = client.ResourceGroups.CreateOrUpdate(rgName,
        new ResourceGroup("East US"));
    if (rgResponse.Properties.ProvisioningState != "Succeeded")
    {
      Console.WriteLine("Problem creating resource group");
      return;
    }
    

Usare l'API REST del provider di risorse per creare un hub IoTUse the resource provider REST API to create an IoT hub

Usare l'API REST del provider di risorse dell'hub IoT per creare un hub IoT nel gruppo di risorse.Use the IoT Hub resource provider REST API to create an IoT hub in your resource group. È possibile usare l'API REST del provider di risorse anche per apportare modifiche a un hub IoT esistente.You can also use the resource provider REST API to make changes to an existing IoT hub.

  1. Aggiungere il metodo seguente a Program.cs:Add the following method to Program.cs:

    static void CreateIoTHub(string token)
    {
    
    }
    
  2. Aggiungere il codice seguente al metodo CreateIoTHub.Add the following code to the CreateIoTHub method. Questo codice crea un oggetto HttpClient con il token di autenticazione nelle intestazioni:This code creates an HttpClient object with the authentication token in the headers:

    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
    
  3. Aggiungere il codice seguente al metodo CreateIoTHub.Add the following code to the CreateIoTHub method. Questo codice descrive l'hub IoT per creare e genera una rappresentazione JSON.This code describes the IoT hub to create and generates a JSON representation. Per un elenco aggiornato delle località in cui è supportato l'hub IoT, vedere lo Stato di Azure:For the current list of locations that support IoT Hub see Azure Status:

    var description = new
    {
      name = iotHubName,
      location = "East US",
      sku = new
      {
        name = "S1",
        tier = "Standard",
        capacity = 1
      }
    };
    
    var json = JsonConvert.SerializeObject(description, Formatting.Indented);
    
  4. Aggiungere il codice seguente al metodo CreateIoTHub.Add the following code to the CreateIoTHub method. Questo codice invia la richiesta REST ad Azure.This code submits the REST request to Azure. Il codice verifica quindi la risposta e recupera l'URL da usare per monitorare lo stato dell'attività di distribuzione:The code then checks the response and retrieves the URL you can use to monitor the state of the deployment task:

    var content = new StringContent(JsonConvert.SerializeObject(description), Encoding.UTF8, "application/json");
    var requestUri = string.Format("https://management.azure.com/subscriptions/{0}/resourcegroups/{1}/providers/Microsoft.devices/IotHubs/{2}?api-version=2016-02-03", subscriptionId, rgName, iotHubName);
    var result = client.PutAsync(requestUri, content).Result;
    
    if (!result.IsSuccessStatusCode)
    {
      Console.WriteLine("Failed {0}", result.Content.ReadAsStringAsync().Result);
      return;
    }
    
    var asyncStatusUri = result.Headers.GetValues("Azure-AsyncOperation").First();
    
  5. Alla fine del metodo CreateIoTHub aggiungere il codice seguente.Add the following code to the end of the CreateIoTHub method. Questo codice usa l'indirizzo asyncStatusUri recuperato nel passaggio precedente per attendere il completamento della distribuzione:This code uses the asyncStatusUri address retrieved in the previous step to wait for the deployment to complete:

    string body;
    do
    {
      Thread.Sleep(10000);
      HttpResponseMessage deploymentstatus = client.GetAsync(asyncStatusUri).Result;
      body = deploymentstatus.Content.ReadAsStringAsync().Result;
    } while (body == "{\"status\":\"Running\"}");
    
  6. Alla fine del metodo CreateIoTHub aggiungere il codice seguente.Add the following code to the end of the CreateIoTHub method. Questo codice recupera le chiavi dell'hub IoT creato e le visualizza nella console:This code retrieves the keys of the IoT hub you created and prints them to the console:

    var listKeysUri = string.Format("https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Devices/IotHubs/{2}/IoTHubKeys/listkeys?api-version=2016-02-03", subscriptionId, rgName, iotHubName);
    var keysresults = client.PostAsync(listKeysUri, null).Result;
    
    Console.WriteLine("Keys: {0}", keysresults.Content.ReadAsStringAsync().Result);
    

Compilare ed eseguire l'applicazioneComplete and run the application

È ora possibile completare l'applicazione chiamando il metodo CreateIoTHub prima di compilarla ed eseguirla.You can now complete the application by calling the CreateIoTHub method before you build and run it.

  1. Alla fine del metodo Main aggiungere il codice seguente:Add the following code to the end of the Main method:

    CreateIoTHub(token.AccessToken);
    Console.ReadLine();
    
  2. Fare clic su Compila e quindi su Compila soluzione.Click Build and then Build Solution. Correggere eventuali errori.Correct any errors.

  3. Fare clic su Debug e quindi su Avvia debug per eseguire l'applicazione.Click Debug and then Start Debugging to run the application. Potrebbero occorrere alcuni minuti per l'esecuzione della distribuzione.It may take several minutes for the deployment to run.

  4. Per verificare che l'applicazione abbia aggiunto il nuovo hub IoT, visitare il portale di Azure e visualizzare l'elenco delle risorse.To verify that your application added the new IoT hub, visit the Azure portal and view your list of resources. In alternativa, usare il cmdlet di PowerShell Get-AzureRmResource.Alternatively, use the Get-AzureRmResource PowerShell cmdlet.

Nota

Questa applicazione di esempio aggiunge un hub IoT Standard S1 che viene addebitato.This example application adds an S1 Standard IoT Hub for which you are billed. Al termine è possibile eliminare l'hub IoT tramite il portale di Azure o usando il cmdlet di PowerShell Remove-AzureRmResource.When you are finished, you can delete the IoT hub through the Azure portal or by using the Remove-AzureRmResource PowerShell cmdlet when you are finished.

Passaggi successiviNext steps

Dopo aver distribuito un hub IoT mediante l'API REST del provider di risorse, può essere opportuno approfondire gli argomenti seguenti:Now you have deployed an IoT hub using the resource provider REST API, you may want to explore further:

Per altre informazioni sulle attività di sviluppo per l'hub IoT, vedere gli articoli seguenti:To learn more about developing for IoT Hub, see the following articles:

Per altre informazioni sulle funzionalità dell'hub IoT, vedere:To further explore the capabilities of IoT Hub, see: