Creare un hub IoT usando un modello di Azure Resource Manager (.NET)

È possibile utilizzare Gestione risorse di Azure per creare e gestire hub IoT di Azure a livello di codice. In questa esercitazione viene mostrato come usare un modello di Azure Resource Manager per creare un hub IoT da un programma C#.

Nota

Azure offre due modelli di distribuzione per creare e usare le risorse: modello di distribuzione classica e Azure Resource Manager. In questo articolo viene illustrato l'uso del modello di distribuzione Azure Resource Manager.

Per completare l'esercitazione, sono necessari gli elementi seguenti:

Prepararsi all'autenticazione delle richieste di Azure Resource Manager

Si devono autenticare tutte le attività da eseguire sulle risorse mediante Gestione risorse di Azure con Azure Active Directory (AD). Il modo più semplice per configurare questa impostazione è usare PowerShell o l’interfaccia della riga di comando di Azure.

Installare i cmdlet di Azure PowerShell prima di continuare.

La procedura seguente illustra come configurare l'autenticazione della password per un'applicazione di AD mediante PowerShell. È possibile eseguire questi comandi in una sessione standard di PowerShell.

  1. Accedere alla sottoscrizione di Azure usando il comando seguente:

    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. Usare il comando seguente per elencare gli account Azure che è possibile usare:

    Get-AzureRMSubscription
    

    Usare il comando seguente per selezionare la sottoscrizione che si vuole usare per eseguire i comandi per gestire l'hub IoT. È possibile usare il nome o l'ID della sottoscrizione dall'output del comando precedente:

    Select-AzureRMSubscription `
        -SubscriptionName "{your subscription name}"
    
  3. Prendere nota dei valori di TenantId e SubscriptionId. Saranno necessari più avanti.

  4. Creare una nuova applicazione Azure Active Directory mediante il comando seguente, sostituendo i segnaposto:

    • {Display name}: un nome visualizzato per l'applicazione, ad esempio MySampleApp.
    • {Home page URL}: l'URL della home page dell'app, ad esempio http://mysampleapp/home. Non è necessario che questo URL punti a un'applicazione reale.
    • {Application identifier}: un identificatore univoco, ad esempio http://mysampleapp. Non è necessario che questo URL punti a un'applicazione reale.
    • {Password}: password da usare per l'autenticazione con l'app.

      New-AzureRmADApplication -DisplayName {Display name} -HomePage {Home page URL} -IdentifierUris {Application identifier} -Password {Password}
      
  5. Annotare l’ ApplicationId dell'applicazione creata. Sarà necessario più avanti.
  6. Creare una nuova entità servizio usando il comando seguente, sostituendo {MyApplicationId} con il valore di ApplicationId del passaggio precedente:

    New-AzureRmADServicePrincipal -ApplicationId {MyApplicationId}
    
  7. Configurare un'assegnazione di ruolo usando il comando seguente, sostituendo {MyApplicationId} con il valore di 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. Più avanti in questa esercitazione saranno necessari i valori seguenti:

  • TenantId
  • SubscriptionId
  • ApplicationId
  • Password

Preparare il progetto di Visual Studio

  1. In Visual Studio creare un progetto desktop classico di Windows Visual C# usando il modello di progetto App console (.NET Framework). Denominare il progetto CreateIoTHub.

  2. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto, quindi scegliere Gestisci pacchetti NuGet.

  3. In Gestione pacchetti NuGet selezionare Includi versione preliminare e nella pagina Sfoglia cercare 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.

  4. In Gestione pacchetti NuGet cercare 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.

  5. In Program.cs sostituire le istruzioni using esistenti con il codice seguente:

    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. Nella parte precedente di questa esercitazione si è preso nota di ApplicationId, SubscriptionId, TenantId e Password. 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. Nome gruppo di risorse è il nome del gruppo di risorse che viene usato quando si crea l'hub IoT. Può essere un gruppo di risorse preesistente o nuovo. Nome distribuzione è un nome per la distribuzione, ad esempio 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 Manager

Azure Active Directory deve autenticare tutte le attività da eseguire sulle risorse con Gestione risorse di Azure. Nell'esempio illustrato di seguito si usa l'autenticazione della password. Per altri approcci, vedere Autenticazione delle richieste di Azure Resource Manager.

  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.

    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:

    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:

    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 IoT

Usare un modello JSON e un file di parametri per creare un hub IoT nel gruppo di risorse. È anche possibile usare un modello di Azure Resource Manager per apportare modifiche a un hub IoT esistente.

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto, quindi su Aggiungi e infine su Nuovo elemento. Aggiungere un file JSON denominato template.json al progetto.

  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. Per un elenco aggiornato delle aree in cui è supportato l'hub IoT, vedere lo Stato di Azure:

    {
      "$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. Aggiungere un file JSON denominato parameters.json al progetto.

  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. Il nome dell'hub IoT deve essere globalmente univoco, quindi deve includere il nome o le iniziali dell'utente:

    {
      "$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.

  5. In Esplora server connettersi alla sottoscrizione di Azure e nell'account di archiviazione di Azure creare un contenitore denominato templates. Nel pannello Proprietà impostare le autorizzazioni Accesso in lettura pubblico per il contenitore templates su BLOB.

  6. In Esplora server fare clic con il pulsante destro del mouse sul contenitore templates e quindi fare clic su Visualizza contenitore BLOB. 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. Gli URL dei BLOB contenenti i dati JSON sono:

    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:

    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:

    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:

    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'applicazione

È ora possibile completare l'applicazione chiamando il metodo CreateIoTHub prima di compilarla ed eseguirla.

  1. Alla fine del metodo Main aggiungere il codice seguente:

    CreateIoTHub(client);
    Console.ReadLine();
    
  2. Fare clic su Compila e quindi su Compila soluzione. Correggere eventuali errori.

  3. Fare clic su Debug e quindi su Avvia debug per eseguire l'applicazione. Potrebbero occorrere alcuni minuti per l'esecuzione della distribuzione.

  4. Per verificare che l'applicazione abbia aggiunto il nuovo hub IoT, visitare il portale di Azure e visualizzare l'elenco delle risorse. In alternativa, usare il cmdlet di PowerShell Get-AzureRmResource.

Nota

Questa applicazione di esempio aggiunge un hub IoT Standard S1 che viene addebitato. Al termine è possibile eliminare l'hub IoT usando il portale di Azure o il cmdlet di PowerShell Remove-AzureRmResource.

Passaggi successivi

Dopo avere distribuito un hub IoT usando un modello di Azure Resource Manager con un programma C#, può essere opportuno ottenere informazioni più dettagliate:

Per altre informazioni sulle attività di sviluppo per l'hub IoT, vedere gli articoli seguenti:

Per altre informazioni sulle funzionalità dell'hub IoT, vedere: