Come eseguire manualmente la migrazione di un hub IoT di Azure usando un modello di azure Resource Manager

Usare i modelli di portale di Azure, azure Resource Manager e gli SDK del servizio hub IoT di Azure per eseguire la migrazione di un hub IoT a una nuova area, a un nuovo livello o a una nuova configurazione.

I passaggi descritti in questo articolo sono utili se si vuole:

Per eseguire la migrazione di un hub, è necessaria una sottoscrizione con accesso amministrativo all'hub originale. È possibile inserire il nuovo hub in un nuovo gruppo di risorse e in un'area, nella stessa sottoscrizione dell'hub originale o anche in una nuova sottoscrizione. Non è possibile usare lo stesso nome perché il nome dell'hub deve essere univoco a livello globale.

Confrontare i passaggi di migrazione automatica e manuale

Il risultato di questo articolo è simile a Come eseguire automaticamente la migrazione di un hub IoT usando l'interfaccia della riga di comando di Azure, ma con un processo diverso. Prima di iniziare, decidere quale processo è adatto per lo scenario.

  • Processo manuale (questo articolo):

    • Esegue la migrazione del registro dei dispositivi e delle informazioni sul routing e sull'endpoint. È necessario ricreare manualmente altri dettagli di configurazione nel nuovo hub IoT.
    • È più veloce per la migrazione di un numero elevato di dispositivi (ad esempio, più di 100.000).
    • Usa un account di archiviazione di Azure per trasferire il registro dei dispositivi.
    • Elimina le stringhe di connessione per gli endpoint di routing e caricamento di file dall'output del modello di Resource Manager ed è necessario aggiungerle manualmente.
  • Processo dell'interfaccia della riga di comando di Azure:

    • Esegue la migrazione del registro dei dispositivi, delle informazioni sul routing e sull'endpoint e di altri dettagli di configurazione, ad esempio le distribuzioni di IoT Edge o le configurazioni automatiche di gestione dei dispositivi.
    • È più semplice eseguire la migrazione di un numero ridotto di dispositivi(ad esempio, fino a 10.000).
    • Non richiede un account di archiviazione di Azure.
    • Raccoglie le stringhe di connessione per l'endpoint di routing e caricamento di file e le include nell'output del modello di Resource Manager.

Aspetti da considerare

Prima di eseguire la migrazione di un hub IoT è necessario prendere in considerazione diversi aspetti.

  • Assicurarsi che tutte le funzionalità disponibili nella posizione originale siano disponibili anche nella nuova posizione. Alcuni servizi sono in anteprima e non tutte le funzionalità sono disponibili ovunque.

  • Non rimuovere le risorse originali prima di creare e verificare la versione migrata. Dopo aver rimosso un hub, l'hub non è più disponibile e non è possibile ripristinarlo per controllare le impostazioni o i dati per assicurarsi che l'hub venga replicato correttamente.

  • I dati per l'hub IoT originale non vengono migrati. Questi dati includono messaggi del dispositivo, comandi da cloud a dispositivo (C2D) e informazioni correlate ai processi, ad esempio pianificazioni e cronologia. Anche le metriche e i risultati della registrazione non vengono migrati.

  • È necessario pianificare i tempi di inattività per la migrazione. La clonazione dei dispositivi nel nuovo hub richiede tempo. Se si usa il metodo Import/Export, il test di benchmark ha rivelato che potrebbero essere necessarie circa due ore per spostare 500.000 dispositivi e quattro ore per spostare un milione di dispositivi.

  • È possibile copiare i dispositivi nel nuovo hub senza arrestare o modificare i dispositivi.

    • Se in origine è stato effettuato il provisioning dei dispositivi tramite DPS, aggiornare le registrazioni in modo che puntino al nuovo hub IoT. Eseguire quindi di nuovo il provisioning dei dispositivi per aggiornare le informazioni di connessione archiviate in ogni dispositivo.

    • In caso contrario, è necessario usare il metodo di importazione/esportazione per spostare i dispositivi e quindi i dispositivi devono essere modificati per usare il nuovo hub. Ad esempio, è possibile configurare il dispositivo per utilizzare il nome host hub IoT dalle proprietà desiderate del dispositivo gemello. Il dispositivo accetta tale hub IoT nome host, disconnettere il dispositivo dall'hub precedente e riconnetterlo al nuovo.

  • È necessario aggiornare tutti i certificati in modo da poterli usare con le nuove risorse. È anche probabile che l'hub sia definito in una tabella DNS e che sia necessario aggiornare tali informazioni DNS.

Metodologia

Questo è il metodo generale consigliato per la migrazione di un hub IoT.

  1. Esportare l'hub e le relative impostazioni in un modello di Resource Manager.

  2. Apportare le modifiche necessarie al modello, ad esempio l'aggiornamento di tutte le occorrenze del nome e del percorso per l'hub migrato. Per tutte le risorse nel modello usato per gli endpoint di routing dei messaggi, aggiornare la chiave nel modello per tale risorsa.

  3. Importare il modello in un nuovo gruppo di risorse nella nuova posizione. Questo passaggio crea il nuovo hub IoT.

  4. Eseguire il debug in base alle esigenze.

  5. Aggiungere qualsiasi elemento che non è stato esportato nel modello.

    Ad esempio, i gruppi di consumer non vengono esportati nel modello. È necessario aggiungere i gruppi di consumer al modello manualmente o usare il portale di Azure dopo la creazione dell'hub.

  6. Copiare i dispositivi dall'hub originale al nuovo hub. Questo processo è illustrato nella sezione Gestire i dispositivi registrati nell'hub IoT.

Come gestire il routing dei messaggi

Se l'hub usa il routing dei messaggi, l'esportazione del modello per l'hub include la configurazione di routing, ma non include le risorse stesse. Se si esegue la migrazione dell'hub IoT a una nuova area, è necessario scegliere se spostare le risorse di routing nella nuova posizione o lasciarle in posizione e continuare a usarle "così come sono". È possibile che si verifichi un piccolo riscontro delle prestazioni dal routing dei messaggi alle risorse dell'endpoint in un'area diversa.

Se l'hub usa il routing dei messaggi, sono disponibili due opzioni.

  • Spostare le risorse usate per gli endpoint di routing nella nuova posizione.

    1. Creare manualmente le nuove risorse nel portale di Azure o usando modelli di Resource Manager.

    2. Rinominare tutte le risorse quando vengono create nella nuova posizione, perché richiedono nomi univoci a livello globale.

    3. Aggiornare i nomi delle risorse e le chiavi di risorsa nel modello del nuovo hub prima di creare il nuovo hub. Le risorse devono essere presenti quando viene creato il nuovo hub.

  • Non spostare le risorse usate per gli endpoint di routing. Usarli "sul posto".

    1. Nel passaggio in cui si modifica il modello, è necessario recuperare le chiavi per ogni risorsa di routing e inserirle nel modello prima di creare il nuovo hub.

    2. L'hub fa ancora riferimento alle risorse di routing originali e indirizza i messaggi a tali risorse come configurati. Si otterrà un piccolo riscontro delle prestazioni perché l'hub e le risorse dell'endpoint di routing non si trovano nella stessa posizione.

Preparare la migrazione dell'hub a un'altra area

Questa sezione fornisce istruzioni specifiche per la migrazione dell'hub.

Esportare l'hub originale in un modello di risorsa

  1. Accedere al portale di Azure.

  2. Passare all'hub IoT da spostare.

  3. Selezionare Esporta modello dall'elenco delle proprietà e delle impostazioni per l'hub.

    Screenshot che mostra il comando per l'esportazione del modello per l'hub IoT.

  4. Selezionare Scarica per scaricare il modello. Salvare il file in un punto in cui è possibile trovarlo di nuovo.

    Screenshot che mostra il comando per scaricare il modello per l'hub IoT.

Visualizzare il modello

Passare al modello scaricato, contenuto in un file ZIP. Estrarre il file ZIP e trovare il file denominato template.json.

L'esempio seguente è relativo a un hub generico senza alcuna configurazione di routing. Si tratta di un hub di livello S1 (con 1 unità) denominato ContosoHub nell'area westus:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "IotHubs_ContosoHub_connectionString": {
            "type": "SecureString"
        },
        "IotHubs_ContosoHub_containerName": {
            "type": "SecureString"
        },
        "IotHubs_ContosoHub_name": {
            "defaultValue": "ContosoHub",
            "type": "String"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Devices/IotHubs",
            "apiVersion": "2021-07-01",
            "name": "[parameters('IotHubs_ContosoHub_name')]",
            "location": "westus",
            "sku": {
                "name": "S1",
                "tier": "Standard",
                "capacity": 1
            },
            "identity": {
                "type": "None"
            },
            "properties": {
                "ipFilterRules": [],
                "eventHubEndpoints": {
                    "events": {
                        "retentionTimeInDays": 1,
                        "partitionCount": 4
                    }
                },
                "routing": {
                    "endpoints": {
                        "serviceBusQueues": [],
                        "serviceBusTopics": [],
                        "eventHubs": [],
                        "storageContainers": []
                    },
                    "routes": [],
                    "fallbackRoute": {
                        "name": "$fallback",
                        "source": "DeviceMessages",
                        "condition": "true",
                        "endpointNames": [
                            "events"
                        ],
                        "isEnabled": true
                    }
                },
                "storageEndpoints": {
                    "$default": {
                        "sasTtlAsIso8601": "PT1H",
                        "connectionString": "[parameters('IotHubs_ContosoHub_connectionString')]",
                        "containerName": "[parameters('IotHubs_ContosoHub_containerName')]"
                    }
                },
                "messagingEndpoints": {
                    "fileNotifications": {
                        "lockDurationAsIso8601": "PT1M",
                        "ttlAsIso8601": "PT1H",
                        "maxDeliveryCount": 10
                    }
                },
                "enableFileUploadNotifications": false,
                "cloudToDevice": {
                    "maxDeliveryCount": 10,
                    "defaultTtlAsIso8601": "PT1H",
                    "feedback": {
                        "lockDurationAsIso8601": "PT1M",
                        "ttlAsIso8601": "PT1H",
                        "maxDeliveryCount": 10
                    }
                },
                "features": "None",
                "disableLocalAuth": false,
                "allowedFqdnList": []
            }
        }
    ]
}

Modificare il modello

È necessario apportare alcune modifiche prima di poter usare il modello per creare il nuovo hub nella nuova area. Usare Visual Studio Code o un editor di testo per modificare il modello.

Modificare il nome e la posizione dell'hub

  1. Rimuovere la sezione del parametro del nome del contenitore nella parte superiore. ContosoHub non ha un contenitore associato.

    "parameters": {
      ...
        "IotHubs_ContosoHub_containerName": {
            "type": "SecureString"
        },
      ...
    },
    
  2. Rimuovere la proprietà storageEndpoints .

    "properties": {
      ...
        "storageEndpoints": {
        "$default": {
            "sasTtlAsIso8601": "PT1H",
            "connectionString": "[parameters('IotHubs_ContosoHub_connectionString')]",
            "containerName": "[parameters('IotHubs_ContosoHub_containerName')]"
        }
      },
      ...
    
    
  3. Se si sposta l'hub in una nuova area, modificare la proprietà location nelle risorse.

    "location": "westus",
    

Aggiornare le risorse dell'endpoint di routing

Quando si esporta il modello di Resource Manager per un hub con routing configurato, si noterà che le chiavi per tali risorse non vengono fornite nel modello esportato. Il loro posizionamento è indicato da asterischi. È necessario compilarli passando a tali risorse nel portale e recuperando le chiavi prima di importare il modello del nuovo hub e creare l'hub.

Se sono state spostate anche le risorse di routing, aggiornare anche il nome, l'ID e il gruppo di risorse di ogni endpoint.

  1. Recuperare le chiavi necessarie per una delle risorse di routing e inserirle nel modello. È possibile recuperare le chiavi dalla risorsa nel portale di Azure.

    • Ad esempio, se si instradano messaggi a un contenitore di archiviazione, trovare l'account di archiviazione nel portale. Nella sezione Impostazioni selezionare Chiavi di accesso e quindi copiare una delle chiavi. Ecco l'aspetto della chiave quando si esporta per la prima volta il modello:

      "connectionString": "DefaultEndpointsProtocol=https;
      AccountName=fabrikamstorage1234;AccountKey=****",
      "containerName": "fabrikamresults",
      

      Dopo aver recuperato la chiave dell'account di archiviazione, inserirla nel modello nella AccountKey=**** clausola al posto degli asterischi.

    • Per le code del bus di servizio, ottenere la chiave di accesso condiviso corrispondente a SharedAccessKeyName. Ecco la chiave e il SharedAccessKeyName nel codice JSON:

      "connectionString": "Endpoint=sb://fabrikamsbnamespace1234.servicebus.windows.net:5671/;
      SharedAccessKeyName=iothubroutes_FabrikamResources;
      SharedAccessKey=****;
      EntityPath=fabrikamsbqueue1234",
      
    • Lo stesso vale per gli argomenti del bus di servizio e le connessioni di Hub eventi.

Creare il nuovo hub caricando il modello

Creare il nuovo hub usando il modello modificato. Se si dispone di risorse di routing che verranno spostate, le risorse devono essere configurate nella nuova posizione e i riferimenti nel modello aggiornati in modo che corrispondano. Se non si spostano le risorse di routing, devono trovarsi nel modello con le chiavi aggiornate.

  1. Accedere al portale di Azure.

  2. Selezionare Crea una risorsa.

  3. Nella casella di ricerca cercare e selezionare distribuzione del modello (distribuzione con modelli personalizzati) . Nella schermata per la distribuzione del modello selezionare Crea.

  4. Nella pagina Distribuzione personalizzata selezionare Compila un modello personalizzato nell'editor, che consente di caricare il modello da un file.

    Screenshot che mostra il comando per la creazione di un modello personalizzato.

  5. Selezionare Carica file.

    Screenshot che mostra il comando per il caricamento di un file modello.

  6. Cercare il nuovo modello modificato e selezionarlo, quindi selezionare Apri. Carica il modello nella finestra di modifica. Selezionare Salva.

    Screenshot che mostra il caricamento del modello.

  7. Compilare i campi seguenti nella pagina di distribuzione personalizzata.

    Sottoscrizione: selezionare la sottoscrizione da usare.

    Gruppo di risorse: selezionare un gruppo di risorse esistente o crearne uno nuovo.

    Area: se è stato selezionato un gruppo di risorse esistente, l'area viene compilata in modo che corrisponda alla posizione del gruppo di risorse. Se è stato creato un nuovo gruppo di risorse, si tratta della relativa posizione.

    Stringa di connessione: immettere la stringa di connessione per l'hub.

    Nome hub: assegnare un nome al nuovo hub.

    Screenshot che mostra la pagina di distribuzione personalizzata

  8. Selezionare il pulsante Rivedi e crea.

  9. Selezionare il pulsante Crea. Il portale convalida il modello e distribuisce il nuovo hub. Se si dispone di dati di configurazione di routing, questi vengono inclusi nel nuovo hub, ma puntano alle risorse nella posizione precedente.

    Screenshot che mostra la pagina finale della distribuzione personalizzata

Gestire i dispositivi registrati nell'hub IoT

Dopo aver creato il nuovo hub in esecuzione, è necessario copiare tutti i dispositivi dall'hub originale a quello nuovo.

Esistono diversi modi per copiare i dispositivi. È stato originariamente usato il servizio Device Provisioning (DPS) per effettuare il provisioning dei dispositivi o non è stato fatto. In caso affermativo, questo processo non è difficile. In caso contrario, questo processo può essere complicato.

Se il servizio Device Provisioning non è stato usato per effettuare il provisioning dei dispositivi, è possibile ignorare la sezione successiva e iniziare con Usa importazione/Esportazione per spostare i dispositivi nel nuovo hub.

Usare dps per effettuare nuovamente il provisioning dei dispositivi nel nuovo hub

Per usare dps per spostare i dispositivi nella nuova posizione, vedere Come effettuare il reprovisioning dei dispositivi. Al termine, è possibile visualizzare i dispositivi nel portale di Azure e verificare che si trovino nella nuova posizione.

Passare al nuovo hub usando il portale di Azure. Selezionare l'hub e quindi Dispositivi IoT. Vengono visualizzati i dispositivi di cui è stato eseguito il provisioning nel nuovo hub. È anche possibile visualizzare le proprietà per il nuovo hub.

Se è stato implementato il routing, testare e assicurarsi che i messaggi vengano indirizzati correttamente alle risorse.

Eseguire il rollback delle modifiche dopo l'uso del servizio Device Provisioning

Se si vuole eseguire il rollback delle modifiche, eseguire nuovamente il provisioning dei dispositivi dal nuovo hub a quello precedente.

È stata completata la migrazione dell'hub e dei relativi dispositivi. È possibile passare a Pulisci.

Usare import-export per spostare i dispositivi nel nuovo hub

L'applicazione è destinata a .NET Core, quindi è possibile eseguirla in Windows o Linux. È possibile scaricare l'esempio, recuperare le stringhe di connessione, impostare i flag per i bit da eseguire ed eseguirlo. È possibile eseguire questa operazione senza aprire mai il codice.

Scaricare l'esempio

  1. Usare gli esempi C# di IoT qui: Azure IoT SDK per C#. Scaricare il file ZIP e decomprimerlo nel computer.

  2. Il codice pertinente si trova in ./iothub/service/samples/how to guides/ImportExportDevicesSample. Non è necessario visualizzare o modificare il codice per eseguire l'applicazione.

  3. Per eseguire l'applicazione, specificare tre stringhe di connessione e cinque opzioni. Questi dati vengono passati come argomenti della riga di comando o si usano variabili di ambiente oppure si usa una combinazione dei due. Le opzioni verranno passate come argomenti della riga di comando e le stringhe di connessione come variabili di ambiente.

    Il motivo è dovuto al fatto che le stringhe di connessione sono lunghe e poco dettagliate e probabilmente cambiano, ma è possibile modificare le opzioni ed eseguire l'applicazione più volte. Per modificare il valore di una variabile di ambiente, è necessario chiudere la finestra di comando e Visual Studio o Visual Studio Code, indipendentemente dall'uso.

Opzioni

Ecco le cinque opzioni specificate quando si esegue l'applicazione:

  • addDevices (argomento 1): impostare questa opzione True su se si vogliono aggiungere dispositivi virtuali generati automaticamente. Questi dispositivi vengono aggiunti all'hub di origine. Impostare anche numToAdd (argomento 2) per specificare il numero di dispositivi da aggiungere. Il numero massimo di dispositivi che è possibile registrare in un hub è di un milione. Lo scopo di questa opzione è il test. È possibile generare un numero specifico di dispositivi e quindi copiarli in un altro hub.

  • copyDevices (argomento 3): impostare questa opzione per True copiare i dispositivi da un hub a un altro.

  • deleteSourceDevices (argomento 4): impostare questa opzione su per True eliminare tutti i dispositivi registrati nell'hub di origine. È consigliabile attendere fino a quando non si è certi che tutti i dispositivi siano stati trasferiti prima di eseguire questa operazione. Dopo aver eliminato i dispositivi, non è possibile recuperarli nuovamente.

  • deleteDestDevices (argomento 5): impostare questa opzione su per True eliminare tutti i dispositivi registrati nell'hub di destinazione. È possibile eseguire questa operazione se si desidera copiare più volte i dispositivi.

Il comando di base è dotnet run, che indica a .NET di compilare il file csproj locale e quindi eseguirlo. Prima di eseguirlo, aggiungere gli argomenti della riga di comando alla fine.

La riga di comando sarà simile a questi esempi:

    // Format: dotnet run add-devices num-to-add copy-devices delete-source-devices delete-destination-devices

    // Add 1000 devices, don't copy them to the other hub, or delete them. 
    // The first argument is true, numToAdd is 50, and the other arguments are false.
    dotnet run true 1000 false false false 

    // Copy the devices you just added to the other hub; don't delete anything.
    // The first argument is false, numToAdd is 0, copy-devices is true, and the delete arguments are both false
    dotnet run false 0 true false false 

Usare le variabili di ambiente per le stringhe di connessione

  1. Per eseguire l'esempio, sono necessarie le stringhe di connessione agli hub IoT precedenti e nuovi e a un account di archiviazione che è possibile usare per i file di lavoro temporanei. I valori verranno archiviati nelle variabili di ambiente.

  2. Per ottenere i valori della stringa di connessione, accedere al portale di Azure.

  3. Inserire le stringhe di connessione in un punto in cui è possibile recuperarle, ad esempio Blocco note. Se si copia quanto segue, è possibile incollare le stringhe di connessione direttamente nella posizione in cui si trovano. Non aggiungere spazi intorno al segno di uguale o modificare il nome della variabile. Inoltre, non sono necessarie virgolette doppie per le stringhe di connessione. Se si inserisce virgolette intorno alla stringa di connessione dell'account di archiviazione, lo script ha esito negativo.

    Impostare le variabili di ambiente in Windows:

    SET IOTHUB_CONN_STRING=<put connection string to original IoT hub here>
    SET DEST_IOTHUB_CONN_STRING=<put connection string to destination IoT hub here>
    SET STORAGE_ACCT_CONN_STRING=<put connection string to the storage account here>
    

    Impostare le variabili di ambiente in Linux:

    export IOTHUB_CONN_STRING="<put connection string to original IoT hub here>"
    export DEST_IOTHUB_CONN_STRING="<put connection string to destination IoT hub here>"
    export STORAGE_ACCT_CONN_STRING="<put connection string to the storage account here>"
    
  4. Per le stringhe di connessione dell'hub IoT, passare a ogni hub nel portale. È possibile cercare l'hub in Risorse . Se si conosce il gruppo di risorse, è possibile passare a Gruppi di risorse, selezionare il gruppo di risorse e quindi selezionare l'hub dall'elenco di asset nel gruppo di risorse.

  5. Selezionare Criteri di accesso condiviso in Impostazioni per l'hub, quindi selezionare iothubowner e copiare una delle stringhe di connessione. Eseguire la stessa operazione per l'hub di destinazione. Aggiungerli ai comandi SET appropriati.

  6. Per la stringa di connessione dell'account di archiviazione, trovare l'account di archiviazione in Risorse o nel relativo gruppo di risorse e aprirlo.

  7. Nella sezione Impostazioni selezionare Chiavi di accesso e copiare una delle stringhe di connessione. Inserire la stringa di connessione nel file di testo per il comando SET appropriato.

Ora sono disponibili le variabili di ambiente in un file con i comandi SET e si conoscono gli argomenti della riga di comando. Eseguire l'esempio.

Eseguire l'applicazione di esempio e usare gli argomenti della riga di comando

  1. Aprire una finestra del prompt dei comandi. Selezionare Windows e digitare in command prompt per ottenere la finestra del prompt dei comandi.

  2. Copiare i comandi che impostano le variabili di ambiente, una alla volta e incollarle nella finestra del prompt dei comandi e selezionare Invio. Al termine, digitare SET nella finestra del prompt dei comandi per visualizzare le variabili di ambiente e i relativi valori. Dopo aver copiato questi elementi nella finestra del prompt dei comandi, non è necessario copiarli nuovamente, a meno che non si apra una nuova finestra del prompt dei comandi.

  3. Nella finestra del prompt dei comandi modificare le directory finché non ci si trova in ./ImportExportDevicesSample (dove esiste il file ImportExportDevicesSample.csproj). Digitare quindi quanto segue e includere gli argomenti della riga di comando.

    // Format: dotnet run add-devices num-to-add copy-devices delete-source-devices delete-destination-devices
    dotnet run arg1 arg2 arg3 arg4 arg5
    

    Il comando dotnet compila ed esegue l'applicazione. Poiché si passano le opzioni quando si esegue l'applicazione, è possibile modificarli ogni volta che si esegue l'applicazione. Ad esempio, è possibile eseguirlo una sola volta e creare nuovi dispositivi, quindi eseguirlo di nuovo e copiarli in un nuovo hub e così via. È anche possibile eseguire tutti i passaggi della stessa esecuzione, anche se è consigliabile non eliminare i dispositivi fino a quando non si è certi di aver completato la migrazione. Ecco un esempio che crea 1000 dispositivi e li copia nell'altro hub.

    // Format: dotnet run add-devices num-to-add copy-devices delete-source-devices delete-destination-devices
    
    // Add 1000 devices, don't copy them to the other hub or delete them. 
    dotnet run true 1000 false false false 
    
    // Do not add any devices. Copy the ones you just created to the other hub; don't delete anything.
    dotnet run false 0 true false false 
    

    Dopo aver verificato che i dispositivi siano stati copiati correttamente, è possibile rimuovere i dispositivi dall'hub di origine come segue:

    // Format: dotnet run add-devices num-to-add copy-devices delete-source-devices delete-destination-devices
    // Delete the devices from the source hub.
    dotnet run false 0 false true false 
    

Eseguire l'applicazione di esempio con Visual Studio

  1. Se si vuole eseguire l'applicazione in Visual Studio, impostare la directory corrente sulla cartella in cui si trova il file azureiot.sln. Eseguire quindi questo comando nella finestra del prompt dei comandi per aprire la soluzione in Visual Studio. È necessario eseguire questa operazione nella stessa finestra di comando in cui si impostano le variabili di ambiente, in modo che tali variabili siano note.

    azureiot.sln
    
  2. Fare clic con il pulsante destro del mouse sul progetto ImportExportDevicesSample e scegliere Imposta come progetto di avvio.

  3. Impostare le variabili nella parte superiore di Program.cs nella cartella ImportExportDevicesSample per le cinque opzioni.

    // Add randomly created devices to the source hub.
    private static bool addDevices = true;
    //If you ask to add devices, this will be the number added.
    private static int numToAdd = 0; 
    // Copy the devices from the source hub to the destination hub.
    private static bool copyDevices = false;
    // Delete all of the devices from the source hub. (It uses the IoTHubConnectionString).
    private static bool deleteSourceDevices = false;
    // Delete all of the devices from the destination hub. (Uses the DestIotHubConnectionString).
    private static bool deleteDestDevices = false;
    
  4. Selezionare F5 per eseguire l'applicazione. Al termine dell'esecuzione, è possibile visualizzare i risultati.

Visualizzare i risultati

È possibile visualizzare i dispositivi nel portale di Azure e verificare che si trovino nella nuova posizione.

  1. Passare al nuovo hub usando il portale di Azure. Selezionare l'hub e quindi Dispositivi IoT. Vengono visualizzati i dispositivi copiati dall'hub precedente al nuovo hub. È anche possibile visualizzare le proprietà per il nuovo hub.

  2. Verificare la presenza di errori di importazione/esportazione passando all'account di archiviazione di Azure nel portale di Azure e cercando nel devicefiles contenitore per .ImportErrors.log Se il file è vuoto (la dimensione è 0), non sono presenti errori. Se si tenta di importare lo stesso dispositivo più volte, rifiuta il dispositivo la seconda volta e aggiunge un messaggio di errore al file di log.

Eseguire il commit delle modifiche

A questo punto, l'hub è stato copiato nella nuova posizione ed è stata eseguita la migrazione dei dispositivi al nuovo hub. È ora necessario apportare modifiche in modo che i dispositivi funzionino con il nuovo hub.

Per eseguire il commit delle modifiche, ecco i passaggi da eseguire:

  • Aggiornare ogni dispositivo per modificare il nome host hub IoT in modo che punti il nome host hub IoT al nuovo hub. È consigliabile eseguire questa operazione usando lo stesso metodo usato al primo provisioning del dispositivo.

  • Modificare le applicazioni disponibili che fanno riferimento all'hub precedente in modo che punti al nuovo hub.

  • Al termine, il nuovo hub dovrebbe essere operativo. L'hub precedente non deve avere dispositivi attivi e deve trovarsi in uno stato disconnesso.

Eseguire il rollback delle modifiche

Se si decide di eseguire il rollback delle modifiche, ecco i passaggi da eseguire:

  • Aggiornare ogni dispositivo per modificare il nome host hub IoT in modo che punti al nome host hub IoT per l'hub precedente. È consigliabile eseguire questa operazione usando lo stesso metodo usato al primo provisioning del dispositivo.

  • Modificare tutte le applicazioni disponibili che fanno riferimento al nuovo hub in modo che punti all'hub precedente. Ad esempio, se si usa Analisi di Azure, potrebbe essere necessario riconfigurare l'input di Analisi di flusso di Azure.

  • Eliminare il nuovo hub.

  • Se si dispone di risorse di routing, la configurazione nell'hub precedente deve comunque puntare alla configurazione di routing corretta e dovrebbe funzionare con tali risorse dopo il riavvio dell'hub.

Controllare i risultati

Per controllare i risultati, modificare la soluzione IoT in modo che punti all'hub nella nuova posizione ed eseguirla. In altre parole, eseguire le stesse azioni con il nuovo hub eseguito con l'hub precedente e assicurarsi che funzionino correttamente.

Se è stato implementato il routing, testare e assicurarsi che i messaggi vengano indirizzati correttamente alle risorse.

Eseguire la pulizia

Non eseguire la pulizia finché non si è certi che il nuovo hub sia operativo e che i dispositivi funzionino correttamente. Assicurarsi anche di testare il routing se si usa tale funzionalità. Quando si è pronti, pulire le risorse precedenti eseguendo questa procedura:

  • Se non è già stato fatto, eliminare l'hub precedente. In questo modo tutti i dispositivi attivi vengono rimossi dall'hub.

  • Se si dispone di risorse di routing spostate nella nuova posizione, è possibile eliminare le risorse di routing precedenti.

Passaggi successivi

È stata eseguita la migrazione di un hub IoT in un nuovo hub in una nuova area, completa dei dispositivi. Per altre informazioni sull'esecuzione di operazioni bulk sul registro delle identità in un hub IoT, vedere Importare ed esportare hub IoT identità dei dispositivi in blocco.