Guide pratique pour migrer manuellement un hub Azure IoT à l’aide d’un modèle Azure Resource Manager

Utilisez le portail Azure, les modèles Azure Resource Manager et les SDK de service Azure IoT Hub pour migrer un hub IoT vers une nouvelle région, un nouveau niveau ou une nouvelle configuration.

Les étapes décrites dans cet article sont utiles si vous souhaitez :

Pour migrer un hub, vous avez besoin d’un abonnement avec un accès administratif au hub d’origine. Vous pouvez placer le nouveau hub dans un nouveau groupe de ressources et une nouvelle région, dans le même abonnement que le hub d’origine ou même dans un nouvel abonnement. Vous ne pouvez pas utiliser le même nom, car le nom du hub doit être globalement unique.

Comparer les étapes de migration automatique et manuelle

Le résultat de cet article est similaire au Guide pratique pour migrer automatiquement un hub IoT à l’aide d’Azure CLI, mais avec un processus différent. Avant de commencer, déterminez le processus qui convient le plus à votre scénario.

  • Le processus manuel (cet article) :

    • Migre votre registre d’appareils et vos informations de routage et de point de terminaison. Vous devez recréer manuellement d’autres détails de configuration dans le nouveau hub IoT.
    • Est plus rapide pour la migration d’un grand nombre d’appareils (par exemple, plus de 100 000).
    • Utilise un compte de stockage Azure pour transférer le registre d’appareils.
    • Nettoie les chaînes de connexion pour le routage et les points de terminaison de chargement de fichiers à partir de la sortie du modèle ARM, et vous devez les rajouter manuellement.
  • Le processus Azure CLI :

    • Migre votre registre d’appareils, vos informations de routage et de point de terminaison, ainsi que d’autres détails de configuration tels que les déploiements IoT Edge ou les configurations de gestion automatique des appareils.
    • Est plus facile pour la migration d’un petit nombre d’appareils (par exemple, jusqu’à 10 000).
    • Ne nécessite pas de compte de stockage Azure.
    • Collecte les chaînes de connexion pour les points de terminaison de routage et de chargement de fichiers et les inclut dans la sortie du modèle ARM.

Points importants à prendre en compte

Il y a plusieurs points à prendre en compte avant de migrer un hub IoT.

  • Assurez-vous que toutes les fonctionnalités disponibles à l’emplacement d’origine sont également disponibles dans le nouvel emplacement. Certains services sont en préversion et toutes les fonctionnalités ne sont pas disponibles partout.

  • Ne supprimez pas les ressources d’origine avant de créer et de vérifier la version migrée. Une fois que vous avez supprimé un hub, il n’est plus possible de le récupérer pour vérifier les paramètres ou les données afin de s’assurer que le hub est correctement répliqué.

  • Les données du hub IoT d’origine ne sont pas migrées. Ces données incluent les messages des appareils, les commandes cloud-à-appareil (C2D) et les informations liés aux travaux comme les planifications et historiques. Les résultats de mesures et de journalisation ne sont pas non plus migrés.

  • Vous devez planifier un temps d’arrêt pour la migration. Le clonage des appareils sur le nouveau hub prend du temps. Si vous utilisez la méthode Importer/Exporter, le test d’évaluation a révélé que le déplacement de 500 000 appareils peut durer deux heures et que le déplacement d’un million d’appareils peut durer quatre heures.

  • Vous pouvez copier les appareils sur le nouveau hub sans arrêter ou modifier les appareils.

    • Si les appareils ont été initialement approvisionnés à l’aide de DPS, mettez à jour leurs inscriptions pour qu’elles pointent vers le nouveau hub IoT. Ensuite, réapprovisionnez les appareils pour mettre à jour les informations de connexion stockées dans chaque appareil.

    • Dans le cas contraire, vous devez utiliser la méthode Importer/Exporter pour déplacer les appareils, puis les appareils doivent être modifiés pour utiliser le nouveau hub. Par exemple, vous pouvez configurer votre appareil pour utiliser le nom d’hôte IoT Hub à partir des propriétés souhaitées du jumeau. L’appareil prend le nom d’hôte d’IoT Hub, déconnecte l’appareil de l’ancien hub et le reconnecte au nouveau.

  • Vous devez mettre à jour tous les certificats que vous utilisez pour pouvoir les utiliser avec les nouvelles ressources. En outre, le hub est probablement défini dans une table DNS quelconque. Vous devez mettre à jour ces informations DNS.

Méthodologie

Il s’agit de la méthode générale recommandée pour migrer un hub IoT.

  1. Exportez le hub et ses paramètres dans un modèle Resource Manager.

  2. Apportez les modifications nécessaires au modèle, telles que la mise à jour de toutes les occurrences du nom et de l’emplacement du hub migré. Pour toutes les ressources du modèle utilisé pour les points de terminaison de routage des messages, mettez à jour la clé dans le modèle pour cette ressource.

  3. Importez le modèle dans un nouveau groupe de ressources dans le nouvel emplacement. Cette étape crée le hub IoT.

  4. Déboguez si nécessaire.

  5. Ajoutez tout ce qui n’a pas été exporté dans le modèle.

    Par exemple, les groupes de consommateurs ne sont pas exportés vers le modèle. Vous devez ajouter manuellement les groupes de consommateurs au modèle ou utiliser le Portail Azure une fois le hub créé.

  6. Copiez les appareils à partir du hub d’origine vers le nouveau hub. Ce processus est abordé dans la section Gérer les appareils enregistrés auprès du hub IoT.

Comment gérer le routage des messages

Si votre hub utilise le routage des messages, l’exportation du modèle pour le hub inclut la configuration de routage, mais elle n’inclut pas les ressources elles-mêmes. Si vous migrez le hub IoT vers une nouvelle région, vous devez choisir de déplacer également les ressources de routage vers le nouvel emplacement ou de les laisser en place et de continuer à les utiliser « telles quelles ». Il peut y avoir un faible impact sur les performances du routage des messages vers les ressources de point de terminaison dans une autre région.

Si le hub utilise le routage des messages, vous avez deux possibilités.

  • Déplacez les ressources utilisées pour les points de terminaison du routage vers le nouvel emplacement.

    1. Créez vous-même les nouvelles ressources manuellement dans le portail Azure ou à l’aide de modèles Resource Manager.

    2. Renommez toutes les ressources lorsque vous les créez dans le nouvel emplacement, car elles ont des noms globaux uniques.

    3. Mettez à jour les noms de ressources et les clés de ressource dans le modèle du nouveau hub, avant de créer le nouveau hub. Les ressources doivent être présentes lors de la création du nouveau hub.

  • Ne déplacez pas les ressources utilisées pour les points de terminaison du routage. Utilisez-les « sur place ».

    1. À l’étape où vous modifiez le modèle, vous devez récupérer les clés pour chaque ressource de routage et les placer dans le modèle avant de créer le nouveau hub.

    2. Le hub fait toujours référence aux ressources de routage d’origine et achemine les messages en fonction de la configuration. Cela entraîne une légère baisse des performances, car les ressources du hub et du point de terminaison de routage ne se trouvent pas au même emplacement.

Préparer la migration du hub vers une autre région

Cette section fournit des instructions spécifiques pour la migration du hub.

Exporter le hub d’origine vers un modèle de ressource

  1. Connectez-vous au portail Azure.

  2. Accédez au hub IoT que vous voulez déplacer.

  3. Sélectionnez Exporter le modèle dans la liste des propriétés et des paramètres du hub.

    Capture d'écran montrant la commande d'exportation du modèle pour le hub IoT.

  4. Sélectionnez Télécharger pour télécharger le modèle. Enregistrez le fichier quelque part pour le retrouver.

    Capture d'écran montrant la commande de téléchargement du modèle pour le hub IoT.

Afficher le modèle

Accédez au modèle téléchargé, qui est contenu dans un fichier zip. Extrayez le fichier zip et recherchez le fichier appelé template.json.

L’exemple suivant concerne un hub générique sans configuration de routage. Il s’agit d’un hub de niveau S1 (avec 1 unité) appelé ContosoHub dans la région 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": []
            }
        }
    ]
}

Modifier le modèle

Vous devez apporter des modifications avant de pouvoir utiliser le modèle pour créer le nouveau hub dans la nouvelle région. Utilisez Visual Studio Code ou un éditeur de texte pour modifier le modèle.

Modifier le nom et l’emplacement du hub

  1. Supprimez la section du paramètre du nom de conteneur en haut. ContosoHub n’a pas de conteneur associé.

    "parameters": {
      ...
        "IotHubs_ContosoHub_containerName": {
            "type": "SecureString"
        },
      ...
    },
    
  2. Supprimez la propriété storageEndpoints.

    "properties": {
      ...
        "storageEndpoints": {
        "$default": {
            "sasTtlAsIso8601": "PT1H",
            "connectionString": "[parameters('IotHubs_ContosoHub_connectionString')]",
            "containerName": "[parameters('IotHubs_ContosoHub_containerName')]"
        }
      },
      ...
    
    
  3. Si vous déplacez le hub vers une nouvelle région, modifiez la propriété location sous resources.

    "location": "westus",
    

Mettre à jour les ressources de point de terminaison de routage

Quand vous exportez le modèle ARM pour un hub pour lequel le routage est configuré, vous constatez que les clés de ces ressources ne sont pas fournies dans le modèle exporté. Leur emplacement est indiqué par des astérisques. Vous devez les remplir en accédant à ces ressources dans le portail et en récupérant les clés avant d’importer le modèle du nouveau modèle de hub et de créer le hub.

Si vous avez également déplacé les ressources de routage, mettez également à jour le nom, l’ID et le groupe de ressources de chaque point de terminaison.

  1. Récupérez les clés requises pour toutes les ressources de routage et placez-les dans le modèle. Vous pouvez récupérer la ou les clés de la ressource dans le Portail Azure .

    • Par exemple, si vous acheminez des messages vers un conteneur de stockage, recherchez le compte de stockage dans le portail. Dans la section Paramètres, sélectionnez clés d’accès, puis copiez l’une des clés. Voici à quoi ressemble la clé lorsque vous exportez le modèle pour la première fois :

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

      Après avoir récupéré la clé de compte pour le compte de stockage, placez-la dans le modèle dans la clause AccountKey=**** à la place des astérisques.

    • Pour les files d’attente Service bus, récupérez la clé d’accès partagé correspondant à SharedAccessKeyName. Voici la clé et le SharedAccessKeyName dans le fichier json :

      "connectionString": "Endpoint=sb://fabrikamsbnamespace1234.servicebus.windows.net:5671/;
      SharedAccessKeyName=iothubroutes_FabrikamResources;
      SharedAccessKey=****;
      EntityPath=fabrikamsbqueue1234",
      
    • Cela est également valable pour les rubriques Service Bus et les connexions Event Hubs.

Créer le hub en chargeant le modèle

Créez le hub à l’aide du modèle modifié. Si vous avez des ressources de routage qui vont être déplacées, les ressources doivent être configurées dans le nouvel emplacement et les références du modèle mises à jour pour correspondre. Si vous ne déplacez pas les ressources de routage, elles doivent se trouver dans le modèle avec les clés mises à jour.

  1. Connectez-vous au portail Azure.

  2. Sélectionnez Créer une ressource.

  3. Dans la zone de recherche, recherchez et sélectionnez déploiement de modèle (déployer à l’aide de modèles personnalisés). Sur l’écran de déploiement de modèle, sélectionnez Créer.

  4. Sur la page Déploiement personnalisé, sélectionnez Créer propre modèle dans l’éditeur, ce qui vous permet de charger votre modèle à partir d’un fichier.

    Capture d’écran montrant la commande de génération de votre propre modèle.

  5. Sélectionnez Charger le fichier.

    Capture d’écran montrant la commande de chargement d’un modèle de fichier.

  6. Recherchez le nouveau modèle que vous avez modifié et sélectionnez-le, puis sélectionnez Ouvrir. Cela permet de charger votre modèle dans la fenêtre d’édition. Sélectionnez Enregistrer.

    Capture d’écran montrant le chargement du modèle.

  7. Renseignez les champs suivants sur la page de déploiement personnalisé.

    Abonnement : sélectionnez l'abonnement souhaité.

    Groupe de ressources : sélectionnez un groupe de ressources existant ou créez-en un.

    Région : si vous avez sélectionné un groupe de ressources existant, la région est remplie pour vous afin qu’elle corresponde à l’emplacement de celui-ci. Si vous avez créé un groupe de ressources, il s’agit de son emplacement.

    Chaîne de connexion : remplissez la chaîne de connexion pour votre hub.

    Nom du hub : donnez un nom au nouveau hub.

    Capture d’écran montrant la page Déploiement personnalisé

  8. Sélectionnez le bouton Vérifier + Créer.

  9. Cliquez sur le bouton Créer. Le portail valide votre modèle et déploie votre nouveau hub. Si vous avez des données de configuration de routage, elles sont incluses dans le nouveau hub, mais elles pointent vers les ressources de l’emplacement précédent.

    Capture d’écran montrant la page Déploiement personnalisé finale

Gérer les appareils enregistrés auprès du hub IoT

Maintenant que votre nouveau hub est opérationnel, vous devez copier tous les appareils du hub d’origine vers le nouveau.

Il existe plusieurs façons de copier les appareils. À l’origine, vous avez utilisé ou non le service DPS (Device Provisioning Service) pour provisionner les appareils. Si vous l’avez utilisé, ce processus est simple. Si ce n’est pas le cas, ce processus peut être compliqué.

Si vous n’avez pas utilisé DPS pour approvisionner vos appareils, vous pouvez ignorer la section suivante et commencer par Utiliser le service Importer/Exporter pour déplacer les appareils vers le nouveau hub.

Utiliser DPS pour réapprovisionner les appareils dans le nouveau hub

Pour utiliser DPS pour déplacer les appareils vers le nouvel emplacement, consultez Comment réapprovisionner des appareils. Lorsque vous avez terminé, vous pouvez afficher les appareils dans le Portail Azure et vérifier qu’ils se trouvent dans le nouvel emplacement.

Accédez au nouveau hub à l’aide du Portail Azure. Sélectionnez votre hub, puis sélectionnez Appareils IoT. Vous voyez les appareils qui ont été réapprovisionnés sur le nouveau hub. Vous pouvez également afficher les propriétés du nouveau hub.

Si vous avez implémenté le routage, testez et assurez-vous que vos messages sont acheminés correctement vers les ressources.

Restaurer les modifications après utilisation de DPS

Si vous souhaitez restaurer les modifications, réapprovisionnez les appareils du nouveau hub vers l’ancien.

Vous avez maintenant terminé la migration de votre hub et de ses appareils. Vous pouvez passer à Nettoyage.

Utilisation de l’option Import-Export pour déplacer les appareils vers le nouveau hub

L’application cible .NET Core, ce qui vous permet de l’exécuter sur Windows ou Linux. Vous pouvez télécharger l’exemple, récupérer vos chaînes de connexion, définir les indicateurs pour lesquels vous souhaitez exécuter, puis l’exécuter. Vous pouvez le faire sans jamais ouvrir le code.

Télécharger l’exemple

  1. Utilisez les exemples IoT C# ici : Kit de développement logiciel (SDK) Azure IoT pour C#. Téléchargez le fichier zip et décompressez-le sur votre ordinateur.

  2. Le code pertinent se trouve dans ./iothub/service/samples/how to guides/ImportExportDevicesSample. Vous n’avez pas besoin d’afficher ni de modifier le code pour exécuter l’application.

  3. Pour exécuter l’application, spécifiez trois chaînes de connexion et cinq options. Vous transmettez ces données en tant qu’arguments de ligne de commande, utilisez des variables d’environnement ou utilisez une combinaison des deux. Nous allons passer les options dans en tant qu’arguments de ligne de commande et les chaînes de connexion en tant que variables d’environnement.

    Cela est dû au fait que les chaînes de connexion sont longues et incomplètes et peu susceptibles de changer, mais vous pouvez modifier les options et exécuter l’application plusieurs fois. Pour modifier la valeur d’une variable d’environnement, vous devez fermer la fenêtre de commande et Visual Studio ou Visual Studio Code, selon votre utilisation.

Options

Voici les cinq options que vous spécifiez lorsque vous exécutez l’application :

  • addDevices (argument 1) : définissez cette option sur True si vous souhaitez ajouter des appareils virtuels qui sont générés pour vous. Ces appareils sont ajoutés au hub source. Par ailleurs, définissez numToAdd (argument 2) pour spécifier le nombre d’appareils que vous souhaitez ajouter. Le nombre maximal d’appareils que vous pouvez connecter à un hub est un million. Cette option est utilisée à des fins de test. Vous pouvez générer un nombre spécifique d’appareils, puis les copier vers un autre hub.

  • copyDevices (argument 3) : définissez cette option sur True pour copier les appareils d’un hub à un autre.

  • deleteSourceDevices (argument 4) : définissez cette option sur True pour supprimer tous les appareils inscrits auprès du hub source. Nous vous recommandons de patienter jusqu’à ce que vous soyez certain que tous les appareils ont été transférés avant d’exécuter cette opération. Une fois que vous avez supprimé les appareils, vous ne pouvez pas les récupérer.

  • deleteSourceDevices (argument 5) : définissez cette option sur True pour supprimer tous les appareils inscrits auprès du hub de destination. Vous souhaiterez peut-être le faire si vous souhaitez copier plusieurs fois les appareils.

La commande de base estdotnet run, qui indique à .NET de générer le fichier csproj local, puis de l’exécuter. Vous ajoutez vos arguments de ligne de commande à la fin, avant de l’exécuter.

La ligne de commande ressemblera à ces exemples :

    // 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 

Utiliser des variables d’environnement pour les chaînes de connexion

  1. Pour exécuter l’exemple, vous avez besoin des chaînes de connexion aux anciens et nouveaux hubs IoT, ainsi qu’à un compte de stockage que vous pouvez utiliser pour les fichiers de travail temporaires. Nous allons stocker les valeurs pour ces variables d’environnement.

  2. Pour obtenir les valeurs de chaîne de connexion; connectez-vous au Portail Azure.

  3. Placez les chaînes de connexion dans un endroit où vous pouvez les récupérer, par exemple le bloc-notes. Si vous copiez les éléments suivants, vous pouvez coller les chaînes de connexion directement là où elles se trouvent. N’ajoutez pas d’espaces autour du signe égal ou cela modifie le nom de la variable. En outre, vous n’avez pas besoin de guillemets doubles autour des chaînes de connexion. Si vous placez des guillemets autour de la chaîne de connexion du compte de stockage, le script échoue.

    Définissez les variables d’environnement dans 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>
    

    Définissez les variables d’environnement dans 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. Pour les chaînes de connexion du hub IoT, accédez à chaque hub dans le portail. Vous pouvez rechercher dans Ressources pour le hub. Si vous connaissez le groupe de ressources, vous pouvez accéder aux Groupes de ressources, sélectionner votre groupe de ressources, puis sélectionner le hub dans la liste des ressources de ce groupe de ressources.

  5. Sélectionnez Stratégies d’accès partagé à partir de Paramètres du hub, puis sélectionnez iothubowner et copiez l’une des chaînes de connexion. Procédez de la même façon pour le hub de destination. Ajoutez-les aux commandes SET appropriées.

  6. Pour la chaîne de connexion du compte de stockage, recherchez le compte de stockage dans Ressources ou sous son Groupe de ressources et ouvrez-le.

  7. Dans la section Paramètres, sélectionnez Clés d’accès et copiez l’une des chaînes de connexion. Placez la chaîne de connexion dans votre fichier texte pour la commande SET appropriée.

Vous avez maintenant les variables d’environnement dans un fichier avec les commandes SET et vous savez ce que sont vos arguments de ligne de commande. Exécutons l’exemple.

Exécuter l’exemple d’application et utiliser des arguments de ligne de commande

  1. Ouvrir une fenêtre d’invite de commandes. Sélectionnez Windows et saisissez command prompt pour accéder à la fenêtre d’invite de commandes.

  2. Copiez les commandes qui définissent les variables d’environnement, une à la fois, puis collez-les dans la fenêtre d’invite de commandes et sélectionnez Entrée. Lorsque vous avez terminé, saisissez SET dans la fenêtre d’invite de commandes pour afficher vos variables d’environnement et leurs valeurs. Une fois que vous les avez copiées dans la fenêtre d’invite de commandes, vous n’êtes pas obligé de les copier à nouveau, sauf si vous ouvrez une nouvelle fenêtre d’invite de commandes.

  3. Dans la fenêtre d’invite de commandes, modifiez les répertoires jusqu’à ce que vous soyez dans ./ImportExportDevicesSample (où se trouve le fichier ImportExportDevicesSample.csproj). Saisissez ensuite ce qui suit et incluez vos arguments de ligne de commande.

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

    La commande dotnet génère et exécute l’application. Étant donné que vous transmettez les options lors de l’exécution de l’application, vous pouvez modifier leurs valeurs chaque fois que vous exécutez l’application. Par exemple, vous souhaiterez peut-être l’exécuter une fois et créer de nouveaux appareils, puis l’exécuter à nouveau et copier ces appareils sur un nouveau hub, et ainsi de suite. Vous pouvez également suivre toutes les étapes de la même exécution, même si nous vous recommandons de ne pas supprimer les appareils tant que vous n’êtes pas certain de la fin de la migration. Voici un exemple qui crée 1 000 appareils, puis les copie sur l’autre 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 
    

    Une fois que vous avez vérifié que les appareils ont été correctement copiés, vous pouvez supprimer les appareils du hub source comme suit :

    // 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 
    

Exécuter l’exemple d’application à l’aide de Visual Studio

  1. Si vous souhaitez exécuter l’application dans Visual Studio, remplacez votre répertoire actif par le dossier dans lequel réside le fichier azureiot.sln. Exécutez ensuite cette commande dans la fenêtre d’invite de commandes pour ouvrir la solution dans Visual Studio. Vous devez le faire dans la même fenêtre de commande que celle où vous définissez les variables d’environnement, afin que ces variables soient connues.

    azureiot.sln
    
  2. Cliquez avec le bouton de droite sur ImportExportDevicesSample et sélectionnez Définir comme projet de démarrage.

  3. Définissez les variables en haut de Program.cs dans le dossier ImportExportDevicesSample pour les cinq options.

    // 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. Sélectionnez F5 pour exécuter l'application. Une fois l’exécution terminée, vous pouvez afficher les résultats.

Afficher les résultats

Vous pouvez afficher les appareils dans le Portail Azure et vérifier qu’ils se trouvent dans le nouvel emplacement.

  1. Accédez au nouveau hub à l’aide du Portail Azure. Sélectionnez votre hub, puis sélectionnez Appareils IoT. Les appareils que vous avez copiés de l’ancien hub vers le nouveau hub s’affichent. Vous pouvez également afficher les propriétés du nouveau hub.

  2. Recherchez les erreurs d’importation/exportation en accédant au compte de stockage Azure dans le Portail Azure et en recherchant dans le conteneur devicefiles le ImportErrors.log. Si ce fichier est vide (la taille est 0), aucune erreur n’est survenue. Si vous essayez d’importer le même appareil plusieurs fois, il rejette l’appareil la deuxième fois et ajoute un message d’erreur dans le fichier journal.

Valider les modifications

À ce stade, vous avez copié votre hub sur le nouvel emplacement et migré les appareils vers le nouveau hub. À présent, vous devez apporter des modifications afin que les appareils fonctionnent avec le nouveau hub.

Pour valider les modifications, voici les étapes que vous devez effectuer :

  • Mettez à jour chaque appareil pour modifier le nom d’hôte IoT Hub afin que celui-ci pointe vers le nouveau hub. Pour ce faire, vous devez utiliser la même méthode que celle que vous avez utilisée lors du premier approvisionnement de l’appareil.

  • Modifiez les applications dont vous disposez, qui font référence à l’ancien hub pour pointer vers le nouveau hub.

  • Une fois que vous avez terminé, le nouveau hub doit être opérationnel. L’ancien hub ne doit pas avoir d’appareils actifs ni se trouver dans un état déconnecté.

Annuler les modifications

Si vous décidez de restaurer les modifications, voici les étapes à suivre :

  • Mettez à jour chaque appareil pour modifier le nom d’hôte IoT Hub afin que celui-ci pointe vers l’ancien hub. Pour ce faire, vous devez utiliser la même méthode que celle que vous avez utilisée lors du premier approvisionnement de l’appareil.

  • Modifiez les applications dont vous disposez, qui font référence au nouveau hub pour pointer vers l’ancien hub. Par exemple, si vous utilisez Azure Analytics, vous devrez peut-être reconfigurer votre entrée Azure Stream Analytics.

  • Supprimez le nouveau hub.

  • Si vous avez des ressources de routage, la configuration de l’ancien hub doit toujours pointer vers la configuration du routage correcte et doit fonctionner avec ces ressources une fois le hub redémarré.

Vérification des résultats

Pour vérifier les résultats, modifiez votre solution IoT pour qu’elle pointe vers votre hub sur le nouvel emplacement et exécutez-la. En d’autres termes, effectuez les mêmes actions avec le nouveau hub que vous avez effectué avec le hub précédent et assurez-vous qu’ils fonctionnent correctement.

Si vous avez implémenté le routage, testez et assurez-vous que vos messages sont acheminés correctement vers les ressources.

Nettoyage

N’effectuez pas le nettoyage tant que vous n’êtes pas certain que le nouveau hub est opérationnel et que les appareils fonctionnent correctement. Veillez également à tester le routage si vous utilisez cette fonctionnalité. Lorsque vous êtes prêt, nettoyez les anciennes ressources en effectuant les étapes suivantes :

  • Si vous ne l’avez pas encore fait, supprimez l’ancien hub. Cela supprime tous les appareils actifs du hub.

  • Si vous avez déplacé les ressources de routage vers le nouvel emplacement, vous pouvez supprimer les anciennes ressources de routage.

Étapes suivantes

Vous avez migré un hub IoT dans un nouveau hub d’une nouvelle région, terminez avec les appareils. Pour plus d’informations sur l’exécution d’opérations en bloc sur le registre des identités dans un hub IoT, consultez Importer et exporter des identités d’appareil hub IoT en bloc.