Udostępnij za pomocą


Debugowanie modułów usługi Azure IoT Edge przy użyciu programu Visual Studio Code

Dotyczy:Znacznik wyboru usługi IoT Edge 1.5 IoT Edge 1.5

Ważne

Obsługiwana wersja usługi IoT Edge 1.5 LTS. Usługa IoT Edge 1.4 LTS kończy się od 12 listopada 2024 r. Jeśli korzystasz z wcześniejszej wersji, zobacz aktualizację Azure IoT Edge.

W tym artykule wyjaśniono, jak używać programu Visual Studio Code do debugowania modułów usługi IoT Edge w wielu językach. Na komputerze dewelopera użyj programu Visual Studio Code, aby dołączyć i debugować moduł 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.

Wybierz wersję narzędzia przy użyciu przycisku selektora narzędzi na początku tego artykułu.

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 współpracuje z tymi architekturami 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 dopiero zaczynasz debugować możliwości 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 .

Zainstalowanie programu Visual Studio Code.

Dodaj następujące rozszerzenia:

Aby debugować moduł na urządzeniu, potrzebne są następujące elementy:

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 dostępne dla języka C lub Python.

Debugowanie modułu za pomocą środowiska uruchomieniowego usługi IoT Edge

Każdy folder modułu zawiera 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ą działać na tej samej maszynie, ale zazwyczaj program Visual Studio Code działa na maszynie dewelopera, podczas gdy środowisko uruchomieniowe i moduły usługi IoT Edge działają na innej maszynie fizycznej. Aby debugować z poziomu programu Visual Studio Code:

  • 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 zaktualizuj 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).

  1. Jeśli używasz usługi Azure Container Registry do przechowywania obrazu modułu, dodaj poświadczenia do > 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"
              }
            }
          }
        },
    ...
    
  2. 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\"}]}}}"
    }
    
  1. W palecie poleceń programu Visual Studio Code uruchom polecenie Azure IoT Edge: kompilowanie i wypychanie rozwiązania usługi IoT Edge.
  2. deployment.debug.template.json Wybierz plik rozwiązania.
  3. >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.

  4. Przejdź do folderu konfiguracji rozwiązania, wybierz deployment.debug.amd64.json plik, a następnie wybierz pozycję Wybierz manifest wdrożenia usługi Edge.

Sprawdź stan kontenera z urządzenia lub maszyny wirtualnej, uruchamiając docker ps polecenie w terminalu. Po uruchomieniu polecenia powinien zostać wyświetlony kontener. Jeśli program Visual Studio Code i środowisko uruchomieniowe usługi IoT Edge działają na tej samej maszynie, sprawdź 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.

  1. 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.

  2. 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.

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

Debugowanie modułu

Aby debugować moduły na urządzeniu zdalnym, użyj zdalnego debugowania SSH w programie Visual Studio Code.

Włącz zdalne debugowanie programu Visual Studio Code, instalując rozszerzenie Remote Development. 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 F5, a następnie 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ą się różnić 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

  1. 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.

  2. Nawiązywanie połączenia z platformą Docker wymaga uprawnień głównych. 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.

  3. 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 umożliwia używanie kontekstu komputera zdalnego zarówno programu Visual Studio Code, jak i interfejsu wiersza polecenia platformy Docker.

    Napiwek

    Wszystkie polecenia platformy Docker używają bieżącego kontekstu. Pamiętaj, aby zmienić kontekst z powrotem na domyślny po zakończeniu debugowania.

  4. Aby sprawdzić, czy zdalny kontekst platformy Docker jest aktywny, wyświetl listę uruchomionych kontenerów na urządzeniu zdalnym:

    docker ps
    

    Dane wyjściowe zawierają listę kontenerów uruchomionych na urządzeniu zdalnym, podobnie jak poniżej:

    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
    
  5. W katalogu .vscode otwórz launch.json w programie Visual Studio Code i dodaj nową konfigurację. 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

  1. W widoku Debugowanie programu Visual Studio Code wybierz konfigurację debugowania zdalnego debugowania Moduł usługi IoT Edge (.NET Core).

  2. Wybierz pozycję Rozpocznij debugowanie lub wybierz pozycję F5. Wybierz proces, do których chcesz dołączyć.

  3. W widoku Debugowanie programu Visual Studio Code zobaczysz zmienne w panelu po lewej stronie.

  4. W programie Visual Studio Code ustaw punkty przerwania w module niestandardowym.

  5. Po osiągnięciu punktu przerwania można sprawdzić zmienne, przejść przez kod i debugować moduł.

    Zrzut ekranu programu Visual Studio Code dołączony do kontenera platformy Docker na urządzeniu zdalnym wstrzymany w punkcie przerwania.

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, dowiedz się więcej na temat zestawów SDK usługi Azure IoT Hub i korzystania z nich.