Creare un hub IoT usando un modello di Azure Resource Manager (.NET)Create an IoT hub using Azure Resource Manager template (.NET)

È possibile utilizzare Gestione risorse di Azure per creare e gestire hub IoT di Azure a livello di codice.You can use Azure Resource Manager to create and manage Azure IoT hubs programmatically. In questa esercitazione viene mostrato come usare un modello di Azure Resource Manager per creare un hub IoT da un programma C#.This tutorial shows you how to use an Azure Resource Manager template 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.
  • Un account di archiviazione di Azure in cui è possibile archiviare i file del modello di Azure Resource Manager.An Azure Storage account where you can store your Azure Resource Manager template files.
  • 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 CreateIoTHub.Name the project CreateIoTHub.

  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 Microsoft.Azure.Management.ResourceManager;
    using Microsoft.Azure.Management.ResourceManager.Models;
    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    using Microsoft.Rest;
    
  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. Il nome dell'account di archiviazione di Azure è il nome dell'account di archiviazione di Azure in cui vengono archiviati i file del modello di Azure Resource Manager.Your Azure Storage account name is the name of the Azure Storage account where you store your Azure Resource Manager template files. 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. Può essere un gruppo di risorse preesistente o nuovo.The name can be a pre-existing or new resource group. 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 storageAddress = "https://{Your storage account name}.blob.core.windows.net";
    static string rgName = "{Resource group name}";
    static string deploymentName = "{Deployment name}";
    

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;
    }
    

Inviare un modello per creare un hub IoTSubmit a template to create an IoT hub

Usare un modello JSON e un file di parametri per creare un hub IoT nel gruppo di risorse.Use a JSON template and parameter file to create an IoT hub in your resource group. È anche possibile usare un modello di Azure Resource Manager per apportare modifiche a un hub IoT esistente.You can also use an Azure Resource Manager template to make changes to an existing IoT hub.

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto, quindi su Aggiungi e infine su Nuovo elemento.In Solution Explorer, right-click on your project, click Add, and then click New Item. Aggiungere un file JSON denominato template.json al progetto.Add a JSON file called template.json to your project.

  2. Per aggiungere un hub IoT standard per l'area Stati Uniti orientali, sostituire il contenuto di template.json con la definizione di risorsa seguente.To add a standard IoT hub to the East US region, replace the contents of template.json with the following resource definition. Per un elenco aggiornato delle aree in cui è supportato l'hub IoT, vedere lo Stato di Azure:For the current list of regions that support IoT Hub see Azure Status:

    {
      "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "hubName": {
          "type": "string"
        }
      },
      "resources": [
      {
        "apiVersion": "2016-02-03",
        "type": "Microsoft.Devices/IotHubs",
        "name": "[parameters('hubName')]",
        "location": "East US",
        "sku": {
          "name": "S1",
          "tier": "Standard",
          "capacity": 1
        },
        "properties": {
          "location": "East US"
        }
      }
      ],
      "outputs": {
        "hubKeys": {
          "value": "[listKeys(resourceId('Microsoft.Devices/IotHubs', parameters('hubName')), '2016-02-03')]",
          "type": "object"
        }
      }
    }
    
  3. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto, quindi su Aggiungi e infine su Nuovo elemento.In Solution Explorer, right-click on your project, click Add, and then click New Item. Aggiungere un file JSON denominato parameters.json al progetto.Add a JSON file called parameters.json to your project.

  4. Sostituire il contenuto di parameters.json con le informazioni di parametro seguenti che impostano il nome del nuovo hub IoT su {iniziali utente}mynewiothub.Replace the contents of parameters.json with the following parameter information that sets a name for the new IoT hub such as {your initials}mynewiothub. Il nome dell'hub IoT deve essere globalmente univoco, quindi deve includere il nome o le iniziali dell'utente:The IoT hub name must be globally unique so it should include your name or initials:

    {
      "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
      "contentVersion": "1.0.0.0",
      "parameters": {
        "hubName": { "value": "mynewiothub" }
      }
    }
    

    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.

  5. In Esplora server connettersi alla sottoscrizione di Azure e nell'account di archiviazione di Azure creare un contenitore denominato templates.In Server Explorer, connect to your Azure subscription, and in your Azure Storage account create a container called templates. Nel pannello Proprietà impostare le autorizzazioni Accesso in lettura pubblico per il contenitore templates su BLOB.In the Properties panel, set the Public Read Access permissions for the templates container to Blob.

  6. In Esplora server fare clic con il pulsante destro del mouse sul contenitore templates e quindi fare clic su Visualizza contenitore BLOB.In Server Explorer, right-click on the templates container and then click View Blob Container. Fare clic sul pulsante Carica BLOB, selezionare i due file parameters.json e templates.json e quindi fare clic su Apri per caricare i file JSON nel contenitore templates.Click the Upload Blob button, select the two files, parameters.json and templates.json, and then click Open to upload the JSON files to the templates container. Gli URL dei BLOB contenenti i dati JSON sono:The URLs of the blobs containing the JSON data are:

    https://{Your storage account name}.blob.core.windows.net/templates/parameters.json
    https://{Your storage account name}.blob.core.windows.net/templates/template.json
    
  7. Aggiungere il metodo seguente a Program.cs:Add the following method to Program.cs:

    static void CreateIoTHub(ResourceManagementClient client)
    {
    
    }
    
  8. Aggiungere il codice seguente al metodo CreateIoTHub per inviare i file di modello e di parametri a Azure Resource Manager:Add the following code to the CreateIoTHub method to submit the template and parameter files to the Azure Resource Manager:

    var createResponse = client.Deployments.CreateOrUpdate(
        rgName,
        deploymentName,
        new Deployment()
        {
          Properties = new DeploymentProperties
          {
            Mode = DeploymentMode.Incremental,
            TemplateLink = new TemplateLink
            {
              Uri = storageAddress + "/templates/template.json"
            },
            ParametersLink = new ParametersLink
            {
              Uri = storageAddress + "/templates/parameters.json"
            }
          }
        });
    
  9. Aggiungere il codice seguente al metodo CreateIoTHub che visualizza lo stato e le chiavi del nuovo hub IoT:Add the following code to the CreateIoTHub method that displays the status and the keys for the new IoT hub:

    string state = createResponse.Properties.ProvisioningState;
    Console.WriteLine("Deployment state: {0}", state);
    
    if (state != "Succeeded")
    {
      Console.WriteLine("Failed to create iothub");
    }
    Console.WriteLine(createResponse.Properties.Outputs);
    

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(client);
    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 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 usando il portale di Azure o il cmdlet di PowerShell Remove-AzureRmResource.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 avere distribuito un hub IoT usando un modello di Azure Resource Manager con un programma C#, può essere opportuno ottenere informazioni più dettagliate:Now you have deployed an IoT hub using an Azure Resource Manager template with a C# program, 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: