Tworzenie i debugowanie modułów usługi Azure IoT Edge przy użyciu programu Visual Studio 2022

Dotyczy:IoT Edge 1.4 checkmark IoT Edge 1.4

Ważne

Azure IoT Edge1.4 jest obsługiwaną wersją. Jeśli korzystasz z wcześniejszej wersji, zobacz aktualizację Azure IoT Edge.

W tym artykule pokazano, jak używać programu Visual Studio 2022 do tworzenia, debugowania i wdrażania niestandardowych modułów usługi Azure IoT Edge. Program Visual Studio 2022 udostępnia szablony dla modułów usługi IoT Edge napisanych w języku C i C#. Obsługiwane architektury urządzeń to Windows x64, Linux x64, ARM32 i ARM64 (wersja zapoznawcza). Aby uzyskać więcej informacji na temat obsługiwanych systemów operacyjnych, języków i architektur, zobacz Obsługa języka i architektury.

Ten artykuł zawiera kroki dotyczące dwóch narzędzi deweloperskich usługi IoT Edge.

  • Interfejs wiersza polecenia (CLI) jest preferowanym narzędziem do programowania.
  • Narzędzia usługi Azure IoT Edge dla rozszerzenia programu Visual Studio . Rozszerzenie jest w trybie konserwacji.

Użyj przycisku selektora narzędzi na początku, aby wybrać opcję narzędzia dla tego artykułu. Oba narzędzia zapewniają następujące korzyści:

  • Tworzenie, edytowanie, kompilowanie, uruchamianie i debugowanie rozwiązań i modułów usługi IoT Edge na lokalnym komputerze deweloperów.
  • Kodowanie modułów usługi Azure IoT w języku C lub C# przy użyciu zalet programowania w programie Visual Studio.
  • Wdróż rozwiązanie usługi IoT Edge na urządzeniu usługi IoT Edge za pośrednictwem usługi Azure IoT Hub.

Wymagania wstępne

W tym artykule założono, że używasz maszyny z systemem Windows jako maszyny programistycznej.

  • Zainstaluj lub zmodyfikuj program Visual Studio 2022 na komputerze deweloperskim. Wybierz opcje Programowanie na platformie Azure i programowanie aplikacji klasycznych przy użyciu obciążeń języka C++.

  • Pobierz i zainstaluj narzędzia usługi Azure IoT Edge z witryny Visual Studio Marketplace. Aby utworzyć i skompilować rozwiązanie usługi IoT Edge, możesz użyć rozszerzenia Azure IoT Edge Tools. Preferowane narzędzie programistyczne to narzędzie wiersza polecenia (CLI) usługi Azure IoT Edge Dev Tool. Rozszerzenie zawiera szablony projektów usługi Azure IoT Edge użyte do utworzenia projektu programu Visual Studio. Obecnie wymagane jest zainstalowanie rozszerzenia niezależnie od używanego narzędzia programistycznego.

    Ważne

    Rozszerzenie Azure IoT Edge Tools for VS 2022 jest w trybie konserwacji. Preferowane narzędzie programistyczne to narzędzie wiersza polecenia (CLI) usługi Azure IoT Edge Dev Tool.

    Napiwek

    Jeśli używasz programu Visual Studio 2019, pobierz i zainstaluj narzędzia Azure IoT Edge Tools for VS 2019 z witryny Visual Studio Marketplace.

  • Instalowanie menedżera biblioteki programu Vcpkg

    git clone https://github.com/Microsoft/vcpkg
    cd vcpkg
    bootstrap-vcpkg.bat
    

    Instalowanie pakietu azure-iot-sdk-c dla systemu Windows

    vcpkg.exe install azure-iot-sdk-c:x64-windows
    vcpkg.exe --triplet x64-windows integrate install
    
  • Pobierz i zainstaluj na komputerze deweloperskim system zarządzania kontenerami zgodny z platformą Docker, aby skompilować i uruchomić obrazy modułów. Na przykład zainstaluj program Docker Community Edition.

  • Aby opracowywać moduły z kontenerami systemu Linux, należy użyć komputera z systemem Windows spełniającego wymagania dotyczące programu Docker Desktop.

  • Utwórz usługę Azure Container Registry lub Docker Hub do przechowywania obrazów modułów.

    Napiwek

    Możesz użyć lokalnego rejestru platformy Docker do celów prototypowych i testowych zamiast rejestru w chmurze.

  • Zainstaluj interfejs wiersza polecenia platformy Azure.

  • Aby przetestować moduł na urządzeniu, potrzebujesz aktywnego urządzenia usługi IoT Hub z co najmniej jednym urządzeniem usługi IoT Edge. Aby utworzyć urządzenie usługi IoT Edge do testowania, możesz go utworzyć w witrynie Azure Portal lub za pomocą interfejsu wiersza polecenia:

    • Tworzenie jednej z nich w witrynie Azure Portal jest najszybsze. W witrynie Azure Portal przejdź do zasobu usługi IoT Hub. Wybierz pozycję Urządzenia w menu Zarządzanie urządzeniami , a następnie wybierz pozycję Dodaj urządzenie.

      W obszarze Tworzenie urządzenia nazwij urządzenie przy użyciu identyfikatora urządzenia, zaznacz pozycję Urządzenie usługi IoT Edge, a następnie wybierz pozycję Zapisz w lewym dolnym rogu.

      Na koniec upewnij się, że nowe urządzenie istnieje w usłudze IoT Hub z menu Urządzenia do zarządzania urządzeniami>. Aby uzyskać więcej informacji na temat tworzenia urządzenia usługi IoT Edge za pośrednictwem witryny Azure Portal, zobacz Tworzenie i aprowizowanie urządzenia usługi IoT Edge w systemie Linux przy użyciu kluczy symetrycznych.

    • Aby utworzyć urządzenie usługi IoT Edge za pomocą interfejsu wiersza polecenia, wykonaj kroki opisane w przewodniku Szybki start dla systemu Linux lub Windows. W procesie rejestrowania urządzenia usługi IoT Edge tworzysz urządzenie usługi IoT Edge.

    Jeśli używasz demona usługi IoT Edge na maszynie deweloperskiej, może być konieczne zatrzymanie usługi EdgeHub i EdgeAgent przed rozpoczęciem programowania w programie Visual Studio.

Tworzenie projektu usługi Azure IoT Edge

Szablon projektu usługi IoT Edge w programie Visual Studio tworzy rozwiązanie do wdrożenia na urządzeniach usługi IoT Edge. Najpierw utworzysz rozwiązanie usługi Azure IoT Edge. Następnie utworzysz moduł w tym rozwiązaniu. Każde rozwiązanie usługi IoT Edge może zawierać więcej niż jeden moduł.

W naszym rozwiązaniu utworzymy trzy projekty. Moduł główny zawierający moduł EdgeAgent i EdgeHub oprócz modułu czujnika temperatury. Następnie dodasz dwa kolejne moduły usługi IoT Edge.

Ważne

Struktura projektu usługi IoT Edge utworzona przez program Visual Studio nie jest taka sama jak w programie Visual Studio Code.

Obecnie interfejs wiersza polecenia narzędzia deweloperskiego usługi Azure IoT Edge nie obsługuje tworzenia typu projektu programu Visual Studio. Aby utworzyć projekt programu Visual Studio, musisz użyć rozszerzenia usługi IoT Edge programu Visual Studio.

  1. Utwórz nowy projekt w programie Visual Studio.

  2. W obszarze Tworzenie nowego projektu wyszukaj usługę Azure IoT Edge. Wybierz projekt zgodny z platformą i architekturą urządzenia usługi IoT Edge, a następnie wybierz pozycję Dalej.

    Create New Project

  3. W obszarze Konfigurowanie nowego projektu wprowadź nazwę projektu, określ lokalizację i wybierz pozycję Utwórz.

  4. W obszarze Dodawanie modułu wybierz typ modułu, który chcesz opracować. Jeśli masz istniejący moduł, który chcesz dodać do wdrożenia, wybierz pozycję Istniejący moduł.

  5. W polu Nazwa modułu wprowadź nazwę modułu. Wybierz unikatową nazwę w rejestrze kontenerów.

  6. W polu Adres URL repozytorium podaj nazwę repozytorium obrazów modułu. Program Visual Studio automatycznie wypełnia nazwę modułu nazwą localhost:5000/<nazwa modułu>. Zastąp je własnymi informacjami rejestru. Użyj hosta lokalnego , jeśli używasz lokalnego rejestru platformy Docker do testowania. Jeśli używasz usługi Azure Container Registry, użyj serwera logowania z ustawień rejestru. Serwer logowania wygląda jak <nazwa> rejestru.azurecr.io. Zastąp tylko część ciągu localhost:5000, tak aby wynik końcowy wyglądał następująco:< nazwa> rejestru.azurecr.io/< nazwa> modułu.

  7. Wybierz pozycję Dodaj , aby dodać moduł do projektu.

    Screenshot of how to add Application and Module.

    Uwaga

    Jeśli masz istniejący projekt usługi IoT Edge, możesz zmienić adres URL repozytorium, otwierając plik module.json . Adres URL repozytorium znajduje się we właściwości repozytorium pliku JSON.

Teraz masz projekt usługi IoT Edge i moduł usługi IoT Edge w rozwiązaniu programu Visual Studio.

Struktura projektu

W rozwiązaniu istnieją dwa foldery na poziomie projektu, w tym główny folder projektu i jeden folder modułu. Na przykład może istnieć główny folder projektu o nazwie AzureIotEdgeApp1 i folder modułu o nazwie IotEdgeModule1. Główny folder projektu zawiera manifest wdrożenia.

Folder projektu modułu zawiera plik dla kodu modułu o nazwie Program.cs lub main.c w zależności od wybranego języka. Ten folder zawiera również plik o nazwie module.json opisujący metadane modułu. Różne pliki platformy Docker zawarte w tym miejscu zawierają informacje potrzebne do skompilowania modułu jako kontenera systemu Windows lub Linux.

Manifest wdrożenia projektu

Edytowany manifest wdrożenia nosi nazwę deployment.debug.template.json. Ten plik jest szablonem manifestu wdrożenia usługi IoT Edge, który definiuje wszystkie moduły uruchamiane na urządzeniu wraz ze sposobem komunikowania się ze sobą. Aby uzyskać więcej informacji na temat manifestów wdrażania, zobacz Dowiedz się, jak wdrażać moduły i ustanawiać trasy.

Jeśli otworzysz ten szablon wdrażania, zobaczysz, że zostaną uwzględnione dwa moduły środowiska uruchomieniowego edgeAgent i edgeHub wraz z modułem niestandardowym utworzonym w tym projekcie programu Visual Studio. Dostępny jest również czwarty moduł o nazwie SimulatedTemperatureSensor . Ten moduł domyślny generuje symulowane dane, których można użyć do testowania modułów lub usunięcia, jeśli nie jest to konieczne. Aby zobaczyć, jak działa symulowany czujnik temperatury, wyświetl kod źródłowy SimulatedTemperatureSensor.csproj.

Ustawianie wersji środowiska uruchomieniowego usługi IoT Edge

Obecnie najnowsza stabilna wersja środowiska uruchomieniowego to 1.4. Należy zaktualizować wersję środowiska uruchomieniowego usługi IoT Edge do najnowszej stabilnej wersji lub wersji docelowej dla urządzeń.

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy nazwę głównego projektu i wybierz pozycję Ustaw wersję środowiska uruchomieniowego usługi IoT Edge.

    Screenshot of how to find and select the menu item named 'Set IoT Edge Runtime version'.

  2. Użyj menu rozwijanego, aby wybrać wersję środowiska uruchomieniowego uruchomioną na urządzeniach usługi IoT Edge, a następnie wybierz przycisk OK , aby zapisać zmiany. Jeśli nie wprowadzono żadnych zmian, wybierz pozycję Anuluj , aby zakończyć.

    Obecnie rozszerzenie nie zawiera wyboru dla najnowszych wersji środowiska uruchomieniowego. Jeśli chcesz ustawić wersję środowiska uruchomieniowego wyższą niż 1.2, otwórz plik manifestu wdrożenia deployment.debug.template.json . Zmień wersję środowiska uruchomieniowego dla obrazów modułu środowiska uruchomieniowego systemu edgeAgent i edgeHub. Jeśli na przykład chcesz użyć środowiska uruchomieniowego usługi IoT Edge w wersji 1.4, zmień następujące wiersze w pliku manifestu wdrożenia:

    "systemModules": {
       "edgeAgent": {
        //...
          "image": "mcr.microsoft.com/azureiotedge-agent:1.4"
        //...
       "edgeHub": {
       //...
          "image": "mcr.microsoft.com/azureiotedge-hub:1.4",
       //...
    
  3. Jeśli zmieniono wersję, ponownie wygeneruj manifest wdrożenia, klikając prawym przyciskiem myszy nazwę projektu i wybierając pozycję Generuj wdrożenie dla usługi IoT Edge. Spowoduje to wygenerowanie manifestu wdrożenia na podstawie szablonu wdrożenia i pojawi się w folderze konfiguracji projektu programu Visual Studio.

  1. Otwórz plik manifestu wdrożenia deployment.debug.template.json . Manifest wdrożenia to dokument JSON opisujący moduły do skonfigurowania na docelowym urządzeniu usługi IoT Edge.

  2. Zmień wersję środowiska uruchomieniowego dla obrazów modułu środowiska uruchomieniowego systemu edgeAgent i edgeHub. Jeśli na przykład chcesz użyć środowiska uruchomieniowego usługi IoT Edge w wersji 1.4, zmień następujące wiersze w pliku manifestu wdrożenia:

    "systemModules": {
        "edgeAgent": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-agent:1.4",
        //...
        "edgeHub": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-hub:1.4",
        //...
    

Opcje infrastruktury modułu i programowania

Po dodaniu nowego modułu jest on dostarczany z domyślnym kodem gotowym do skompilowania i wdrożenia na urządzeniu, dzięki czemu można rozpocząć testowanie bez dotykania żadnego kodu. Kod modułu znajduje się w folderze modułu w pliku o nazwie Program.cs (dla języka C#) lub main.c (dla języka C).

Domyślne rozwiązanie zostało skompilowane tak, aby symulowane dane z modułu SimulatedTemperatureSensor zostały kierowane do modułu, który pobiera dane wejściowe, a następnie wysyła je do usługi IoT Hub.

Gdy wszystko będzie gotowe do dostosowania szablonu modułu przy użyciu własnego kodu, użyj zestawów SDK usługi Azure IoT Hub, aby utworzyć moduły spełniające kluczowe potrzeby rozwiązań IoT, takich jak zabezpieczenia, zarządzanie urządzeniami i niezawodność.

Debugowanie przy użyciu symulatora

Narzędzie deweloperskie usługi Azure IoT EdgeHub zapewnia lokalne środowisko programowania i debugowania. Narzędzie ułatwia uruchamianie modułów usługi IoT Edge bez środowiska uruchomieniowego usługi IoT Edge, dzięki czemu można tworzyć, opracowywać, testować, uruchamiać i debugować lokalnie moduły i rozwiązania usługi IoT Edge. Nie musisz wypychać obrazów do rejestru kontenerów i wdrażać je na urządzeniu na potrzeby testowania.

Aby uzyskać więcej informacji, zobacz Azure IoT Edge Dev Tool (Narzędzie deweloperskie usługi Azure IoT EdgeHub).

Aby zainicjować narzędzie w programie Visual Studio:

  1. Pobierz parametry połączenia urządzenia usługi IoT Edge (znajdującego się w usłudze IoT Hub) z witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.

    Jeśli używasz interfejsu wiersza polecenia do pobierania parametry połączenia, użyj tego polecenia, zastępując ciąg "[device_id]" i "[hub_name]" własnymi wartościami:

    az iot hub device-identity connection-string show --device-id [device_id] --hub-name [hub_name]
    
  2. W menu Narzędzia w programie Visual Studio wybierz pozycję Azure IoT Edge Tools Setup IoT Edge Simulator (Konfigurowanie symulatora usługi IoT Edge).>

  3. Wklej parametry połączenia i wybierz przycisk OK.

Uwaga

Te kroki należy wykonać tylko raz na komputerze dewelopera, ponieważ wyniki są automatycznie stosowane do wszystkich kolejnych rozwiązań usługi Azure IoT Edge. Tę procedurę można wykonać ponownie, jeśli musisz zmienić parametry połączenia na inną.

Kompilowanie i debugowanie pojedynczego modułu

Zazwyczaj chcesz przetestować i debugować każdy moduł przed uruchomieniem go w całym rozwiązaniu z wieloma modułami. Narzędzie symulatora usługi IoT Edge umożliwia uruchamianie pojedynczego modułu w izolacji wysyłania komunikatów przez port 53000.

  1. W Eksplorator rozwiązań wybierz i wyróżnij folder projektu modułu (na przykład IotEdgeModule1). Ustaw moduł niestandardowy jako projekt startowy. Wybierz pozycję Project Set (Zestaw projektów) jako StartUp Project (Projekt> startowy) z menu.

  2. Naciśnij klawisz F5 lub wybierz przycisk uruchom pasek narzędzi, aby uruchomić symulator usługi IoT Edge dla pojedynczego modułu. Początkowo może upłynąć od 10 do 20 sekund.

    Screenshot of how to run a module.

  3. Powinno zostać wyświetlone okno aplikacji konsolowej platformy .NET Core, jeśli moduł został pomyślnie zainicjowany.

  4. Ustaw punkt przerwania, aby sprawdzić moduł.

    • W przypadku programowania w języku C#ustaw punkt przerwania w PipeMessage() funkcji ModuleBackgroundService.cs.
    • W przypadku używania języka C ustaw punkt przerwania w InputQueue1Callback() funkcji main.c.
  5. Przetestuj moduł, wysyłając komunikat. Podczas debugowania pojedynczego modułu symulator nasłuchuje domyślnego portu 53000 komunikatów. Aby wysłać komunikat do modułu, uruchom następujące polecenie curl z powłoki poleceń, takiej jak Git Bash lub WSL Bash.

    curl --header "Content-Type: application/json" --request POST --data '{"inputName": "input1","data":"hello world"}' http://localhost:53000/api/v1/messages
    

    Jeśli wystąpi błąd niedopasowany nawias klamrowy/nawias kwadratowy w adresie URL, spróbuj użyć następującego polecenia:

    curl --header "Content-Type: application/json" --request POST --data "{\"inputName\": \"input1\", \"data\", \"hello world\"}"  http://localhost:53000/api/v1/messages
    

    Screenshot of the output console, Visual Studio project, and Bash window.

    Punkt przerwania powinien zostać wyzwolony. Zmienne można obserwować w oknie Ustawień lokalnych programu Visual Studio znalezionych podczas działania debugera. Przejdź do pozycji Debugowanie>ustawień lokalnych systemu Windows.>

    W powłoce lub powłoce Bash powinno zostać wyświetlone {"message":"accepted"} potwierdzenie.

    W konsoli platformy .NET powinny zostać wyświetlone następujące pozycje:

    IoT Hub module client initialized.
    Received message: 1, Body: [hello world]
    

    Napiwek

    Możesz również użyć narzędzia PostMan lub innych narzędzi interfejsu API do wysyłania komunikatów curlzamiast .

  6. Naciśnij klawisze Ctrl + F5 lub naciśnij przycisk zatrzymania, aby zatrzymać debugowanie.

Kompilowanie i debugowanie wielu modułów

Po zakończeniu tworzenia pojedynczego modułu możesz uruchomić i debugować całe rozwiązanie z wieloma modułami. Narzędzie symulatora usługi IoT Edge umożliwia uruchamianie wszystkich modułów zdefiniowanych w manifeście wdrożenia, w tym symulowanej usługi EdgeHub na potrzeby routingu komunikatów. W tym przykładzie uruchomisz dwa moduły niestandardowe i symulowany moduł czujnika temperatury. Komunikaty z modułu symulowanego czujnika temperatury są kierowane do każdego modułu niestandardowego.

  1. W Eksplorator rozwiązań dodaj drugi moduł do rozwiązania, klikając prawym przyciskiem myszy główny folder projektu. W menu wybierz pozycję Dodaj>nowy moduł usługi IoT Edge.

    Screenshot of how to add a 'New IoT Edge Module' from the menu.

  2. W oknie nadaj Add module nowemu modułowi nazwę i zastąp localhost:5000 część adresu URL repozytorium serwerem logowania usługi Azure Container Registry, tak jak wcześniej.

  3. Otwórz plik deployment.debug.template.json , aby zobaczyć, że nowy moduł został dodany w sekcji modułów . Dodano również nową trasę do sekcji tras w sekcji w EdgeHub celu wysyłania komunikatów z nowego modułu do usługi IoT Hub. Aby wysłać dane z symulowanego czujnika temperatury do nowego modułu, dodaj kolejną trasę z następującym wierszem JSON. Zastąp <NewModuleName> ciąg (w dwóch miejscach) własną nazwą modułu.

    "sensorTo<NewModuleName>": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/<NewModuleName>/inputs/input1\")"
    
  4. Kliknij prawym przyciskiem myszy główny projekt (na przykład AzureIotEdgeApp1) i wybierz polecenie Ustaw jako projekt startowy. Ustawiając główny projekt jako projekt startowy, wszystkie moduły w uruchomieniu rozwiązania. Obejmuje to oba moduły dodane do rozwiązania, moduł symulowanego czujnika temperatury i symulowane centrum usługi Edge.

  5. Naciśnij klawisz F5 lub wybierz przycisk uruchom pasek narzędzi, aby uruchomić rozwiązanie. Początkowo może upłynąć od 10 do 20 sekund. Upewnij się, że nie masz uruchomionych innych kontenerów platformy Docker, które mogą wiązać potrzebny port dla tego projektu.

  6. Powinny zostać wyświetlone dwa okna aplikacji konsolowej platformy .NET Core dla każdego modułu.

  7. Ustaw punkt przerwania, aby sprawdzić moduły.

    • W przypadku programowania w języku C#ustaw punkt przerwania w PipeMessage() funkcji ModuleBackgroundService.cs.
    • W przypadku używania języka C ustaw punkt przerwania w InputQueue1Callback() funkcji main.c.
  8. Utwórz punkty przerwania w każdym module, a następnie naciśnij klawisz F5 , aby uruchomić i debugować wiele modułów jednocześnie. Powinno zostać wyświetlonych wiele okien aplikacji konsolowych platformy .NET Core z każdym oknem reprezentującym inny moduł.

    Screenshot of Visual Studio with two output consoles.

  9. Naciśnij klawisze Ctrl + F5 lub naciśnij przycisk zatrzymania, aby zatrzymać debugowanie.

Kompilowanie i wypychanie obrazów do rejestru

Po utworzeniu i debugowania modułu możesz skompilować i wypchnąć obraz modułu do usługi Azure Container Registry. Następnie możesz wdrożyć moduł na urządzeniu usługi IoT Edge.

  1. Ustaw główny projekt usługi IoT Edge jako projekt startowy, a nie jeden z poszczególnych modułów.

  2. Wybierz pozycję Debuguj lub Zwolnij jako konfigurację do skompilowania obrazów modułów.

    Uwaga

    Podczas wybierania opcji Debuguj program Visual Studio używa Dockerfile.(amd64|windows-amd64).debug do kompilowania obrazów platformy Docker. Obejmuje to debuger vsDBG wiersza polecenia platformy .NET Core w obrazie kontenera podczas jego kompilowania. W przypadku modułów usługi IoT Edge gotowych do produkcji zalecamy użycie konfiguracji wydania, która jest używana Dockerfile.(amd64|windows-amd64) bez usługi VSDBG.

  3. Jeśli używasz rejestru prywatnego, takiego jak Azure Container Registry (ACR), użyj następującego polecenia platformy Docker, aby się do niego zalogować. Nazwę użytkownika i hasło można uzyskać na stronie Klucze dostępu rejestru w witrynie Azure Portal.

    docker login <ACR login server>
    
  4. Dodajmy informacje logowania usługi Azure Container Registry do ustawień środowiska uruchomieniowego znajdujących się w pliku deployment.debug.template.json. Istnieją dwa sposoby, aby to zrobić. Możesz dodać poświadczenia rejestru do .env pliku (najbezpieczniejsze) lub dodać je bezpośrednio do deployment.debug.template.json pliku.

    Dodaj poświadczenia do .env pliku:

    W Eksplorator rozwiązań wybierz przycisk Pokaż wszystkie pliki na pasku narzędzi. Zostanie .env wyświetlony plik. Dodaj nazwę użytkownika i hasło usługi Azure Container Registry do pliku .env . Te poświadczenia można znaleźć na stronie Klucze dostępu usługi Azure Container Registry w witrynie Azure Portal.

    Screenshot of button that shows all files in the Solution Explorer.

        DEFAULT_RT_IMAGE=1.2
        CONTAINER_REGISTRY_USERNAME_myregistry=<my-registry-name>
        CONTAINER_REGISTRY_PASSWORD_myregistry=<my-registry-password>
    

    Dodawanie poświadczeń bezpośrednio do pliku deployment.debug.template.json

    Jeśli wolisz dodać poświadczenia bezpośrednio do szablonu wdrożenia, zastąp symbole zastępcze nazwą użytkownika, hasłem i nazwą rejestru administratora usługi ACR.

          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "registry1": {
                "username": "<username>",
                "password": "<password>",
                "address": "<registry name>.azurecr.io"
              }
            }
          }
    

    Uwaga

    W tym artykule są używane poświadczenia logowania administratora dla usługi Azure Container Registry, które są wygodne w scenariuszach tworzenia i testowania. Gdy wszystko będzie gotowe do scenariuszy produkcyjnych, zalecamy opcję uwierzytelniania z najmniejszymi uprawnieniami, taką jak jednostki usługi. Aby uzyskać więcej informacji, zobacz Zarządzanie dostępem do rejestru kontenerów.

  5. Jeśli używasz rejestru lokalnego, możesz uruchomić rejestr lokalny.

  6. Na koniec w Eksplorator rozwiązań kliknij prawym przyciskiem myszy główny folder projektu i wybierz polecenie Kompiluj i wypychaj moduły usługi IoT Edge, aby skompilować i wypchnąć obraz platformy Docker dla każdego modułu. Może to potrwać minutę. Po wyświetleniu Finished Build and Push IoT Edge Modules. w konsoli danych wyjściowych programu Visual Studio wszystko będzie gotowe.

Wdrażanie rozwiązania

Po utworzeniu i wypchnięciu obrazów modułów do usługi Azure Container Registry możesz wdrożyć rozwiązanie na urządzeniu usługi IoT Edge. Masz już szablon manifestu wdrożenia, który zaobserwowano w tym samouczku. Wygenerujmy z tego manifest wdrożenia, a następnie użyjemy polecenia interfejsu wiersza polecenia platformy Azure, aby wdrożyć moduły na urządzeniu usługi IoT Edge na platformie Azure.

  1. Kliknij prawym przyciskiem myszy główny projekt w programie Visual Studio Eksplorator rozwiązań i wybierz polecenie Generuj wdrożenie dla usługi IoT Edge.

    Screenshot of location of the 'generate deployment' menu item.

  2. Przejdź do lokalnego głównego folderu projektu programu Visual Studio i poszukaj go w folderze config . Ścieżka pliku może wyglądać następująco: C:\Users\<YOUR-USER-NAME>\source\repos\<YOUR-IOT-EDGE-PROJECT-NAME>\config. W tym miejscu znajdziesz wygenerowany manifest wdrożenia, taki jak deployment.amd64.debug.json.

  3. Sprawdź plik deployment.amd64.debug.json , aby potwierdzić, że wersja schematu edgeHub jest ustawiona na 1.2.

     "$edgeHub": {
         "properties.desired": {
           "schemaVersion": "1.2",
           "routes": {
             "IotEdgeModule2022ToIoTHub": "FROM /messages/modules/IotEdgeModule2022/outputs/* INTO $upstream",
             "sensorToIotEdgeModule2022": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/IotEdgeModule2022/inputs/input1\")",
             "IotEdgeModule2022bToIoTHub": "FROM /messages/modules/IotEdgeModule2022b/outputs/* INTO $upstream"
           },
           "storeAndForwardConfiguration": {
             "timeToLiveSecs": 7200
           }
         }
       }
    

    Napiwek

    Szablon wdrożenia dla programu Visual Studio 2022 wymaga wersji schematu 1.2. Jeśli potrzebujesz wersji 1.1 lub 1.0, zaczekaj na wygenerowanie wdrożenia (nie zmieniaj go w deployment.debug.template.jsonpliku ). Generowanie wdrożenia spowoduje domyślne utworzenie schematu 1.2. Można jednak ręcznie zmienić deployment.amd64.debug.jsonwygenerowany manifest, jeśli jest to konieczne przed wdrożeniem go na platformie Azure.

    Ważne

    Po wdrożeniu urządzenia usługi IoT Edge obecnie nie będzie on poprawnie wyświetlany w witrynie Azure Portal ze schematem w wersji 1.2 (wersja 1.1 będzie prawidłowa). Jest to znana usterka i wkrótce zostanie naprawiona. Nie będzie to jednak miało wpływu na urządzenie, ponieważ jest ono nadal połączone w usłudze IoT Hub i może być komunikowane w dowolnym momencie przy użyciu interfejsu wiersza polecenia platformy Azure.

    Screenshot of Azure portal error on the IoT Edge device page.

  4. Teraz wdrożymy nasz manifest za pomocą polecenia interfejsu wiersza polecenia platformy Azure. Otwórz wiersz polecenia dla deweloperów programu Visual Studio i przejdź do katalogu konfiguracji.

        cd config
    
  5. Wdróż manifest urządzenia usługi IoT Edge w usłudze IoT Hub. Polecenie konfiguruje urządzenie do używania modułów opracowanych w rozwiązaniu. Manifest wdrożenia został utworzony w poprzednim kroku i przechowywany w folderze konfiguracji . W folderze konfiguracji wykonaj następujące polecenie wdrożenia. Zastąp wartości [device id], [hub name]i [file path] wartościami. Jeśli identyfikator urządzenia usługi IoT Edge nie istnieje w usłudze IoT Hub, należy go utworzyć.

        az iot edge set-modules --device-id [device id] --hub-name [hub name] --content [file path]
    

    Na przykład polecenie może wyglądać następująco:

    az iot edge set-modules --device-id my-device-name --hub-name my-iot-hub-name --content deployment.amd64.debug.json
    
  6. Po uruchomieniu polecenia zobaczysz potwierdzenie wdrożenia wydrukowane w JSON wierszu polecenia.

Kompilowanie obrazu platformy Docker modułu

Po utworzeniu modułu możesz skompilować obraz modułu do przechowywania w rejestrze kontenerów na potrzeby wdrożenia na urządzeniu usługi IoT Edge.

Użyj pliku Dockerfile modułu, aby skompilować obraz platformy Docker modułu.

docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>" 

Załóżmy na przykład, że powłoka poleceń znajduje się w katalogu projektu, a nazwa modułu to IotEdgeModule1. Aby skompilować obraz dla rejestru lokalnego lub rejestru kontenerów platformy Azure, użyj następujących poleceń:

# Build the image for the local registry

docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t localhost:5000/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"

# Or build the image for an Azure Container Registry

docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"

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/iotedgemodule1:0.0.1-amd64

# Or push the Docker image to an Azure Container Registry
az acr login --name myacr
docker push myacr.azurecr.io/iotedgemodule1:0.0.1-amd64

Wdróż moduł na urządzeniu usługi IoT Edge.

W programie Visual Studio otwórz plik manifestu wdrożenia deployment.debug.template.json w głównym projekcie. Manifest wdrożenia to dokument JSON opisujący 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, obrazy modułu i odpowiednie 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, musisz dodać poświadczenia do pliku deployment.debug.template.json w ustawieniach edgeAgent . Przykład:

    "modulesContent": {
    "$edgeAgent": {
      "properties.desired": {
        "schemaVersion": "1.1",
        "runtime": {
          "type": "docker",
          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "myacr": {
                "username": "myacr",
                "password": "<your_acr_password>",
                "address": "myacr.azurecr.io"
              }
            }
          }
        },
    //...
    
  2. Zastąp wartość właściwości obrazu nazwą obrazu modułu wypchniętą do rejestru. Jeśli na przykład wypchnięliśmy obraz oznaczony jako myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 niestandardowy moduł IotEdgeModule1, zastąp wartość właściwości obrazu wartością tagu.

  3. Dodaj lub zastąp wartość createOptions ciągową zawartością dla każdego systemu i modułu niestandardowego w szablonie wdrożenia.

    Na przykład obraz IotEdgeModule1 i ustawienia createOptions będą podobne do następujących:

    "IotEdgeModule1": {
    "version": "1.0.0",
    "type": "docker",
    "status": "running",
    "restartPolicy": "always",
    "settings": {
        "image": "myacr.azurecr.io/iotedgemodule1:0.0.1-amd64",
        "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    }
    

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

Parametry połączenia usługi IoT Hub można znaleźć w witrynie Azure Portal w obszarze Zasady dostępu współdzielonego ustawień>zabezpieczeń usługi Azure IoT Hub.>

Potwierdzanie wdrożenia na urządzeniu

Aby sprawdzić, czy moduły usługi IoT Edge zostały wdrożone na platformie Azure, zaloguj się na urządzeniu (lub maszynie wirtualnej), na przykład za pośrednictwem protokołu SSH lub usługi Azure Bastion i uruchom polecenie listy usługi IoT Edge.

   iotedge list

Powinna zostać wyświetlona lista modułów uruchomionych na urządzeniu lub maszynie wirtualnej.

   NAME                        STATUS           DESCRIPTION      CONFIG
   SimulatedTemperatureSensor  running          Up a minute      mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0
   edgeAgent                   running          Up a minute      mcr.microsoft.com/azureiotedge-agent:1.2
   edgeHub                     running          Up a minute      mcr.microsoft.com/azureiotedge-hub:1.2
   IotEdgeModule1              running          Up a minute      myacr.azurecr.io/iotedgemodule1:0.0.1-amd64.debug
   myIotEdgeModule2            running          Up a minute      myacr.azurecr.io/myiotedgemodule2:0.0.1-amd64.debug

Debugowanie przy użyciu zdalnego protokołu SSH platformy Docker

Aparaty Platformy Docker i Moby obsługują połączenia SSH z kontenerami, umożliwiając dołączanie i debugowanie kodu na urządzeniu zdalnym przy użyciu programu Visual Studio.

  1. Połączenie zdalnie do platformy 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.

  2. Wykonaj kroki, aby użyć programu Visual Studio, aby dołączyć do procesu uruchomionego w kontenerze platformy Docker na urządzeniu zdalnym.

  3. W programie Visual Studio ustaw punkty przerwania w module niestandardowym.

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

    Screenshot of Visual Studio attached to remote docker container on a device paused on a breakpoint.

Następne kroki