Manuelles Migrieren einer Azure IoT Hub-Instanz mithilfe einer Azure Resource Manager-Vorlage

Hier erfahren Sie, wie Sie das Azure-Portal, Azure Resource Manager-Vorlagen und Azure IoT Hub-Dienst-SDKs verwenden, um einen IoT-Hub zu einer neuen Region, zu einem neuen Tarif oder zu einer neuen Konfiguration zu migrieren.

Die Schritte in diesem Artikel sind in folgenden Szenarien nützlich:

Zum Migrieren eines Hubs benötigen Sie ein Abonnement mit administrativem Zugriff auf den ursprünglichen Hub. Sie können den neuen Hub in eine neue Ressourcengruppe und-Region einfügen, und zwar in demselben Abonnement wie beim ursprünglichen Hub oder sogar in ein neues Abonnement. Allerdings können Sie dabei nicht denselben Namen verwenden, weil der Name des Hubs global eindeutig sein muss.

Gegenüberstellung der Schritte für eine automatische bzw. manuelle Migration

Das Ergebnis dieses Artikels ähnelt zwar dem des Artikels Automatisches Migrieren eines IoT-Hubs mithilfe der Azure CLI, der Prozess unterscheidet sich jedoch. Entscheiden Sie zunächst, welcher Prozess für Ihr Szenario der richtige ist.

  • Manueller Prozess (dieser Artikel):

    • Bei diesem Prozess werden Ihre Geräteregistrierung und Ihre Routing- und Endpunktinformationen migriert. Andere Konfigurationsdetails müssen im neuen IoT-Hub manuell neu erstellt werden.
    • Schnellere Migration einer größeren Anzahl von Geräten (beispielsweise mehr als 100.000)
    • Verwendet ein Azure Storage-Konto, um die Geräteregistrierung zu übertragen.
    • Entfernt Verbindungszeichenfolgen für Routing- und Dateiupload-Endpunkte aus der ARM-Vorlagenausgabe, sodass sie manuell wieder hinzugefügt werden müssen.
  • Azure CLI-Prozess:

    • Bei diesem Prozess werden Ihre Geräteregistrierung, Ihre Routing- und Endpunktinformationen sowie andere Konfigurationsdetails wie IoT Edge-Bereitstellungen oder Konfigurationen für die automatische Geräteverwaltung migriert.
    • Einfachere Migration einer geringen Anzahl von Geräten (beispielsweise bis zu 10.000)
    • Erfordert kein Azure Storage-Konto.
    • Bei diesem Prozess werden Verbindungszeichenfolgen für Routing- und Dateiupload-Endpunkte erfasst und in die ARM-Vorlagenausgabe eingeschlossen.

Zu beachtende Aspekte

Vor dem Migrieren eines IoT-Hubs müssen mehrere Aspekte beachtet werden.

  • Stellen Sie sicher, dass alle am ursprünglichen Standort verfügbaren Features auch am neuen Standort verfügbar sind. Einige Dienste befinden sich noch in der Vorschauphase, und nicht alle Features stehen überall zur Verfügung.

  • Entfernen Sie die ursprünglichen Ressourcen erst, nachdem Sie die migrierte Version erstellt und überprüft haben. Sobald Sie einen Hub entfernt haben, steht er definitiv nicht mehr zur Verfügung, und es gibt keine Möglichkeit zu seiner Wiederherstellung, um die Einstellungen oder Daten zu überprüfen und so sicherzustellen, dass der Hub ordnungsgemäß repliziert wird.

  • Daten für den ursprünglichen IoT-Hub werden nicht migriert. Zu diesen Daten gehören Gerätenachrichten, Cloud-zu-Gerät-Befehle (Cloud-to-Device, C2D) sowie auftragsbezogene Informationen wie Zeitpläne und Verlauf. Auch Metriken und Protokollierungsergebnisse werden nicht migriert.

  • Sie müssen Downtime für die Migration planen. Das Klonen der Geräte in den neuen Hub kann dauern. Wenn Sie die Import/Export-Methode verwenden, haben Benchmarktests ergeben, dass es ungefähr zwei Stunden dauern kann, bis 500.000 Geräte verschoben wurden, und dass das Verschieben von einer Million Geräten vier Stunden dauern kann.

  • Sie können Geräte in den neuen Hub kopieren, ohne die Geräte herunterzufahren oder zu ändern.

    • Wenn die Geräte ursprünglich mit DPS bereitgestellt wurden, aktualisieren Sie ihre Registrierungen so, dass sie auf den neuen IoT-Hub verweisen. Stellen Sie dann die Geräte erneut bereit, um die im jeweiligen Gerät gespeicherten Verbindungsinformationen zu aktualisieren.

    • Andernfalls müssen Sie die Geräte mithilfe der Import/Export-Methode migrieren und die Geräte anschließend ändern, damit sie den neuen Hub verwenden. Sie können Ihr Gerät beispielsweise so einrichten, dass der Hostname des IoT Hubs aus den gewünschten Eigenschaften von Gerätezwillingen verwendet wird. Das Gerät übernimmt diesen IoT Hub-Hostnamen, trennt das Gerät vom alten Hub, und verbindet es dann mit dem neuen Hub.

  • Sie müssen alle verwendeten Zertifikate aktualisieren, damit Sie sie bei den neuen Ressourcen verwenden können. Außerdem haben Sie den Hub wahrscheinlich irgendwo in einer DNS-Tabelle definiert und müssen diese DNS-Informationen aktualisieren.

Methodik

Dies ist die allgemeine empfohlene Methode für die Migration eines IoT-Hubs.

  1. Exportieren Sie den Hub und dessen Einstellungen in eine Resource Manager-Vorlage.

  2. Nehmen Sie die erforderlichen Änderungen an der Vorlage vor. Aktualisieren Sie also beispielsweise alle Vorkommen des Namens und des Standorts für den migrierten Hub. Aktualisieren Sie für alle Ressourcen in der Vorlage, die für Nachrichtenroutingendpunkte verwendet werden, den Schlüssel in der Vorlage für die jeweilige Ressource.

  3. Importieren Sie die Vorlage in eine neue Ressourcengruppe am neuen Standort. Mit diesem Schritt wird der neue IoT-Hub erstellt.

  4. Debuggen Sie nach Bedarf.

  5. Fügen Sie alles hinzu, was nicht in die Vorlage exportiert wurde.

    So werden beispielsweise Consumergruppen nicht in die Vorlage exportiert. Sie müssen die Consumergruppen der Vorlage entweder manuell hinzufügen oder dazu das Azure-Portal verwenden, nachdem der Hub erstellt wurde.

  6. Kopieren Sie die Geräte aus dem ursprünglichen Hub in den neuen Hub. Dieser Prozess wird im Abschnitt Verwalten der beim IoT-Hub registrierten Geräte erläutert.

Verarbeiten des Nachrichtenroutings

Wenn Ihr Hub Nachrichtenrouting verwendet, wird die Routingkonfiguration beim Exportieren der Vorlage für den Hub einbezogen. Dies gilt aber nicht für die Ressourcen. Wenn Sie den IoT-Hub zu einer neuen Region migrieren, müssen Sie auswählen, ob auch die Routingressourcen an den neuen Standort verschoben werden sollen oder ob sie am alten Standort bleiben und unverändert weiterverwendet werden sollen. Beim Weiterleiten von Nachrichten an Endpunktressourcen in einer anderen Region kommt es möglicherweise zu einer geringfügigen Leistungssteigerung.

Wenn der Hub Nachrichtenrouting verwendet, haben Sie zwei Wahlmöglichkeiten.

  • Verschieben Sie die für die Routingendpunkte verwendeten Ressourcen an den neuen Standort.

    1. Erstellen Sie die neuen Ressourcen selbst – entweder manuell über das Azure-Portal oder mithilfe von Resource Manager-Vorlagen.

    2. Benennen Sie alle Ressourcen um, wenn Sie sie am neuen Standort erstellen, da die Namen global eindeutig sein müssen.

    3. Aktualisieren Sie die Ressourcennamen und die Ressourcenschlüssel in der Vorlage des neuen Hubs, bevor Sie den neuen Hub erstellen. Die Ressourcen sollten bei der Erstellung des neuen Hubs vorhanden sein.

  • Verschieben Sie nicht die für die Routingendpunkte verwendeten Ressourcen. Verwenden Sie sie „direkt“.

    1. In dem Schritt, in dem Sie die Vorlage bearbeiten, müssen Sie die Schlüssel für jede Routingressource abrufen und in der Vorlage ablegen, bevor Sie den neuen Hub erstellen.

    2. Der Hub verweist weiterhin auf die ursprünglichen Routingressourcen und leitet Nachrichten entsprechend der Konfiguration dorthin weiter. Sie erzielen nur eine geringe Leistungssteigerung, weil sich der Hub und die Ressourcen für den Routingendpunkt nicht an demselben Standort befinden.

Vorbereitungen zum Migrieren des Hubs in eine andere Region

Dieser Abschnitt enthält spezifische Anleitungen zur Migration des Hubs.

Exportieren des ursprünglichen Hubs in eine Ressourcenvorlage

  1. Melden Sie sich beim Azure-Portal an.

  2. Navigieren Sie zu dem IoT-Hub, die Sie migrieren möchten.

  3. Wählen Sie in der Liste der Eigenschaften und Einstellungen für den Hub Vorlage exportieren aus.

    Screenshot: Befehl zum Exportieren der Vorlage für den IoT-Hub

  4. Wählen Sie Herunterladen aus, um die Vorlage herunterzuladen. Speichern Sie die Datei an einem Ort, an dem Sie sie wiederfinden können.

    Screenshot. Befehl zum Herunterladen der Vorlage für den IoT Hub

Vorlage anzeigen

Navigieren Sie zu der heruntergeladenen Vorlage (in einer ZIP-Datei enthalten). Entpacken Sie die Zip-Datei und suchen Sie die Datei mit dem Namen template.json.

Das folgende Beispiel zeigt einen generischen Hub ohne Routingkonfiguration. Es ist ein Hub des Tarifs „S1“ (mit 1 Einheit) namens ContosoHub in der Region USA, Westen:

{
    "$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": []
            }
        }
    ]
}

Bearbeiten der Vorlage

Sie müssen einige Änderungen vornehmen, bevor Sie die Vorlage verwenden können, um den neuen Hub in der neuen Region zu erstellen. Verwenden Sie Visual Studio Code oder einen Text-Editor zum Bearbeiten der Vorlage.

Bearbeiten des Hubnamens und Standorts

  1. Entfernen Sie den Abschnitt mit den Parametern für den Containernamen am oberen Rand. Bei ContosoHub gibt es keinen zugeordneten Container.

    "parameters": {
      ...
        "IotHubs_ContosoHub_containerName": {
            "type": "SecureString"
        },
      ...
    },
    
  2. Entfernen Sie die storageEndpoints-Eigenschaft.

    "properties": {
      ...
        "storageEndpoints": {
        "$default": {
            "sasTtlAsIso8601": "PT1H",
            "connectionString": "[parameters('IotHubs_ContosoHub_connectionString')]",
            "containerName": "[parameters('IotHubs_ContosoHub_containerName')]"
        }
      },
      ...
    
    
  3. Ändern Sie unter resources (Ressourcen) die Eigenschaft location (Standort), wenn Sie den Hub zu einer neuen Region migrieren.

    "location": "westus",
    

Aktualisieren der Routingendpunktressourcen

Wenn Sie die Resource Manager-Vorlage für einen Hub mit konfiguriertem Routing exportieren, sehen Sie, dass die Schlüssel für diese Ressourcen in der exportierten Vorlage nicht bereitgestellt werden. Der Platz dafür ist durch Sternchen gekennzeichnet. Sie müssen sie ausfüllen, indem Sie im Portal zu diesen Ressourcen wechseln und die Schlüssel abrufen, bevor Sie die Vorlage für den neuen Hub importieren und den Hub erstellen.

Wenn Sie auch die Routingressourcen migriert haben, aktualisieren Sie auch den Namen, die ID und die Ressourcengruppe der einzelnen Endpunkte.

  1. Rufen Sie die für jede der Routingressourcen erforderlichen Schlüssel ab, und fügen Sie sie in die Vorlage ein. Sie können den/die Schlüssel aus der Ressource im Azure-Portal abrufen.

    • Wenn Sie beispielsweise Nachrichten an einen Speichercontainer weiterleiten, suchen Sie das Speicherkonto im Portal. Wählen Sie im Abschnitt „Einstellungen“ Zugriffsschlüssel aus, und kopieren Sie einen der Schlüssel. Beim ersten Export der Vorlage sieht der Schlüssel so aus:

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

      Nachdem Sie den Kontoschlüssel für das Speicherkonto abgerufen haben, fügen Sie ihn in der Vorlage anstelle der Sternchen in die Klausel AccountKey=**** ein.

    • Rufen Sie für Service Bus-Warteschlangen den Schlüssel für den gemeinsamen Zugriff ab, der mit „SharedAccessKeyName“ übereinstimmt. Hier ist der Schlüssel und der SharedAccessKeyName im JSON-Code:

      "connectionString": "Endpoint=sb://fabrikamsbnamespace1234.servicebus.windows.net:5671/;
      SharedAccessKeyName=iothubroutes_FabrikamResources;
      SharedAccessKey=****;
      EntityPath=fabrikamsbqueue1234",
      
    • Dasselbe gilt für die Service Bus-Themen und Event Hubs-Verbindungen.

Erstellen des neuen Hubs durch Laden der Vorlage

Erstellen Sie den neuen Hub unter Verwendung der bearbeiteten Vorlage. Wenn Sie Routingressourcen haben, die zum Verschieben vorgesehen sind, sollten sie am neuen Standort eingerichtet und die Verweise darauf in der Vorlage entsprechend aktualisiert werden. Wenn Sie die Routingressourcen nicht migrieren, müssen sie in der Vorlage mit den aktualisierten Schlüsseln enthalten sein.

  1. Melden Sie sich beim Azure-Portal an.

  2. Wählen Sie Ressource erstellen.

  3. Suchen Sie im Suchfeld nach Vorlagenbereitstellung (mit benutzerdefinierten Vorlagen bereitstellen), und wählen Sie die entsprechende Option aus. Wählen Sie auf dem Bildschirm für die Vorlagenbereitstellung die Option Erstellen aus.

  4. Wählen Sie auf der Seite Benutzerdefinierte Bereitstellung die Option Eigene Vorlage im Editor erstellen aus, damit Sie Ihre Vorlage aus einer Datei hochladen können.

    Screenshot: Befehl zum Erstellen Ihrer eigenen Vorlage

  5. Wählen Sie Datei laden aus.

    Screenshot: Befehl zum Hochladen einer Vorlagendatei

  6. Suchen Sie nach der von Ihnen bearbeiteten neuen Vorlage, wählen Sie sie und dann Öffnen aus. Dadurch wird Ihre Vorlage im Bearbeitungsfenster geladen. Wählen Sie Speichern aus.

    Screenshot: Laden der Vorlage

  7. Füllen Sie die folgenden Felder auf der Seite für die benutzerdefinierte Bereitstellung aus.

    Abonnement: Wählen Sie das zu verwendende Abonnement aus.

    Ressourcengruppe: Wählen Sie eine vorhandene Ressourcengruppe aus, oder erstellen Sie eine neue.

    Region: Wenn Sie eine bestehende Ressourcengruppe ausgewählt haben, wird die Region für Sie ausgefüllt, damit sie dem Standort der Ressourcengruppe entspricht. Wenn Sie eine neue Ressourcengruppe erstellt haben, handelt es sich hierbei um ihren Standort.

    Verbindungszeichenfolge: Geben Sie die Verbindungszeichenfolge für Ihren Hub ein.

    Hubname: Benennen Sie den neuen Hub.

    Screenshot der Seite für die benutzerdefinierte Bereitstellung

  8. Wählen Sie die Schaltfläche Überprüfen + erstellen aus.

  9. Wählen Sie die Schaltfläche Erstellen. Das Portal überprüft Ihre Vorlage und stellt Ihren neuen Hub bereit. Gegebenenfalls vorhandene Routingkonfigurationsdaten werden zwar in den neuen Hub eingeschlossen, verweisen aber weiterhin auf die Ressourcen am vorherigen Standort.

    Screenshot der endgültigen benutzerdefinierten Bereitstellungsseite

Verwalten der beim IoT-Hub registrierten Geräte

Nachdem Ihr neuer Hub nun einsatzbereit ist, müssen alle Geräte aus dem ursprünglichen Hub in den neuen Hub kopiert werden.

Es gibt mehrere Möglichkeiten zum Kopieren der Geräte. Ursprünglich haben Sie zum Bereitstellen der Geräte den Device Provisioning-Dienst (DPS) verwendet oder ihn nicht verwendet. Wenn Sie das getan haben, ist dieser Prozess nicht schwierig. Wenn Sie es nicht getan haben, kann dieser Prozess kompliziert sein.

Wenn Sie Ihre Geräte nicht mithilfe von DPS bereitgestellt haben, können Sie den nächsten Abschnitt überspringen und mit Migrieren der Geräte zum neuen Hub mithilfe von Import/Export beginnen.

Verwendung von DPS zum erneuten Bereitstellen der Geräte im neuen Hub

Wenn Sie die Geräte mithilfe von DPS zum neuen Standort migrieren möchten, lesen Sie Erneutes Bereitstellen von Geräten. Wenn Sie damit fertig sind, können Sie die Geräte im Azure-Portal anzeigen und überprüfen, ob sie sich am neuen Standort befinden.

Wechseln Sie über das Azure-Portal zum neuen Hub. Wählen Sie Ihren Hub und dann IoT-Geräte aus. Es werden die Geräte angezeigt, die im neuen Hub erneut bereitgestellt wurden. Sie können auch die Eigenschaften für den neuen Hub anzeigen.

Wenn Sie das Routing implementiert haben, vergewissern Sie sich durch Tests, dass Ihre Nachrichten ordnungsgemäß an die Ressourcen weitergeleitet werden.

Ausführen eines Rollbacks der Änderungen nach der Verwendung von DPS

Wenn Sie ein Rollback der Änderungen ausführen möchten, können Sie die Geräte aus dem neuen Hub im alten Hub erneut bereitstellen.

Damit ist die Migration Ihres Hubs und seiner Geräte abgeschlossen. Sie können zu Bereinigung wechseln.

Migrieren der Geräte zum neuen Hub mithilfe von Import/Export

Das Ziel der Anwendung ist .NET Core, damit Sie sie unter Windows oder Linux ausführen können. Sie können das Beispiel herunterladen, Ihre Verbindungszeichenfolgen abrufen, die Flags für die auszuführenden Bits festlegen, und es ausführen. Bei allen diesen Vorgängen müssen Sie den Code nicht öffnen.

Herunterladen des Beispiels

  1. Verwenden Sie diese IoT-bezogenen C#-Beispiele: Azure IoT-SDK für C#. Laden Sie die ZIP-Datei herunter, und entzippen Sie sie auf Ihrem Computer.

  2. Der relevante Code befindet sich in ./iothub/service/samples/how to guides/ImportExportDevicesSample. Sie müssen den Code nicht anzeigen oder bearbeiten, um die Anwendung ausführen zu können.

  3. Geben Sie zum Ausführen der Anwendung drei Verbindungszeichenfolgen und fünf Optionen an. Sie übergeben diese Daten als Befehlszeilenargumente oder verwenden Umgebungsvariablen, oder aber Sie verwenden eine Kombination aus beiden. Wir werden die Optionen als Befehlszeilenargumente und die Verbindungszeichenfolgen als Umgebungsvariablen übergeben.

    Der Grund dafür: Die Verbindungszeichenfolgen sind lang, bewirken nichts und werden sich wahrscheinlich nicht ändern, doch Sie möchten vielleicht die Optionen ändern und die Anwendung mehrmals ausführen. Wenn Sie den Wert einer Umgebungsvariablen ändern möchten, müssen Sie das Befehlsfenster und Visual Studio oder Visual Studio Code schließen – je nachdem, welche dieser Anwendungen Sie verwenden.

Tastatur

Hier sind die fünf Optionen, die beim Ausführen der Anwendung angegeben werden:

  • addDevices (Argument 1): Legen Sie diese Option auf True fest, wenn Sie automatisch generierte virtuelle Geräte hinzufügen möchten. Diese Geräte werden dem Quellhub hinzugefügt. Legen Sie außerdem numToAdd (Argument 2) fest, um anzugeben, wie viele Geräte Sie hinzufügen möchten. Sie können maximal eine Million Geräte für einen Hub registrieren. Der Zweck dieser Option ist das Testen. Sie können eine bestimmte Anzahl von Geräten generieren und sie dann in einen anderen Hub kopieren.

  • copyDevices (Argument 3): Legen Sie diese Option auf True fest, damit die Geräte aus einem Hub in einen anderen kopiert werden.

  • deleteSourceDevices (Argument 4): Legen Sie diese Option auf True fest, damit alle beim Quellhub registrierten Geräte gelöscht werden. Wir empfehlen, vor der Ausführung dieses Schritts so lange zu warten, bis Sie sicher sind, dass alle Geräte übertragen wurden. Nachdem Sie die Geräte gelöscht haben, können Sie sie nämlich nicht wiederherstellen.

  • deleteDestDevices (Argument 5): Legen Sie diese Option auf True fest, damit alle beim Zielhub registrierten Geräte gelöscht werden. Diese Vorgehensweise empfiehlt sich, wenn Sie die Geräte mehrmals kopieren möchten.

Der grundlegende Befehl ist dotnet run, der .NET anweist, die lokale „csproj“-Datei zu erstellen und dann auszuführen. Sie fügen Ihr Befehlszeilenargument am Ende hinzu, bevor Sie die Datei ausführen.

Ihre Befehlszeile sollte so wie in diesen Beispielen aussehen:

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

Verwenden von Umgebungsvariablen für die Verbindungszeichenfolgen

  1. Zum Ausführen des Beispiels benötigen Sie die Verbindungszeichenfolgen für den alten und den neuen IoT Hub sowie für ein Speicherkonto, das Sie für temporäre Arbeitsdateien verwenden können. Wir werden die Werte dafür in Umgebungsvariablen speichern.

  2. Zum Abrufen der Werte für die Verbindungszeichenfolge melden Sie sich beim Azure-Portal an.

  3. Fügen Sie die Verbindungszeichenfolgen an einer Stelle ein, an der Sie sie abrufen können, z.B. in NotePad. Wenn Sie Folgendes kopieren, können Sie die Verbindungszeichenfolgen direkt an ihrem Ziel einfügen. Fügen Sie keine Leerzeichen vor und hinter dem Gleichheitszeichen hinzu, weil dadurch der Variablenname geändert wird. Außerdem benötigen Sie keine doppelten Anführungszeichen vor und hinter den Verbindungszeichenfolgen. Wenn Sie die Verbindungszeichenfolge für das Speicherkonto in Anführungszeichen setzen, ist die Skriptausführung nicht erfolgreich.

    Festlegen der Umgebungsvariablen unter 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>
    

    Festlegen der Umgebungsvariablen unter 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. Navigieren Sie für die IoT Hub-Verbindungszeichenfolgen zu jedem einzelnen Hub im Portal. Sie können in Ressourcen nach dem Hub suchen. Wenn Sie die Ressourcengruppe wissen, können Sie zu Ressourcengruppen wechseln, Ihre Ressourcengruppe und dann den Hub aus der Liste der Ressourcen in dieser Gruppe auswählen.

  5. Wählen Sie in den Einstellungen für den Hub Freigegebene Zugriffsrichtlinien, anschließend iothubowner aus, und kopieren Sie eine der Verbindungszeichenfolgen. Gehen Sie beim Zielhub genauso vor. Fügen Sie die Verbindungszeichenfolgen den entsprechenden SET-Befehlen hinzu.

  6. Suchen Sie für die „Verbindungszeichenfolge für Speicherkonto“ das gewünschte Speicherkonto in Ressourcen oder unter seiner Ressourcengruppe, und öffnen Sie es.

  7. Wählen Sie unter dem Abschnitt „Einstellungen“ die Option Zugriffsschlüssel aus, und kopieren Sie eine der Verbindungszeichenfolgen. Fügen Sie die Verbindungszeichenfolge für den entsprechenden SET-Befehl in Ihre Textdatei ein.

Jetzt haben Sie die Umgebungsvariablen in einer Datei zusammen mit den SET-Befehlen und wissen, wie Ihre Befehlszeilenargumente lauten. Nun führen wir das Beispiel aus.

Ausführen der Beispielanwendung und Verwenden von Befehlszeilenargumenten

  1. Öffnen Sie ein Eingabeaufforderungsfenster. Wählen Sie dazu „Windows“ aus, und geben Sie command prompt ein.

  2. Kopieren Sie die Befehle zum Festlegen der Umgebungsvariablen jeweils einzeln, fügen Sie sie im Eingabeaufforderungsfenster ein, und drücken Sie die EINGABETASTE. Wenn Sie damit fertig sind, geben Sie im Eingabeaufforderungsfenster SET ein, um Ihre Umgebungsvariablen und deren Werte anzuzeigen. Nachdem Sie diese in das Eingabeaufforderungsfenster kopiert haben, müssen Sie sie nicht erneut kopieren – außer wenn Sie ein neues Fenster öffnen.

  3. Wechseln Sie im Eingabeaufforderungsfenster die Verzeichnisse, bis das Verzeichnis „./ImportExportDevicesSample“ angezeigt wird (in dem die Datei „ImportExportDevicesSample.csproj“ gespeichert ist). Geben Sie dann Folgendes ein, und beziehen Sie Ihre Befehlszeilenargumente mit ein:

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

    Der Befehl „dotnet“ erstellt die Anwendung und führt sie aus. Da die Optionen beim Ausführen der Anwendung übergeben werden, können Sie deren Werte bei jeder Ausführung ändern. Vielleicht möchten Sie sie beispielsweise einmal ausführen und neue Geräte erstellen, anschließend erneut ausführen und diese Geräte in einen neuen Hub kopieren usw. Sie können auch alle Schritte in der gleichen Ausführung ausführen. Es empfiehlt sich jedoch, Geräte erst dann zu löschen, wenn Sie sicher sind, dass die Migration abgeschlossen ist. Im folgenden Beispiel werden 1.000 Geräte erstellt und dann in den anderen Hub kopiert:

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

    Nachdem Sie überprüft haben, ob die Geräte erfolgreich kopiert wurden, können Sie sie folgendermaßen aus dem Quellhub entfernen:

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

Ausführen der Beispielanwendung mit Visual Studio

  1. Wenn Sie die Anwendung in Visual Studio ausführen möchten, ändern Sie Ihr aktuelles Verzeichnis auf den Ordner, in dem sich die Datei „azureiot.sln“ befindet. Führen Sie dann diesen Befehl im Eingabeaufforderungsfenster aus, um die Projektmappe in Visual Studio zu öffnen. Das muss in demselben Fenster geschehen, in dem Sie die Umgebungsvariablen festlegen, damit diese Variablen bekannt sind.

    azureiot.sln
    
  2. Klicken Sie mit der rechten Maustaste auf das Projekt ImportExportDevicesSample, und wählen Sie Als Startprojekt festlegen aus.

  3. Legen Sie die Variablen oben in „Program.cs“ im Ordner „ImportExportDevicesSample“ für die fünf Optionen fest.

    // 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. Drücken Sie F5, um die Anwendung auszuführen. Nach Abschluss der Ausführung können Sie die Ergebnisse anzeigen.

Anzeigen der Ergebnisse

Sie können die Geräte im Azure-Portal anzeigen und überprüfen, ob sie sich am neuen Standort befinden.

  1. Wechseln Sie über das Azure-Portal zum neuen Hub. Wählen Sie Ihren Hub und dann IoT-Geräte aus. Daraufhin werden die Geräte angezeigt, die Sie aus dem alten Hub in den neuen Hub kopiert haben. Sie können auch die Eigenschaften für den neuen Hub anzeigen.

  2. Überprüfen Sie auf Import-/Exportfehler, indem Sie im Azure-Portal zum Azure-Speicherkonto wechseln und im Container devicefiles nach der Datei ImportErrors.log suchen. Wenn diese Datei leer ist (die Größe „0“ hat), sind keine Fehler aufgetreten. Wenn Sie versuchen, dasselbe Gerät mehrmals zu importieren, wird es beim zweiten Mal abgelehnt und in der Protokolldatei eine Fehlermeldung hinzugefügt.

Übergeben der Änderungen

An diesem Punkt haben Sie Ihren Hub an den neuen Standort kopiert und die Geräte zum neuen Hub migriert. Nun müssen Änderungen vorgenommen werden, damit die Geräte mit dem neuen Hub funktionieren.

Zum Committen der Änderungen müssen Sie die folgenden Schritte ausführen:

  • Aktualisieren Sie jedes Gerät, um den IoT Hub-Hostnamen so zu ändern, dass er auf den neuen Hub verweist. Verwenden Sie dafür dieselbe Methode wie bei der ersten Bereitstellung des Geräts.

  • Ändern Sie alle Ihre Anwendungen, die auf den alten Hub verweisen so, dass sie auf den neuen Hub verweisen.

  • Nachdem Sie diesen Vorgang abgeschlossen haben, sollte der neue Hub einsatzbereit sein. Bei dem alten Hub sollte es keine aktiven Geräte mehr geben, und er sollte deaktiviert sein.

Ausführen eines Rollbacks der Änderungen

Wenn Sie ein Rollback der Änderungen ausführen möchten, führen Sie die folgenden Schritte aus:

  • Aktualisieren Sie jedes Gerät, um den IoT Hub-Hostnamen so zu ändern, dass er auf den IoT Hub-Hostnamen des alten Hubs verweist. Verwenden Sie dafür dieselbe Methode wie bei der ersten Bereitstellung des Geräts.

  • Ändern Sie alle Ihre Anwendungen, die auf den neuen Hub verweisen so, dass sie auf den alten Hub verweisen. Wenn Sie beispielsweise Azure Analytics verwenden, müssen Sie ggf. Ihre Azure Stream Analytics-Eingabe neu konfigurieren.

  • Löschen Sie den neuen Hub.

  • Wenn Sie Routingressourcen haben, sollte die Konfiguration im alten Hub weiterhin auf die richtige Routingkonfiguration verweisen und nach dem Neustart des Hubs bei diesen Ressourcen funktionieren.

Prüfen der Ergebnisse

Wenn Sie die Ergebnisse überprüfen möchten, ändern Sie Ihre IoT-Lösung so, dass sie auf Ihren Hub am neuen Standort verweist, und führen Sie sie aus. Mit anderen Worten: Führen Sie dieselben Aktionen mit dem neuen Hub aus, die Sie mit dem vorherigen Hub ausgeführt haben, und stellen Sie sicher, dass sie ordnungsgemäß funktionieren.

Wenn Sie das Routing implementiert haben, vergewissern Sie sich durch Tests, dass Ihre Nachrichten ordnungsgemäß an die Ressourcen weitergeleitet werden.

Bereinigen

Führen Sie eine Bereinigung erst durch, wenn Sie sicher sind, dass der neue Hub einsatzbereit ist und die Geräte ordnungsgemäß funktionieren. Testen Sie auch unbedingt das Routing, falls Sie dieses Feature verwenden. Wenn Sie damit fertig sind, bereinigen Sie die alten Ressourcen mit den folgenden Schritten:

  • Falls es noch nicht geschehen ist, löschen Sie den alten Hub. So werden alle aktiven Geräte aus dem Hub entfernt.

  • Wenn Sie Ihre vorhandenen Routingressourcen an den neuen Standort verschoben haben, können Sie die alten Ressourcen löschen.

Nächste Schritte

Sie haben einen IoT-Hub vollständig mit Geräten zu einem neuen Hub in einer neuen Region migriert. Weitere Informationen zum Ausführen von Massenvorgängen für die Identitätsregistrierung in einem IoT Hub finden Sie unter Importieren und Exportieren von IoT Hub-Geräteidentitäten per Massenvorgang.