Samouczek: aprowizuj opóźnienie geograficzne
W tym samouczku pokazano, jak bezpiecznie aprowizować wiele symulowanych urządzeń kluczy symetrycznych do grupy usługi IoT Hubs przy użyciu zasad alokacji. Usługa IoT Hub Device Provisioning Service (DPS) obsługuje różne scenariusze alokacji za pomocą wbudowanych zasad alokacji i obsługi niestandardowych zasad alokacji.
Aprowizowanie dla opóźnienia geolokalizacji/geograficznego jest typowym scenariuszem alokacji. W miarę jak urządzenie przechodzi między lokalizacjami, opóźnienie sieci jest ulepszane przez aprowizowania urządzenia w centrum IoT, które znajduje się najbliżej każdej lokalizacji. W tym scenariuszu dla rejestracji wybrano grupę centrów IoT, które obejmują wiele regionów. Dla tych rejestracji wybrano wbudowane zasady alokacji najniższego opóźnienia . Te zasady powodują, że usługa Device Provisioning Service ocenia opóźnienie urządzenia i określa zamknięcie centrum IoT hub poza grupą centrów IoT.
W tym samouczku użyto przykładu symulowanego urządzenia z zestawu SDK języka C usługi Azure IoT, aby zademonstrować sposób aprowizacji urządzeń w różnych regionach. W tym samouczku wykonasz następujące kroki:
- Użyj interfejsu wiersza polecenia platformy Azure, aby utworzyć dwa regionalne centra IoT (Zachodnie stany USA 2 i Wschodnie stany USA)
- Tworzenie rejestracji, która aprowizuje urządzenia na podstawie geolokalizacji (najmniejsze opóźnienie)
- Użyj interfejsu wiersza polecenia platformy Azure, aby utworzyć dwie regionalne maszyny wirtualne z systemem Linux do działania jako urządzenia w tych samych regionach (Zachodnie stany USA 2 i Wschodnie stany USA)
- Konfigurowanie środowiska deweloperskiego dla zestawu AZURE IoT C SDK na obu maszynach wirtualnych z systemem Linux
- Zasymuluj urządzenia i sprawdź, czy są one aprowidowane w centrum IoT w najbliższym regionie.
Ważne
Niektóre regiony mogą od czasu do czasu wymuszać ograniczenia tworzenia maszyn wirtualnych. W momencie pisania tego przewodnika regiony westus2 i eastus zezwoliły na tworzenie maszyn wirtualnych. Jeśli nie możesz utworzyć w jednym z tych regionów, możesz wypróbować inny region. Aby dowiedzieć się więcej na temat wybierania regionów geograficznych platformy Azure podczas tworzenia maszyn wirtualnych, zobacz Regiony maszyn wirtualnych na platformie Azure
Wymagania wstępne
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Wykonaj kroki opisane w temacie Konfigurowanie usługi IoT Hub Device Provisioning Przy użyciu witryny Azure Portal.
Użyj środowiska powłoki Bash w usłudze Azure Cloud Shell. Aby uzyskać więcej informacji, zobacz Szybki start dotyczący powłoki Bash w usłudze Azure Cloud Shell.
Jeśli wolisz uruchamiać polecenia referencyjne interfejsu wiersza polecenia lokalnie, zainstaluj interfejs wiersza polecenia platformy Azure. Jeśli korzystasz z systemu Windows lub macOS, rozważ uruchomienie interfejsu wiersza polecenia platformy Azure w kontenerze Docker. Aby uzyskać więcej informacji, zobacz Jak uruchomić interfejs wiersza polecenia platformy Azure w kontenerze platformy Docker.
Jeśli korzystasz z instalacji lokalnej, zaloguj się do interfejsu wiersza polecenia platformy Azure za pomocą polecenia az login. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Aby uzyskać inne opcje logowania, zobacz Logowanie się przy użyciu interfejsu wiersza polecenia platformy Azure.
Po wyświetleniu monitu zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Korzystanie z rozszerzeń w interfejsie wiersza polecenia platformy Azure.
Uruchom polecenie az version, aby znaleźć zainstalowane wersje i biblioteki zależne. Aby uaktualnić do najnowszej wersji, uruchom polecenie az upgrade.
Tworzenie dwóch regionalnych centrów IoT
W tej sekcji utworzysz grupę zasobów platformy Azure i dwa nowe regionalne zasoby usługi IoT Hub. Jedno centrum IoT będzie znajdować się w regionie Zachodnie stany USA 2 , a drugi będzie przeznaczony dla regionu Wschodnie stany USA .
Ważne
Zaleca się użycie tej samej grupy zasobów dla wszystkich zasobów utworzonych w tym samouczku. Ułatwi to czyszczenie po zakończeniu pracy.
W usłudze Azure Cloud Shell utwórz grupę zasobów za pomocą następującego polecenia az group create :
az group create --name contoso-us-resource-group --location eastus
Utwórz centrum IoT Hub w lokalizacji eastus i dodaj je do utworzonej grupy zasobów za pomocą następującego polecenia az iot hub create (zastąp
{unique-hub-name}
element własną unikatową nazwą):az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location eastus --sku S1
Wykonanie tego polecenia może potrwać kilka minut.
Teraz utwórz centrum IoT w lokalizacji westus2 i dodaj je do utworzonej grupy zasobów za pomocą następującego polecenia az iot hub create (zastąp
{unique-hub-name}
ciąg własną unikatową nazwą):az iot hub create --name {unique-hub-name} --resource-group contoso-us-resource-group --location westus2 --sku S1
Wykonanie tego polecenia może potrwać kilka minut.
Tworzenie rejestracji na potrzeby opóźnienia geograficznego
W tej sekcji utworzysz nową grupę rejestracji dla urządzeń.
Dla uproszczenia w tym samouczku używane jest zaświadczanie klucza symetrycznego z rejestracją. Aby uzyskać bezpieczniejsze rozwiązanie, rozważ użycie zaświadczania certyfikatów X.509 z łańcuchem zaufania.
Zaloguj się do witryny Azure Portal i przejdź do wystąpienia usługi Device Provisioning Service.
Wybierz pozycję Zarządzaj rejestracjami w sekcji Ustawienia w menu nawigacji.
Wybierz pozycję Dodaj grupę rejestracji.
Na karcie Rejestracja i aprowizacja na stronie Dodawanie grupy rejestracji podaj następujące informacje, aby skonfigurować szczegóły grupy rejestracji:
Pole opis Zaświadczanie Wybierz pozycję Klucz symetryczny jako mechanizm zaświadczania. Ustawienia klucza symetrycznego Zaznacz pole Automatycznie Generuj klucze symetryczne. Nazwa grupy Nadaj grupie nazwę contoso-us-devices lub podaj własną nazwę grupy. Nazwa grupy rejestracji jest ciągiem bez uwzględniania wielkości liter (do 128 znaków) znaków alfanumerycznych oraz znakami specjalnymi: '-'
, ,'.'
'_'
,':'
. Ostatni znak musi być alfanumeryczny lub kreskowy ('-'
).Wybierz pozycję Dalej: centra IoT.
Wykonaj następujące kroki, aby dodać dwa centra IoT do grupy rejestracji:
Na karcie Centra IoT na stronie Dodawanie grupy rejestracji wybierz pozycję Dodaj link do centrum IoT Hub w sekcji Docelowe centra IoT.
Na stronie Dodawanie linku do centrum IoT wybierz centrum IoT Utworzone w regionie eastus i przypisz do niego dostęp iothubowner.
Wybierz pozycję Zapisz.
Ponownie wybierz pozycję Dodaj link do centrum IoT Hub i wykonaj te same kroki, aby dodać centrum IoT utworzone w regionie westus2 .
W menu rozwijanym Target IoT Hubs (Docelowe centra IoT Hubs) wybierz oba centra IoT.
W obszarze Zasady alokacji wybierz pozycję Najniższe opóźnienie.
Wybierz pozycję Przejrzyj i utwórz.
Na karcie Przeglądanie i tworzenie sprawdź wszystkie wartości, a następnie wybierz pozycję Utwórz.
Po utworzeniu grupy rejestracji wybierz jej nazwę contoso-us-devices z listy grup rejestracji.
Skopiuj klucz podstawowy. Ten klucz będzie później używany do generowania unikatowych kluczy urządzeń dla obu symulowanych urządzeń.
Tworzenie regionalnych maszyn wirtualnych z systemem Linux
W tej sekcji utworzysz dwie regionalne maszyny wirtualne z systemem Linux, jedną w regionie Zachodnie stany USA 2 i jedną w regionie Wschodnie stany USA 2. Te maszyny wirtualne uruchamiają przykład symulacji urządzenia z każdego regionu, aby zademonstrować aprowizację urządzeń z obu regionów.
Aby ułatwić czyszczenie, dodaj te maszyny wirtualne do tej samej grupy zasobów zawierającej utworzone centra IoT contoso-us-resource-group.
W usłudze Azure Cloud Shell uruchom następujące polecenie, aby utworzyć maszynę wirtualną regionu Wschodnie stany USA po wprowadzeniu następujących zmian parametrów w poleceniu:
--name: wprowadź unikatową nazwę maszyny wirtualnej urządzenia regionalnego Wschodnie stany USA .
--admin-username: użyj własnej nazwy użytkownika administratora.
--admin-password: użyj własnego hasła administratora.
az vm create \ --resource-group contoso-us-resource-group \ --name ContosoSimDeviceEast \ --location eastus \ --image Canonical:UbuntuServer:18.04-LTS:18.04.201809110 \ --admin-username contosoadmin \ --admin-password myContosoPassword2018 \ --authentication-type password --public-ip-sku Standard
Wykonanie tego polecenia potrwa kilka minut.
Po zakończeniu polecenia skopiuj wartość publicIpAddress dla maszyny wirtualnej regionu Wschodnie stany USA.
W usłudze Azure Cloud Shell uruchom polecenie , aby utworzyć maszynę wirtualną regionu Zachodnie stany USA 2 po wprowadzeniu następujących zmian parametrów w poleceniu:
--name: wprowadź unikatową nazwę maszyny wirtualnej urządzenia regionalnego Zachodnie stany USA 2 .
--admin-username: użyj własnej nazwy użytkownika administratora.
--admin-password: użyj własnego hasła administratora.
az vm create \ --resource-group contoso-us-resource-group \ --name ContosoSimDeviceWest2 \ --location westus2 \ --image Canonical:UbuntuServer:18.04-LTS:18.04.201809110 \ --admin-username contosoadmin \ --admin-password myContosoPassword2018 \ --authentication-type password --public-ip-sku Standard
Wykonanie tego polecenia potrwa kilka minut.
Po zakończeniu polecenia skopiuj wartość publicIpAddress dla maszyny wirtualnej regionu Zachodnie stany USA 2.
Otwórz dwie powłoki wiersza polecenia.
Połącz się z jedną z regionalnych maszyn wirtualnych w każdej powłoce przy użyciu protokołu SSH.
Przekaż nazwę użytkownika administratora i publiczny adres IP skopiowany jako parametry do protokołu SSH. Wprowadź hasło administratora po wyświetleniu monitu.
ssh contosoadmin@1.2.3.4 contosoadmin@ContosoSimDeviceEast:~$
ssh contosoadmin@5.6.7.8 contosoadmin@ContosoSimDeviceWest:~$
Przygotowywanie środowiska deweloperskiego zestawu AZURE IoT C SDK
W tej sekcji sklonujesz zestaw SDK języka C usługi Azure IoT na każdej maszynie wirtualnej. Zestaw SDK zawiera przykład, który symuluje aprowizację urządzenia z każdego regionu.
Dla każdej maszyny wirtualnej:
Zainstaluj narzędzia CMake, g++, gcc i Git przy użyciu następujących poleceń:
sudo apt-get update sudo apt-get install cmake build-essential libssl-dev libcurl4-openssl-dev uuid-dev git-all
Znajdź i skopiuj nazwę tagu dla najnowszej wersji zestawu SDK.
Sklonuj zestaw SDK urządzenia usługi Azure IoT dla języka C na obu maszynach wirtualnych. Użyj tagu znalezionego w poprzednim kroku jako wartości parametru
-b
, na przykład:lts_01_2023
.git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git cd azure-iot-sdk-c git submodule update --init
Należy się spodziewać, że ukończenie operacji potrwa kilka minut.
Utwórz nowy folder cmake wewnątrz repozytorium i przejdź do tego folderu.
mkdir ~/azure-iot-sdk-c/cmake cd ~/azure-iot-sdk-c/cmake
Uruchom następujące polecenie, które kompiluje wersję zestawu SDK specyficzną dla platformy klienta programowania:
cmake -Dhsm_type_symm_key:BOOL=ON -Duse_prov_client:BOOL=ON ..
Gdy kompilacja zakończy się powodzeniem, kilka ostatnich wierszy danych wyjściowych będzie wyglądać podobnie do następujących danych wyjściowych:
-- IoT Client SDK Version = 1.7.0 -- Provisioning SDK Version = 1.7.0 -- Looking for include file stdint.h -- Looking for include file stdint.h - found -- Looking for include file stdbool.h -- Looking for include file stdbool.h - found -- target architecture: x86_64 -- Performing Test CXX_FLAG_CXX11 -- Performing Test CXX_FLAG_CXX11 - Success -- Found OpenSSL: /usr/lib/x86_64-linux-gnu/libcrypto.so (found version "1.1.1") -- Found CURL: /usr/lib/x86_64-linux-gnu/libcurl.so (found version "7.58.0") -- Found CURL: /usr/lib/x86_64-linux-gnu/libcurl.so -- target architecture: x86_64 -- iothub architecture: x86_64 -- Configuring done -- Generating done -- Build files have been written to: /home/contosoadmin/azure-iot-sdk-c/azure-iot-sdk-c
Uzyskiwanie unikatowych kluczy urządzeń
W przypadku korzystania z zaświadczania klucza symetrycznego z rejestracjami grup nie należy używać kluczy grupy rejestracji bezpośrednio. Zamiast tego należy utworzyć unikatowy klucz z klucza grupy rejestracji dla każdego urządzenia.
W tej części samouczka wygenerujesz klucz urządzenia z klucza głównego grupy w celu obliczenia HMAC-SHA256 unikatowego identyfikatora rejestracji urządzenia. Wynik zostanie następnie przekonwertowany na format Base64.
Ważne
Nie dołączaj klucza głównego grupy do kodu urządzenia.
W przypadku urządzeń eastus i westus2:
Wygeneruj unikatowy klucz przy użyciu polecenia openssl. Użyjesz następującego skryptu powłoki Bash (zastąp ciąg kluczem podstawowym grupy rejestracji skopiowanymi wcześniej i zastąp
{contoso-simdevice}
{primary-key}
własnym unikatowym identyfikatorem rejestracji dla każdego urządzenia. Identyfikator rejestracji jest ciągiem bez uwzględniania wielkości liter (do 128 znaków) znaków alfanumerycznych oraz znakami specjalnymi:'-'
, ,'.'
'_'
,':'
. Ostatni znak musi być alfanumeryczny lub kreskowy ('-'
).KEY={primary-key} REG_ID={contoso-simdevice} keybytes=$(echo $KEY | base64 --decode | xxd -p -u -c 1000) echo -n $REG_ID | openssl sha256 -mac HMAC -macopt hexkey:$keybytes -binary | base64
Skrypt wyświetli dane wyjściowe podobne do następującego klucza:
p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=
Teraz każde urządzenie ma własny klucz urządzenia pochodnego i unikatowy identyfikator rejestracji w celu wykonania zaświadczania klucza symetrycznego z grupą rejestracji podczas procesu aprowizacji.
Symulowanie urządzeń z każdego regionu
W tej sekcji zaktualizujesz przykład aprowizacji w zestawie SDK języka C usługi Azure IoT dla obu regionalnych maszyn wirtualnych.
Przykładowy kod symuluje sekwencję rozruchu urządzenia, która wysyła żądanie aprowizacji do wystąpienia usługi Device Provisioning Service. Sekwencja rozruchowa powoduje rozpoznawanie i przypisywanie urządzenia do centrum IoT, które jest najbliżej na podstawie opóźnienia.
W witrynie Azure Portal wybierz kartę Przegląd dla usługi Device Provisioning Service i zanotuj wartość Zakres identyfikatora.
Na obu maszynach wirtualnych otwórz plik ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c w celu edycji.
vi ~/azure-iot-sdk-c/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample.c
Na obu maszynach wirtualnych znajdź stałą
id_scope
i zastąp wartość wartością Zakres identyfikatora skopiowaną wcześniej.static const char* id_scope = "0ne00002193";
Na obu maszynach wirtualnych znajdź definicję
main()
funkcji w tym samym pliku. Upewnij się, że zmiennahsm_type
jest ustawiona naSECURE_DEVICE_TYPE_SYMMETRIC_KEY
wartość , jak pokazano poniżej, aby dopasować metodę zaświadczania grupy rejestracji.Zapisz zmiany w plikach na obu maszynach wirtualnych.
SECURE_DEVICE_TYPE hsm_type; //hsm_type = SECURE_DEVICE_TYPE_TPM; //hsm_type = SECURE_DEVICE_TYPE_X509; hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
Na obu maszynach wirtualnych znajdź wywołanie
prov_dev_set_symmetric_key_info()
metody w pliku prov_dev_client_sample.c , które zostało skomentowane.// Set the symmetric key if using they auth type //prov_dev_set_symmetric_key_info("<symm_registration_id>", "<symmetric_Key>");
Usuń komentarz z wywołań funkcji i zastąp wartości symboli zastępczych (w tym nawiasy kątowe) unikatowymi identyfikatorami rejestracji i pochodnymi kluczami urządzeń dla każdego urządzenia utworzonego w poprzedniej sekcji. Poniżej przedstawiono przykłady kluczy. Użyj wygenerowanych wcześniej kluczy.
Wschodnie stany USA:
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("contoso-simdevice-east", "p3w2DQr9WqEGBLUSlFi1jPQ7UWQL4siAGy75HFTFbf8=");
Zachodnie stany USA:
// Set the symmetric key if using they auth type prov_dev_set_symmetric_key_info("contoso-simdevice-west", "J5n4NY2GiBYy7Mp4lDDa5CbEe6zDU/c62rhjCuFWxnc=");
Na obu maszynach wirtualnych zapisz plik.
Na obu maszynach wirtualnych przejdź do przykładowego folderu pokazanego poniżej i skompiluj przykład.
cd ~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/ cmake --build . --target prov_dev_client_sample --config Debug
Po pomyślnym zakończeniu kompilacji uruchom prov_dev_client_sample.exe na obu maszynach wirtualnych, aby symulować urządzenie z każdego regionu. Zwróć uwagę, że każde urządzenie jest przydzielane do centrum IoT w najbliższej okolicy symulowanego urządzenia.
Uruchom symulację:
~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample/prov_dev_client_sample
Przykładowe dane wyjściowe z maszyny wirtualnej Wschodnie stany USA:
contosoadmin@ContosoSimDeviceEast:~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample$ ./prov_dev_client_sample Provisioning API Version: 1.2.9 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-east-hub.azure-devices.net, deviceId: contoso-simdevice-east Press enter key to exit:
Przykładowe dane wyjściowe z maszyny wirtualnej Zachodnie stany USA:
contosoadmin@ContosoSimDeviceWest:~/azure-iot-sdk-c/cmake/provisioning_client/samples/prov_dev_client_sample$ ./prov_dev_client_sample Provisioning API Version: 1.2.9 Registering Device Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING Registration Information received from service: contoso-west-hub.azure-devices.net, deviceId: contoso-simdevice-west Press enter key to exit:
Czyszczenie zasobów
Jeśli planujesz kontynuować pracę z zasobami utworzonymi w tym samouczku, możesz je pozostawić. W przeciwnym razie wykonaj następujące kroki, aby usunąć wszystkie zasoby utworzone w tym samouczku, aby uniknąć niepotrzebnych opłat.
W poniższych krokach przyjęto założenie, że wszystkie zasoby utworzone w tym samouczku zostały utworzone zgodnie z instrukcjami w tej samej grupie zasobów o nazwie contoso-us-resource-group.
Ważne
Usunięcie grupy zasobów jest nieodwracalne. Grupa zasobów oraz wszystkie zawarte w niej zasoby zostaną trwale usunięte. Uważaj, aby nie usunąć przypadkowo niewłaściwych zasobów lub niewłaściwej grupy zasobów. Jeśli usługa IoT Hub została utworzona wewnątrz istniejącej grupy zasobów zawierającej zasoby, które chcesz zachować, zamiast usuwać całą grupę zasobów, usuń tylko zasób usługi IoT Hub.
Aby usunąć grupę zasobów według nazwy:
Zaloguj się w witrynie Azure Portal.
Wybierz pozycję Grupy zasobów.
W polu tekstowym Filtruj według nazwy ... wpisz nazwę grupy zasobów zawierającej zasoby contoso-us-resource-group.
Z prawej strony grupy zasobów na liście wyników kliknij pozycję ..., a następnie kliknij pozycję Usuń grupę zasobów.
Zostanie wyświetlony monit o potwierdzenie usunięcia grupy zasobów. Ponownie wpisz nazwę grupy zasobów, aby potwierdzić, a następnie wybierz pozycję Usuń. Po krótkim czasie grupa zasobów i wszystkie zawarte w niej zasoby zostaną usunięte.
Następne kroki
Aby dowiedzieć się więcej o niestandardowych zasadach alokacji, zobacz