Debugowanie modułów usługi Azure IoT Edge przy użyciu programu Visual Studio Code
Dotyczy: IoT Edge 1.5 IoT Edge 1.4
Ważne
Obsługiwane są wersje usługi IoT Edge 1.5 LTS i IoT Edge 1.4 LTS. Usługa IoT Edge 1.4 LTS kończy się 12 listopada 2024 r. Jeśli korzystasz z wcześniejszej wersji, zobacz aktualizację Azure IoT Edge.
W tym artykule pokazano, jak używać programu Visual Studio Code do debugowania modułów usługi IoT Edge w wielu językach. Na komputerze deweloperów możesz użyć programu Visual Studio Code do dołączania i debugowania modułu w lokalnym lub zdalnym kontenerze modułu.
Ten artykuł zawiera kroki dotyczące dwóch narzędzi deweloperskich usługi IoT Edge.
- Narzędzie wiersza polecenia (CLI) narzędzia deweloperskiego usługi Azure IoT Edge. To narzędzie jest preferowane do programowania.
- Narzędzia usługi Azure IoT Edge dla rozszerzenia programu Visual Studio Code . Rozszerzenie jest w trybie konserwacji.
Użyj przycisku selektora narzędzi na początku tego artykułu, aby wybrać wersję narzędzia.
Program Visual Studio Code obsługuje pisanie modułów usługi IoT Edge w następujących językach programowania:
- C# i C# Azure Functions
- C
- Python
- Node.js
- Java
Usługa Azure IoT Edge obsługuje następujące architektury urządzeń:
- AMD64
- ARM32v7
- ARM64
Aby uzyskać więcej informacji na temat obsługiwanych systemów operacyjnych, języków i architektur, zobacz Obsługa języka i architektury.
Korzystając z rozszerzenia usługi IoT Edge programu Visual Studio Code, możesz również uruchomić i debugować kod modułu w symulatorze usługi IoT Edge.
Można również użyć komputera deweloperskiego z systemem Windows i modułów debugowania w kontenerze systemu Linux przy użyciu usługi IoT Edge dla systemu Linux w systemie Windows (EFLOW). Aby uzyskać więcej informacji na temat używania platformy EFLOW do tworzenia modułów, zobacz Samouczek: tworzenie modułów usługi IoT Edge z kontenerami systemu Linux przy użyciu usługi IoT Edge dla systemu Linux w systemie Windows.
Jeśli nie znasz możliwości debugowania programu Visual Studio Code, zobacz Debugowanie programu Visual Studio Code.
Wymagania wstępne
Jako maszynę dewelopera można użyć komputera lub maszyny wirtualnej z systemem Windows, macOS lub Linux. Na komputerach z systemem Windows można opracowywać moduły systemu Windows lub Linux. Aby opracować moduły systemu Linux, użyj komputera z systemem Windows spełniającego wymagania dotyczące programu Docker Desktop.
Aby zainstalować wymagane narzędzia do programowania i debugowania, ukończ samouczek Tworzenie modułów usługi Azure IoT Edge przy użyciu programu Visual Studio Code .
Instalacja programu Visual Studio Code
Dodaj następujące rozszerzenia:
- Rozszerzenie usługi Azure IoT Edge . Rozszerzenia usługi Azure IoT Edge dla programu Visual Studio Code są w trybie konserwacji.
- Rozszerzenie usługi Azure IoT Hub .
Do debugowania modułu na urządzeniu potrzebne są następujące elementy:
- Aktywna usługa IoT Hub z co najmniej jednym urządzeniem usługi IoT Edge.
- Fizyczne urządzenie usługi IoT Edge lub urządzenie wirtualne. Aby utworzyć urządzenie wirtualne na platformie Azure, wykonaj kroki opisane w przewodniku Szybki start dla systemu Linux.
- Niestandardowy moduł usługi IoT Edge. Aby utworzyć moduł niestandardowy, wykonaj kroki opisane w samouczku Tworzenie modułów usługi Azure IoT Edge przy użyciu programu Visual Studio Code .
Debugowanie bez kontenera przy użyciu symulatora usługi IoT Edge
Symulator usługi IoT Edge to narzędzie, które działa na komputerze dewelopera i symuluje zachowanie jednego urządzenia usługi IoT Edge. Za pomocą symulatora usługi IoT Edge można opracowywać i testować moduły usługi IoT Edge bez fizycznego urządzenia lub pełnego środowiska uruchomieniowego urządzenia usługi IoT Edge.
W poniższych krokach debugowania założono, że utworzono już moduł niestandardowy. Jeśli nie utworzono modułu niestandardowego, wykonaj kroki opisane w samouczku Tworzenie modułów usługi Azure IoT Edge przy użyciu programu Visual Studio Code .
Debugowanie modułu bez kontenera nie jest dostępne w przypadku korzystania z języka C lub Python.
Debugowanie w trybie dołączania przy użyciu symulatora usługi IoT Edge
Debugowanie w trybie dołączania nie jest obsługiwane w języku C ani Python.
Debugowanie modułu za pomocą środowiska uruchomieniowego usługi IoT Edge
W każdym folderze modułu istnieje kilka plików platformy Docker dla różnych typów kontenerów. Użyj dowolnego pliku kończącego się rozszerzeniem .debug , aby skompilować moduł na potrzeby testowania.
Podczas debugowania modułów przy użyciu tej metody moduły są uruchamiane na podstawie środowiska uruchomieniowego usługi IoT Edge. Urządzenie usługi IoT Edge i program Visual Studio Code mogą znajdować się na tej samej maszynie lub zazwyczaj na maszynie deweloperów, a środowisko uruchomieniowe i moduły usługi IoT Edge działają na innej maszynie fizycznej. Aby debugować z poziomu programu Visual Studio Code, musisz:
- Skonfiguruj urządzenie usługi IoT Edge, skompiluj moduły usługi IoT Edge przy użyciu pliku .debug dockerfile, a następnie wdróż je na urządzeniu usługi IoT Edge.
- Zaktualizuj program
launch.json
Visual Studio Code do procesu w kontenerze na maszynie zdalnej. Ten plik można znaleźć w.vscode
folderze w obszarze roboczym i jest aktualizowany za każdym razem, gdy dodasz nowy moduł obsługujący debugowanie. - Użyj zdalnego debugowania SSH, aby dołączyć do kontenera na maszynie zdalnej.
Kompilowanie i wdrażanie modułu na urządzeniu usługi IoT Edge
W programie Visual Studio Code otwórz plik manifestu wdrożenia deployment.debug.template.json . Manifest wdrożenia opisuje moduły do skonfigurowania na docelowym urządzeniu usługi IoT Edge. Przed wdrożeniem należy zaktualizować poświadczenia usługi Azure Container Registry i obrazy modułów przy użyciu odpowiednich createOptions
wartości. Aby uzyskać więcej informacji na temat wartości createOption, zobacz How to configure container create options for IoT Edge modules (Jak skonfigurować opcje tworzenia kontenera dla modułów usługi IoT Edge).
Jeśli używasz usługi Azure Container Registry do przechowywania obrazu modułu, dodaj poświadczenia do sekcji edgeAgent>settings>registryCredentials w deployment.debug.template.json. Zastąp ciąg myacr własną nazwą rejestru w obu miejscach i podaj hasło oraz adres serwera logowania. Na przykład:
"modulesContent": { "$edgeAgent": { "properties.desired": { "schemaVersion": "1.1", "runtime": { "type": "docker", "settings": { "minDockerVersion": "v1.25", "loggingOptions": "", "registryCredentials": { "myacr": { "username": "myacr", "password": "<your_azure_container_registry_password>", "address": "myacr.azurecr.io" } } } }, ...
Dodaj lub zastąp następującą zawartość ciągową wartością createOptions dla każdego systemu (edgeHub i edgeAgent) oraz modułu niestandardowego (na przykład filtermodule). W razie potrzeby zmień wartości.
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
Na przykład konfiguracja modułu filtermodule powinna być podobna do następującej:
"filtermodule": { "version": "1.0", "type": "docker", "status": "running", "restartPolicy": "always", "settings": { "image": "myacr.azurecr.io/filtermodule:0.0.1-amd64", "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}" }
- W palecie poleceń programu Visual Studio Code uruchom polecenie Azure IoT Edge: kompilowanie i wypychanie rozwiązania usługi IoT Edge.
deployment.debug.template.json
Wybierz plik rozwiązania.- W sekcji Urządzenia usługi Azure IoT Hub>w widoku Eksploratora programu Visual Studio Code kliknij prawym przyciskiem myszy nazwę urządzenia usługi IoT Edge dla wdrożenia, a następnie wybierz polecenie Utwórz wdrożenie dla pojedynczego urządzenia.
Napiwek
Aby potwierdzić, że wybrane urządzenie jest urządzeniem usługi IoT Edge, wybierz je, aby rozwinąć listę modułów i zweryfikować obecność $edgeHub i $edgeAgent. Każde urządzenie usługi IoT Edge zawiera te dwa moduły.
- Przejdź do folderu konfiguracji rozwiązania, wybierz
deployment.debug.amd64.json
plik, a następnie wybierz pozycję Wybierz manifest wdrożenia usługi Edge.
Stan kontenera można sprawdzić z urządzenia lub maszyny wirtualnej, uruchamiając docker ps
polecenie w terminalu. Po uruchomieniu polecenia powinien zostać wyświetlony kontener. Jeśli środowisko uruchomieniowe programu Visual Studio Code i usługi IoT Edge jest uruchomione na tej samej maszynie, możesz również sprawdzić stan w widoku platformy Docker programu Visual Studio Code.
Ważne
Jeśli używasz rejestru prywatnego, takiego jak Usługa Azure Container Registry dla obrazów, może być konieczne uwierzytelnienie w celu wypychania obrazów. Użyj polecenia docker login <Azure Container Registry login server>
lub az acr login --name <Azure Container Registry name>
, aby się uwierzytelnić.
Logowanie do platformy Docker
Podaj poświadczenia rejestru kontenerów do platformy Docker, aby umożliwić wypchnięcie obrazu kontenera do magazynu w rejestrze.
Zaloguj się do platformy Docker przy użyciu poświadczeń usługi Azure Container Registry zapisanych po utworzeniu rejestru.
docker login -u <Azure Container Registry username> -p <Azure Container Registry password> <Azure Container Registry login server>
Może zostać wyświetlone ostrzeżenie o zabezpieczeniach, które zaleca użycie polecenia
--password-stdin
. Chociaż jest to zalecane najlepsze rozwiązanie dla scenariuszy produkcyjnych, wykracza poza zakres tego samouczka. Aby uzyskać więcej informacji, zobacz dokumentację logowania platformy Docker.Zaloguj się do usługi Azure Container Registry. Aby użyć polecenia , może być konieczne zainstalowanie interfejsu wiersza polecenia platformy
az
Azure. To polecenie prosi o podanie nazwy użytkownika i hasła znalezionego w rejestrze kontenerów w obszarze Ustawienia>Klucze dostępu.az acr login -n <Azure Container Registry name>
Napiwek
Jeśli w dowolnym momencie tego samouczka wylogujesz się, powtórz kroki logowania do platformy Docker i usługi Azure Container Registry, aby kontynuować.
Kompilowanie obrazu platformy Docker modułu
Użyj pliku Dockerfile modułu, aby skompilować obraz platformy Docker modułu.
docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>"
Aby na przykład skompilować obraz dla rejestru lokalnego lub usługi Azure Container Registry, użyj następujących poleceń:
# Build the image for the local registry
docker build --rm -f "./modules/filtermodule/Dockerfile.amd64.debug" -t localhost:5000/filtermodule:0.0.1-amd64 "./modules/filtermodule"
# Or build the image for an Azure Container Registry
docker build --rm -f "./modules/filtermodule/Dockerfile.amd64.debug" -t myacr.azurecr.io/filtermodule:0.0.1-amd64 "./modules/filtermodule"
Obraz platformy Docker modułu wypychania
Wypchnij obraz modułu do rejestru lokalnego lub rejestru kontenerów.
docker push <ImageName>
Na przykład:
# Push the Docker image to the local registry
docker push localhost:5000/filtermodule:0.0.1-amd64
# Or push the Docker image to an Azure Container Registry
az acr login --name myacr
docker push myacr.azurecr.io/filtermodule:0.0.1-amd64
Wdrażanie modułu na urządzeniu usługi IoT Edge
Użyj polecenia set-modules interfejsu wiersza polecenia platformy Azure usługi IoT Edge, aby wdrożyć moduły w usłudze Azure IoT Hub. Aby na przykład wdrożyć moduły zdefiniowane w pliku deployment.debug.template.json w usłudze IoT Hub my-iot-hub dla urządzenia usługi IoT Edge my-device, użyj następującego polecenia:
az iot edge set-modules --hub-name my-iot-hub --device-id my-device --content ./deployment.debug.template.json --login "HostName=my-iot-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=<SharedAccessKey>"
Napiwek
Klucz dostępu współdzielonego usługi IoT Hub można znaleźć w witrynie Azure Portal w ustawieniach>zabezpieczeń usługi IoT Hub >Zasady dostępu>współdzielonego iothubowner.
Debugowanie modułu
Aby debugować moduły na urządzeniu zdalnym, możesz użyć zdalnego debugowania SSH w programie Visual Studio Code.
Aby włączyć zdalne debugowanie programu Visual Studio Code, zainstaluj rozszerzenie Programowanie zdalne. Aby uzyskać więcej informacji na temat zdalnego debugowania programu Visual Studio Code, zobacz Programowanie zdalne programu Visual Studio Code.
Aby uzyskać szczegółowe informacje na temat korzystania z zdalnego debugowania SSH w programie Visual Studio Code, zobacz Programowanie zdalne przy użyciu protokołu SSH
W widoku Debugowanie programu Visual Studio Code wybierz plik konfiguracji debugowania dla modułu. Domyślnie plik .debuguj plik Dockerfile, ustawienia kontenera createOptions
modułu i plik używa hosta lokalnegolaunch.json
.
Wybierz pozycję Rozpocznij debugowanie lub wybierz pozycję F5. Wybierz proces, do których chcesz dołączyć. W widoku Debugowanie programu Visual Studio Code są widoczne zmienne w panelu po lewej stronie.
Debugowanie przy użyciu zdalnego protokołu SSH platformy Docker
Aparaty Platformy Docker i Moby obsługują połączenia SSH z kontenerami, co umożliwia debugowanie w programie Visual Studio Code połączonym z urządzeniem zdalnym. Przed użyciem tej funkcji należy spełnić następujące wymagania wstępne.
Wymagania wstępne debugowania zdalnego protokołu SSH mogą być różne w zależności od używanego języka. W poniższych sekcjach opisano konfigurację platformy .NET. Aby uzyskać informacje na temat innych języków, zobacz Remote Development using SSH (Programowanie zdalne przy użyciu protokołu SSH ), aby zapoznać się z omówieniem. Szczegółowe informacje na temat konfigurowania zdalnego debugowania znajdują się w sekcjach debugowania dla każdego języka w dokumentacji programu Visual Studio Code.
Konfigurowanie tunelowania SSH platformy Docker
Wykonaj kroki opisane w temacie Tunelowanie SSH platformy Docker, aby skonfigurować tunelowanie SSH na komputerze dewelopera. Tunelowanie SSH wymaga uwierzytelniania pary kluczy publicznych/prywatnych i kontekstu platformy Docker definiującego punkt końcowy urządzenia zdalnego.
Nawiązywanie połączenia z platformą Docker wymaga uprawnień na poziomie głównym. Wykonaj kroki opisane w temacie Zarządzanie platformą Docker jako użytkownik niebędący użytkownikiem głównym, aby zezwolić na połączenie z demonem platformy Docker na urządzeniu zdalnym. Po zakończeniu debugowania możesz usunąć użytkownika z grupy platformy Docker.
W programie Visual Studio Code użyj palety poleceń (Ctrl+Shift+P), aby wydać kontekst platformy Docker: użyj polecenia, aby aktywować kontekst platformy Docker wskazujący komputer zdalny. To polecenie powoduje, że zarówno program Visual Studio Code, jak i interfejs wiersza polecenia platformy Docker używają kontekstu maszyny zdalnej.
Napiwek
Wszystkie polecenia platformy Docker używają bieżącego kontekstu. Pamiętaj, aby zmienić kontekst z powrotem na domyślny po zakończeniu debugowania.
Aby sprawdzić, czy zdalny kontekst platformy Docker jest aktywny, wyświetl listę uruchomionych kontenerów na urządzeniu zdalnym:
docker ps
Dane wyjściowe powinny zawierać listę kontenerów uruchomionych na urządzeniu zdalnym w podobny sposób:
PS C:\> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a317b8058786 myacr.azurecr.io/filtermodule:0.0.1-amd64 "dotnet filtermodule…" 24 hours ago Up 6 minutes filtermodule d4d949f8dfb9 mcr.microsoft.com/azureiotedge-hub:1.5 "/bin/sh -c 'echo \"$…" 24 hours ago Up 6 minutes 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:5671->5671/tcp, :::5671->5671/tcp, 0.0.0.0:8883->8883/tcp, :::8883->8883/tcp, 1883/tcp edgeHub 1f0da9cfe8e8 mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0 "/bin/sh -c 'echo \"$…" 24 hours ago Up 6 minutes tempSensor 66078969d843 mcr.microsoft.com/azureiotedge-agent:1.5 "/bin/sh -c 'exec /a…" 24 hours ago Up 6 minutes edgeAgent
W katalogu .vscode dodaj nową konfigurację, aby launch.json, otwierając plik w programie Visual Studio Code. Wybierz pozycję Dodaj konfigurację , a następnie wybierz pasujący szablon dołączania zdalnego dla modułu. Na przykład następująca konfiguracja dotyczy platformy .NET Core. Zmień wartość parametru -H w potoku PipeArgs na nazwę DNS lub adres IP urządzenia.
"configurations": [ { "name": "Remote Debug IoT Edge Module (.NET Core)", "type": "coreclr", "request": "attach", "processId": "${command:pickRemoteProcess}", "pipeTransport": { "pipeProgram": "docker", "pipeArgs": [ "-H", "ssh://user@my-device-vm.eastus.cloudapp.azure.com:22", "exec", "-i", "filtermodule", "sh", "-c" ], "debuggerPath": "~/vsdbg/vsdbg", "pipeCwd": "${workspaceFolder}", "quoteArgs": true }, "sourceFileMap": { "/app": "${workspaceFolder}/modules/filtermodule" }, "justMyCode": true },
Zdalne debugowanie modułu
W widoku Debugowanie programu Visual Studio Code wybierz konfigurację debugowania zdalnego debugowania Moduł usługi IoT Edge (.NET Core).
Wybierz pozycję Rozpocznij debugowanie lub wybierz pozycję F5. Wybierz proces, do których chcesz dołączyć.
W widoku Debugowanie programu Visual Studio Code zobaczysz zmienne w panelu po lewej stronie.
W programie Visual Studio Code ustaw punkty przerwania w module niestandardowym.
Po osiągnięciu punktu przerwania można sprawdzić zmienne, przejść przez kod i debugować moduł.
Uwaga
W poprzednim przykładzie pokazano, jak debugować moduły usługi IoT Edge w kontenerach zdalnych. W przykładzie dodano zdalny kontekst platformy Docker i zmiany uprawnień platformy Docker na urządzeniu zdalnym. Po zakończeniu debugowania modułów ustaw kontekst platformy Docker na domyślne i usuń uprawnienia z konta użytkownika.
Zobacz ten wpis w blogu dla deweloperów IoT, aby zapoznać się z przykładem użycia urządzenia Raspberry Pi.
Następne kroki
Po utworzeniu modułu dowiedz się, jak wdrożyć moduły usługi Azure IoT Edge.
Aby opracowywać moduły dla urządzeń usługi IoT Edge, zapoznaj się z zestawami SDK usługi Azure IoT Hub i korzystaj z nich.