Jak ręcznie przeprowadzić migrację usługi Azure IoT Hub przy użyciu szablonu usługi Azure Resource Manager

Użyj Azure Portal, szablonów usługi Azure Resource Manager i zestawów SDK usługi Azure IoT Hub, aby przeprowadzić migrację centrum IoT do nowego regionu, nowej warstwy lub nowej konfiguracji.

Kroki opisane w tym artykule są przydatne, jeśli chcesz:

Aby przeprowadzić migrację centrum, potrzebna jest subskrypcja z dostępem administracyjnym do oryginalnego centrum. Nowe centrum można umieścić w nowej grupie zasobów i regionie w tej samej subskrypcji co oryginalne centrum, a nawet w nowej subskrypcji. Po prostu nie można użyć tej samej nazwy, ponieważ nazwa centrum musi być globalnie unikatowa.

Porównanie kroków migracji automatycznej i ręcznej

Wynik tego artykułu przypomina sposób automatycznego migrowania centrum IoT przy użyciu interfejsu wiersza polecenia platformy Azure, ale z innym procesem. Przed rozpoczęciem zdecyduj, który proces jest odpowiedni dla danego scenariusza.

  • Proces ręczny (ten artykuł):

    • Migruje rejestr urządzeń oraz informacje o routingu i punkcie końcowym. Musisz ręcznie utworzyć ponownie inne szczegóły konfiguracji w nowym centrum IoT.
    • Jest szybszy w przypadku migrowania dużej liczby urządzeń (na przykład ponad 100 000).
    • Używa konta usługi Azure Storage do transferu rejestru urządzeń.
    • Czyści parametry połączenia dla punktów końcowych routingu i przekazywania plików z danych wyjściowych szablonu usługi ARM i należy je ręcznie dodać.
  • Proces interfejsu wiersza polecenia platformy Azure:

    • Migruje rejestr urządzeń, informacje o routingu i punkcie końcowym oraz inne szczegóły konfiguracji, takie jak wdrożenia IoT Edge lub konfiguracje automatycznego zarządzania urządzeniami.
    • Łatwiej jest migrować niewielką liczbę urządzeń (na przykład do 10 000).
    • Nie wymaga konta usługi Azure Storage.
    • Zbiera parametry połączenia dla punktów końcowych routingu i przekazywania plików oraz dołącza je do danych wyjściowych szablonu usługi ARM.

Zagadnienia do rozważenia

Przed migracją centrum IoT należy wziąć pod uwagę kilka kwestii.

  • Upewnij się, że wszystkie funkcje dostępne w oryginalnej lokalizacji są również dostępne w nowej lokalizacji. Niektóre usługi są dostępne w wersji zapoznawczej, a nie wszystkie funkcje są dostępne wszędzie.

  • Nie usuwaj oryginalnych zasobów przed utworzeniem i zweryfikowaniem zmigrowanej wersji. Po usunięciu koncentratora nie ma już możliwości odzyskania go, aby sprawdzić ustawienia lub dane, aby upewnić się, że koncentrator jest prawidłowo replikowany.

  • Dane oryginalnego centrum IoT nie są migrowane. Te dane obejmują komunikaty dotyczące urządzeń, polecenia typu chmura-urządzenie (C2D) oraz informacje dotyczące zadań, takie jak harmonogramy i historia. Metryki i wyniki rejestrowania nie są również migrowane.

  • Należy zaplanować przestój migracji. Klonowanie urządzeń do nowego centrum zajmuje trochę czasu. Jeśli używasz metody Import/Export, testy porównawcze wykazały, że przeniesienie 500 000 urządzeń może potrwać około dwóch godzin i cztery godziny, aby przenieść milion urządzeń.

  • Urządzenia można kopiować do nowego centrum bez zamykania lub zmieniania urządzeń.

    • Jeśli urządzenia zostały pierwotnie aprowizowane przy użyciu usługi DPS, zaktualizuj swoje rejestracje, aby wskazać nowe centrum IoT. Następnie ponownie zaprowizuj urządzenia, aby zaktualizować informacje o połączeniu przechowywane na każdym urządzeniu.

    • W przeciwnym razie należy użyć metody import/export, aby przenieść urządzenia, a następnie urządzenia muszą zostać zmodyfikowane w celu użycia nowego centrum. Możesz na przykład skonfigurować urządzenie, aby korzystać z nazwy hosta IoT Hub z żądanych właściwości bliźniaczej reprezentacji. Urządzenie przyjmuje tę IoT Hub nazwę hosta, odłącz urządzenie od starego centrum i ponownie połącz je z nowym.

  • Należy zaktualizować wszystkie certyfikaty, aby można było ich używać z nowymi zasobami. Ponadto prawdopodobnie masz centrum zdefiniowane w tabeli DNS gdzieś i trzeba zaktualizować te informacje DNS.

Metodologia

Jest to ogólna metoda zalecana do migrowania centrum IoT.

  1. Wyeksportuj centrum i jego ustawienia do szablonu Resource Manager.

  2. Wprowadź niezbędne zmiany w szablonie, takie jak aktualizowanie wszystkich wystąpień nazwy i lokalizacji zmigrowanego centrum. W przypadku wszystkich zasobów w szablonie używanych do punktów końcowych routingu komunikatów zaktualizuj klucz w szablonie dla tego zasobu.

  3. Zaimportuj szablon do nowej grupy zasobów w nowej lokalizacji. Ten krok tworzy nowe centrum IoT.

  4. Debuguj zgodnie z potrzebami.

  5. Dodaj wszystkie elementy, które nie zostały wyeksportowane do szablonu.

    Na przykład grupy odbiorców nie są eksportowane do szablonu. Należy ręcznie dodać grupy odbiorców do szablonu lub użyć Azure Portal po utworzeniu centrum.

  6. Skopiuj urządzenia z oryginalnego centrum do nowego centrum. Ten proces został omówiony w sekcji Zarządzanie urządzeniami zarejestrowanymi w centrum IoT.

Jak obsługiwać routing komunikatów

Jeśli centrum używa routingu komunikatów, eksportowanie szablonu dla centrum obejmuje konfigurację routingu, ale nie zawiera samych zasobów. Jeśli przeprowadzasz migrację centrum IoT do nowego regionu, musisz wybrać, czy przenieść zasoby routingu do nowej lokalizacji, czy też pozostawić je w miejscu i nadal używać ich jako jest. W innym regionie może wystąpić niewielka wydajność z routingu komunikatów do zasobów punktu końcowego.

Jeśli centrum używa routingu komunikatów, masz dwie opcje.

  • Przenieś zasoby używane dla punktów końcowych routingu do nowej lokalizacji.

    1. Utwórz nowe zasoby ręcznie w Azure Portal lub przy użyciu szablonów Resource Manager.

    2. Zmień nazwę wszystkich zasobów podczas tworzenia ich w nowej lokalizacji, ponieważ wymagają one globalnie unikatowych nazw.

    3. Zaktualizuj nazwy zasobów i klucze zasobów w szablonie nowego centrum przed utworzeniem nowego centrum. Zasoby powinny być obecne po utworzeniu nowego centrum.

  • Nie przenosij zasobów używanych dla punktów końcowych routingu. Użyj ich "na miejscu".

    1. W kroku, w którym edytujesz szablon, musisz pobrać klucze dla każdego zasobu routingu i umieścić je w szablonie przed utworzeniem nowego centrum.

    2. Centrum nadal odwołuje się do oryginalnych zasobów routingu i kieruje do nich komunikaty zgodnie z konfiguracją. Uzyskasz niewielką wydajność, ponieważ centrum i zasoby punktu końcowego routingu nie są w tej samej lokalizacji.

Przygotowanie do migracji centrum do innego regionu

Ta sekcja zawiera szczegółowe instrukcje dotyczące migrowania centrum.

Eksportowanie oryginalnego centrum do szablonu zasobu

  1. Zaloguj się w witrynie Azure Portal.

  2. Przejdź do centrum IoT, które chcesz przenieść.

  3. Wybierz pozycję Eksportuj szablon z listy właściwości i ustawień centrum.

    Zrzut ekranu przedstawiający polecenie eksportowania szablonu dla centrum IoT.

  4. Wybierz pozycję Pobierz , aby pobrać szablon. Zapisz plik w miejscu, w którym można go znaleźć ponownie.

    Zrzut ekranu przedstawiający polecenie pobierania szablonu dla centrum IoT.

Wyświetlanie szablonu

Przejdź do pobranego szablonu, który znajduje się w pliku zip. Wyodrębnij plik zip i znajdź plik o nazwie template.json.

Poniższy przykład dotyczy ogólnego centrum bez konfiguracji routingu. Jest to koncentrator warstwy S1 (z 1 jednostką) o nazwie ContosoHub w regionie 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": []
            }
        }
    ]
}

Edytowanie szablonu

Przed użyciem szablonu musisz wprowadzić pewne zmiany, aby utworzyć nowe centrum w nowym regionie. Użyj Visual Studio Code lub edytora tekstów, aby edytować szablon.

Edytowanie nazwy i lokalizacji centrum

  1. Usuń sekcję parametru nazwy kontenera u góry. Usługa ContosoHub nie ma skojarzonego kontenera.

    "parameters": {
      ...
        "IotHubs_ContosoHub_containerName": {
            "type": "SecureString"
        },
      ...
    },
    
  2. Usuń właściwość storageEndpoints .

    "properties": {
      ...
        "storageEndpoints": {
        "$default": {
            "sasTtlAsIso8601": "PT1H",
            "connectionString": "[parameters('IotHubs_ContosoHub_connectionString')]",
            "containerName": "[parameters('IotHubs_ContosoHub_containerName')]"
        }
      },
      ...
    
    
  3. Jeśli przenosisz koncentrator do nowego regionu, zmień właściwość location w obszarze zasobów.

    "location": "westus",
    

Aktualizowanie zasobów punktu końcowego routingu

Podczas eksportowania szablonu Resource Manager dla centrum ze skonfigurowanym routingiem zobaczysz, że klucze dla tych zasobów nie są udostępniane w wyeksportowanym szablonie. Ich umieszczanie jest oznaczone gwiazdkami. Należy je wypełnić, przechodząc do tych zasobów w portalu i pobierając klucze przed zaimportowaniem szablonu nowego centrum i utworzeniem centrum.

Jeśli również przeniesiono zasoby routingu, zaktualizuj nazwę, identyfikator i grupę zasobów każdego punktu końcowego.

  1. Pobierz klucze wymagane dla dowolnego zasobu routingu i umieść je w szablonie. Klucze można pobrać z zasobu w Azure Portal.

    • Jeśli na przykład kierujesz komunikaty do kontenera magazynu, znajdź konto magazynu w portalu. W sekcji Ustawienia wybierz pozycję Klucze dostępu, a następnie skopiuj jeden z kluczy. Oto jak wygląda klucz podczas pierwszego eksportowania szablonu:

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

      Po pobraniu klucza konta dla konta magazynu umieść go w szablonie w AccountKey=**** klauzuli zamiast gwiazdki.

    • W przypadku kolejek usługi Service Bus pobierz klucz dostępu współdzielonego pasujący do wartości SharedAccessKeyName. Oto klucz i element SharedAccessKeyName w formacie json:

      "connectionString": "Endpoint=sb://fabrikamsbnamespace1234.servicebus.windows.net:5671/;
      SharedAccessKeyName=iothubroutes_FabrikamResources;
      SharedAccessKey=****;
      EntityPath=fabrikamsbqueue1234",
      
    • Dotyczy to również tematów usługi Service Bus i połączeń usługi Event Hubs.

Tworzenie nowego centrum przez załadowanie szablonu

Utwórz nowe centrum przy użyciu edytowanego szablonu. Jeśli masz zasoby routingu, które mają zostać przeniesione, zasoby powinny zostać skonfigurowane w nowej lokalizacji i odwołania w szablonie zaktualizowane tak, aby były zgodne. Jeśli nie przenosisz zasobów routingu, powinny one znajdować się w szablonie ze zaktualizowanymi kluczami.

  1. Zaloguj się w witrynie Azure Portal.

  2. Wybierz pozycję Utwórz zasób.

  3. W polu wyszukiwania wyszukaj i wybierz wdrożenie szablonu (wdróż przy użyciu szablonów niestandardowych). Na ekranie wdrożenia szablonu wybierz pozycję Utwórz.

  4. Na stronie Wdrożenie niestandardowe wybierz pozycję Kompiluj własny szablon w edytorze, co umożliwia przekazanie szablonu z pliku.

    Zrzut ekranu przedstawiający polecenie tworzenia własnego szablonu.

  5. Wybierz pozycję Załaduj plik.

    Zrzut ekranu przedstawiający polecenie przekazywania pliku szablonu.

  6. Przejdź do edytowanego nowego szablonu i wybierz go, a następnie wybierz pozycję Otwórz. Ładuje szablon w oknie edycji. Wybierz pozycję Zapisz.

    Zrzut ekranu przedstawiający ładowanie szablonu.

  7. Wypełnij następujące pola na stronie wdrożenia niestandardowego.

    Subskrypcja: wybierz subskrypcję, której chcesz użyć.

    Grupa zasobów: wybierz istniejącą grupę zasobów lub utwórz nową.

    Region: Jeśli wybrano istniejącą grupę zasobów, region zostanie wypełniony, aby dopasować go do lokalizacji grupy zasobów. Jeśli utworzono nową grupę zasobów, jest to jego lokalizacja.

    Parametry połączenia: wypełnij parametry połączenia dla centrum.

    Nazwa centrum: nadaj nowemu koncentratorowi nazwę.

    Zrzut ekranu przedstawiający stronę wdrożenia niestandardowego

  8. Wybierz przycisk Przejrzyj i utwórz.

  9. Wybierz przycisk Utwórz. Portal weryfikuje szablon i wdraża nowe centrum. Jeśli masz dane konfiguracji routingu, jest on uwzględniony w nowym centrum, ale wskazuje zasoby w poprzedniej lokalizacji.

    Zrzut ekranu przedstawiający końcową stronę wdrożenia niestandardowego

Zarządzanie urządzeniami zarejestrowanymi w centrum IoT

Teraz, gdy masz już uruchomione nowe centrum, musisz skopiować wszystkie urządzenia z oryginalnego centrum do nowego.

Istnieje wiele sposobów kopiowania urządzeń. Usługa Device Provisioning Service (DPS) została pierwotnie użyta do aprowizacji urządzeń lub nie została użyta. Jeśli tak, ten proces nie jest trudny. Jeśli tego nie zrobisz, ten proces może być skomplikowany.

Jeśli nie użyto usługi DPS do aprowizacji urządzeń, możesz pominąć następną sekcję i rozpocząć od opcji Użyj importu/eksportu, aby przenieść urządzenia do nowego centrum.

Ponowne aprowidowania urządzeń w nowym centrum za pomocą usługi DPS

Aby przenieść urządzenia do nowej lokalizacji przy użyciu usługi DPS, zobacz Jak ponownie aprowizacji urządzeń. Po zakończeniu możesz wyświetlić urządzenia w Azure Portal i sprawdzić, czy znajdują się w nowej lokalizacji.

Przejdź do nowego centrum przy użyciu Azure Portal. Wybierz centrum, a następnie wybierz pozycję Urządzenia IoT. Zobaczysz urządzenia, które zostały ponownie aprowidowane w nowym centrum. Można również wyświetlić właściwości nowego centrum.

Jeśli zaimplementowano routing, przetestuj i upewnij się, że komunikaty są prawidłowo kierowane do zasobów.

Wycofywanie zmian po użyciu usługi DPS

Jeśli chcesz wycofać zmiany, wykonaj ponownie aprowizowanie urządzeń z nowego centrum do starego.

Zakończono migrację centrum i jego urządzeń. Możesz przejść do sekcji Czyszczenie.

Przenoszenie urządzeń do nowego centrum za pomocą polecenia import-export

Aplikacja jest przeznaczona dla platformy .NET Core, więc można ją uruchomić w systemie Windows lub Linux. Możesz pobrać przykład, pobrać parametry połączenia, ustawić flagi, dla których bitów chcesz uruchomić, i uruchomić je. Można to zrobić bez otwierania kodu.

Pobieranie przykładu

  1. Skorzystaj z przykładów języka C# usługi IoT tutaj: Zestaw Azure IoT SDK dla języka C#. Pobierz plik zip i rozpakuj go na komputerze.

  2. Poniższy kod znajduje się w pliku ./iothub/service/samples/how to guides/ImportExportDevicesSample. Nie musisz wyświetlać ani edytować kodu, aby uruchomić aplikację.

  3. Aby uruchomić aplikację, określ trzy parametry połączenia i pięć opcji. Te dane są przekazywane jako argumenty wiersza polecenia lub zmienne środowiskowe albo kombinacja tych dwóch. Przekażemy opcje w pliku jako argumenty wiersza polecenia i parametry połączenia jako zmienne środowiskowe.

    Przyczyną jest to, że parametry połączenia są długie i niezrównane i mało prawdopodobne, aby ulec zmianie, ale możesz zmienić opcje i uruchomić aplikację więcej niż raz. Aby zmienić wartość zmiennej środowiskowej, musisz zamknąć okno poleceń i program Visual Studio lub Visual Studio Code, niezależnie od tego, którego używasz.

Opcje

Poniżej przedstawiono pięć opcji, które można określić podczas uruchamiania aplikacji:

  • addDevices (argument 1) — ustaw tę opcję na True , jeśli chcesz dodać wygenerowane dla Ciebie urządzenia wirtualne. Te urządzenia są dodawane do centrum źródłowego. Ponadto ustaw wartość numToAdd (argument 2), aby określić liczbę urządzeń, które chcesz dodać. Maksymalna liczba urządzeń, które można zarejestrować w centrum, wynosi milion. Celem tej opcji jest testowanie. Można wygenerować określoną liczbę urządzeń, a następnie skopiować je do innego centrum.

  • copyDevices (argument 3) — ustaw tę opcję, aby True skopiować urządzenia z jednego centrum do innego.

  • deleteSourceDevices (argument 4) — ustaw tę opcję, aby True usunąć wszystkie urządzenia zarejestrowane w centrum źródłowym. Zalecamy oczekiwanie na pewne, że wszystkie urządzenia zostały przeniesione przed uruchomieniem tego polecenia. Po usunięciu urządzeń nie będzie można ich odzyskać.

  • deleteDestDevices (argument 5) — ustaw tę opcję, aby True usunąć wszystkie urządzenia zarejestrowane w centrum docelowym. Możesz to zrobić, jeśli chcesz skopiować urządzenia więcej niż raz.

Podstawowe polecenie to dotnet run, które nakazuje platformie .NET skompilowanie lokalnego pliku csproj, a następnie uruchomienie go. Argumenty wiersza polecenia są dodawane do końca przed jego uruchomieniem.

Wiersz polecenia będzie wyglądać podobnie do następujących przykładów:

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

Używanie zmiennych środowiskowych dla parametrów połączenia

  1. Aby uruchomić przykład, potrzebujesz parametrów połączenia ze starymi i nowymi centrami IoT oraz do konta magazynu, którego można użyć do tymczasowych plików służbowych. Wartości tych wartości będą przechowywane w zmiennych środowiskowych.

  2. Aby uzyskać wartości parametrów połączenia, zaloguj się do Azure Portal.

  3. Umieść parametry połączenia w dowolnym miejscu, które można je pobrać, na przykład Notatnik. Jeśli skopiujesz następujące elementy, możesz wkleić parametry połączenia bezpośrednio tam, gdzie idą. Nie dodawaj spacji wokół znaku równości ani zmienia nazwy zmiennej. Ponadto nie potrzebujesz podwójnych cudzysłowów wokół parametrów połączenia. Jeśli umieścisz cudzysłowy wokół parametrów połączenia konta magazynu, skrypt zakończy się niepowodzeniem.

    Ustaw zmienne środowiskowe w systemie 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>
    

    Ustaw zmienne środowiskowe w systemie 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. W przypadku parametrów połączenia centrum IoT hub przejdź do każdego centrum w portalu. Możesz wyszukać w obszarze Zasoby centrum. Jeśli znasz grupę zasobów, możesz przejść do pozycji Grupy zasobów, wybrać grupę zasobów, a następnie wybrać centrum z listy zasobów w tej grupie zasobów.

  5. Wybierz pozycję Zasady dostępu współdzielonego w obszarze Ustawienia centrum, a następnie wybierz pozycję iothubowner i skopiuj jeden z parametrów połączenia. Zrób to samo dla centrum docelowego. Dodaj je do odpowiednich poleceń SET.

  6. W przypadku parametrów połączenia konta magazynu znajdź konto magazynu w obszarze Zasoby lub w grupie zasobów i otwórz je.

  7. W sekcji Ustawienia wybierz pozycję Klucze dostępu i skopiuj jeden z parametrów połączenia. Umieść parametry połączenia w pliku tekstowym dla odpowiedniego polecenia SET.

Teraz masz zmienne środowiskowe w pliku z poleceniami SET i wiesz, jakie są argumenty wiersza polecenia. Uruchommy przykład.

Uruchamianie przykładowej aplikacji i używanie argumentów wiersza polecenia

  1. Otwórz okno wiersza polecenia. Wybierz pozycję Windows i wpisz polecenie , command prompt aby uzyskać okno wiersza polecenia.

  2. Skopiuj polecenia, które ustawiają zmienne środowiskowe, pojedynczo i wklej je w oknie wiersza polecenia, a następnie wybierz klawisz Enter. Po zakończeniu wpisz SET w oknie wiersza polecenia, aby wyświetlić zmienne środowiskowe i ich wartości. Po skopiowaniu tych elementów do okna wiersza polecenia nie trzeba ich ponownie kopiować, chyba że otworzysz nowe okno wiersza polecenia.

  3. W oknie wiersza polecenia zmień katalogi, dopóki nie znajdujesz się w pliku ./ImportExportDevicesSample (gdzie istnieje plik ImportExportDevicesSample.csproj). Następnie wpisz następujące polecenie i dołącz argumenty wiersza polecenia.

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

    Polecenie dotnet kompiluje i uruchamia aplikację. Ponieważ przekazujesz opcje podczas uruchamiania aplikacji, możesz zmienić ich wartości za każdym razem, gdy uruchamiasz aplikację. Na przykład możesz chcieć uruchomić je raz i utworzyć nowe urządzenia, a następnie uruchomić je ponownie i skopiować te urządzenia do nowego centrum itd. Możesz również wykonać wszystkie kroki w tym samym przebiegu, chociaż zalecamy, aby nie usuwać żadnych urządzeń, dopóki nie skończysz z migracją. Oto przykład, który tworzy 1000 urządzeń, a następnie kopiuje je do innego centrum.

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

    Po upewnieniu się, że urządzenia zostały pomyślnie skopiowane, możesz usunąć urządzenia z centrum źródłowego w następujący sposób:

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

Uruchamianie przykładowej aplikacji przy użyciu programu Visual Studio

  1. Jeśli chcesz uruchomić aplikację w programie Visual Studio, zmień bieżący katalog na folder, w którym znajduje się plik azureiot.sln. Następnie uruchom to polecenie w oknie wiersza polecenia, aby otworzyć rozwiązanie w programie Visual Studio. Należy to zrobić w tym samym oknie polecenia, w którym ustawiono zmienne środowiskowe, aby te zmienne były znane.

    azureiot.sln
    
  2. Kliknij prawym przyciskiem myszy projekt ImportExportDevicesSample i wybierz pozycję Ustaw jako projekt startowy.

  3. Ustaw zmienne w górnej części pliku Program.cs w folderze ImportExportDevicesSample dla pięciu opcji.

    // 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. Wybierz klawisz F5, aby uruchomić aplikację. Po zakończeniu działania można wyświetlić wyniki.

Wyświetlanie wyników

Urządzenia można wyświetlić w Azure Portal i sprawdzić, czy znajdują się w nowej lokalizacji.

  1. Przejdź do nowego centrum przy użyciu Azure Portal. Wybierz centrum, a następnie wybierz pozycję Urządzenia IoT. Zobaczysz urządzenia skopiowane ze starego centrum do nowego centrum. Możesz również wyświetlić właściwości nowego centrum.

  2. Sprawdź błędy importu/eksportu, przechodząc do konta usługi Azure Storage w Azure Portal i wyszukując w kontenerze devicefilesImportErrors.log. Jeśli ten plik jest pusty (rozmiar wynosi 0), nie wystąpiły błędy. Jeśli spróbujesz zaimportować to samo urządzenie więcej niż raz, odrzuci urządzenie po raz drugi i doda komunikat o błędzie do pliku dziennika.

Zatwierdzanie zmian

W tym momencie centrum zostało skopiowane do nowej lokalizacji i zmigrowane urządzenia do nowego centrum. Teraz musisz wprowadzić zmiany, aby urządzenia działały z nowym koncentratorem.

Aby zatwierdzić zmiany, poniżej przedstawiono kroki, które należy wykonać:

  • Zaktualizuj każde urządzenie, aby zmienić nazwę hosta IoT Hub w celu wskazania nazwy hosta IoT Hub do nowego centrum. Należy to zrobić przy użyciu tej samej metody, która została użyta podczas pierwszej aprowizacji urządzenia.

  • Zmień wszystkie aplikacje, które odwołują się do starego koncentratora, aby wskazywały nowe centrum.

  • Po zakończeniu nowy koncentrator powinien być uruchomiony. Stare centrum nie powinno mieć aktywnych urządzeń i być w stanie rozłączenia.

Wycofywanie zmian

Jeśli zdecydujesz się wycofać zmiany, wykonaj następujące kroki:

  • Zaktualizuj każde urządzenie, aby zmienić nazwę hosta IoT Hub, aby wskazywało nazwę hosta IoT Hub dla starego centrum. Należy to zrobić przy użyciu tej samej metody, która została użyta podczas pierwszej aprowizacji urządzenia.

  • Zmień wszystkie aplikacje, które odwołują się do nowego centrum, aby wskazywały stare centrum. Jeśli na przykład używasz usługi Azure Analytics, może być konieczne ponowne skonfigurowanie danych wejściowych usługi Azure Stream Analytics.

  • Usuń nowe centrum.

  • Jeśli masz zasoby routingu, konfiguracja w starym centrum powinna nadal wskazywać poprawną konfigurację routingu i powinna współpracować z tymi zasobami po ponownym uruchomieniu centrum.

Sprawdzanie wyników

Aby sprawdzić wyniki, zmień rozwiązanie IoT, aby wskazywało centrum w nowej lokalizacji i uruchom je. Innymi słowy, wykonaj te same akcje z nowym koncentratorem wykonanym z poprzednim koncentratorem i upewnij się, że działają prawidłowo.

Jeśli zaimplementowano routing, przetestuj i upewnij się, że komunikaty są prawidłowo kierowane do zasobów.

Czyszczenie

Nie czyścij, dopóki nie masz pewności, że nowe centrum jest uruchomione i urządzenia działają prawidłowo. Pamiętaj również, aby przetestować routing, jeśli używasz tej funkcji. Gdy wszystko będzie gotowe, wyczyść stare zasoby, wykonując następujące kroki:

  • Jeśli jeszcze tego nie zrobiono, usuń stare centrum. Spowoduje to usunięcie wszystkich aktywnych urządzeń z centrum.

  • Jeśli masz zasoby routingu przeniesione do nowej lokalizacji, możesz usunąć stare zasoby routingu.

Następne kroki

Centrum IoT zostało zmigrowane do nowego centrum w nowym regionie, wraz z urządzeniami. Aby uzyskać więcej informacji na temat wykonywania operacji zbiorczych względem rejestru tożsamości w centrum IoT, zobacz Importowanie i eksportowanie tożsamości urządzeń IoT Hub zbiorczo.