Aracılığıyla paylaş


Visual Studio Code kullanarak Azure IoT Edge modüllerinde hata ayıklama

Applies to:IoT Edge 1.5 onay işareti IoT Edge 1.5

Önemli

IoT Edge 1.5 LTS, desteklenen bir sürümdür. IoT Edge 1.4 LTS, 12 Kasım 2024'te kullanım ömrüne ulaştı. Önceki bir sürümü kullanıyorsanız bkz. Update IoT Edge.

Bu makalede, birden çok dilde IoT Edge modüllerinde hata ayıklamak için Visual Studio Code nasıl kullanılacağı açıklanmaktadır. Geliştirme bilgisayarınızda, yerel veya uzak modül kapsayıcısında modülünüzü eklemek ve hatalarını ayıklamak için Visual Studio Code kullanın.

Bu makale, iki IoT Edge geliştirme aracına yönelik adımları içerir.

  • Azure IoT Edge Geliştirme Aracı komut satırı aracı (CLI). Bu araç geliştirme için tercih edilir.
  • Visual Studio Code için Azure IoT Edge araçları uzantısı. Uzantı bakım modundadır.

Bu makalenin başındaki araç seçici düğmesini kullanarak araç sürümünü seçin.

Visual Studio Code aşağıdaki programlama dillerinde IoT Edge modülleri yazmayı destekler:

  • C# ve C# Azure Fonksiyonları
  • C
  • Python
  • Node.js
  • Java

Azure IoT Edge şu cihaz mimarileriyle çalışır:

  • AMD64
  • ARM32v7
  • ARM64

Desteklenen işletim sistemleri, diller ve mimariler hakkında daha fazla bilgi için bkz . Dil ve mimari desteği.

Visual Studio Code IoT Edge uzantısını kullanırken, IoT Edge Simülatörü'nde modül kodunuzu başlatabilir ve hatalarını ayıklayabilirsiniz.

Ayrıca Windows üzerinde Linux için IoT Edge (EFLOW) kullanarak bir Linux kapsayıcısında Windows geliştirme bilgisayarı ve hata ayıklama modülleri de kullanabilirsiniz. Modül geliştirmek için EFLOW kullanma hakkında daha fazla bilgi için bkz. Tutorial: Windows üzerinde Linux için IoT Edge kullanarak Linux kapsayıcılarıyla IoT Edge modülleri geliştirme.

Visual Studio Code hata ayıklama özellikleri konusunda yeniyseniz bkz. Visual Studio Code hata ayıklama.

Önkoşullar

Geliştirme makineniz olarak Windows, macOS veya Linux çalıştıran bir bilgisayar veya sanal makine kullanabilirsiniz. Windows bilgisayarlarda Windows veya Linux modülleri geliştirebilirsiniz. Linux modülleri geliştirmek için, Docker Desktop gereksinimlerini karşılayan bir Windows bilgisayar kullanın.

Geliştirme ve hata ayıklama için gerekli araçları yüklemek için Visual Studio Code öğreticisini kullanarak Geldir Azure IoT Edge modüllerini tamamlayın.

Visual Studio Code yükleyin.

Şu uzantıları ekleyin:

  • Azure IoT Edge uzantısı. Azure IoT Edge araçları Visual Studio Code uzantısı için bakım modundadır.
  • Azure IoT Hub uzantısı.

Bir cihazda modülünüzün hatalarını ayıklamak için şunları yapmanız gerekir:

  • En az bir IoT Edge cihazı olan etkin bir IoT Hub.
  • Fiziksel IoT Edge cihazı veya sanal cihaz. Linux için quickstart içindeki adımları izleyerek Azure'de bir sanal cihaz oluşturun.
  • Özel bir IoT Edge modülü. Özel modül oluşturmak için Visual Studio Code öğreticisini kullanarak Geldir Azure IoT Edge modüllerindeki adımları izleyin.

IoT Edge simülatörünü kullanarak kapsayıcı olmadan hata ayıklama

IoT Edge Simülatörü, geliştirme bilgisayarınızda çalışan ve tek bir IoT Edge cihazın davranışını simüle eden bir araçtır. IoT Edge modüllerinizi fiziksel bir cihaz veya tam bir IoT Edge cihaz çalışma zamanı olmadan geliştirmek ve test etmek için IoT Edge Simülatörü'ni kullanabilirsiniz.

Aşağıdaki hata ayıklama adımları, özel bir modül oluşturduğunuzu varsayar. Özel modül oluşturmadıysanız Visual Studio Code öğreticisini kullanarak Geldir Azure IoT Edge modüllerindeki adımları izleyin.

C veya Python kullanılırken kapsayıcı olmadan modülde hata ayıklama kullanılamaz.

IoT Edge simülatörü kullanarak ekleme modunda hata ayıklama

C veya Python için ekleme modunda hata ayıklama kullanılamaz.

IoT Edge çalışma zamanıyla modülde hata ayıklama

Her modül klasörü, farklı kapsayıcı türleri için birkaç Docker dosyası içerir. Test için modülünüzü derlemek için .debug uzantısıyla biten herhangi bir dosyayı kullanın.

Bu yöntemi kullanarak modüllerde hata ayıkladığınızda modülleriniz IoT Edge çalışma zamanının üzerinde çalışır. IoT Edge cihaz ve Visual Studio Code aynı makinede çalıştırılabilir, ancak genellikle IoT Edge çalışma zamanı ve modüller başka bir fiziksel makinede çalışırken Visual Studio Code geliştirme makinesinde çalışır. Visual Studio Code hatalarını ayıklamak için:

  • IoT Edge cihazınızı ayarlayın, .debug Dockerfile ile IoT Edge modüllerinizi oluşturun ve ardından IoT Edge cihaza dağıtın.
  • Visual Studio Code uzak makinedeki bir kapsayıcıdaki sürece bağlanabilmesi için launch.json güncelleyin. Bu dosyayı çalışma alanınızdaki klasörde bulabilirsiniz ve hata ayıklamayı .vscode destekleyen yeni bir modül eklediğinizde bu dosya güncelleştirilir.
  • Uzak makinedeki konteynere bağlanmak için Uzak SSH hata ayıklamasını kullanın.

Modülünüzü oluşturun ve bir IoT Edge cihazına dağıtın

Visual Studio Code'da deployment.debug.template.json dağıtım bildirim dosyasını açın. deployment manifest hedeflenen IoT Edge cihazında yapılandırılacak modülleri açıklar. Dağıtımdan önce Azure Container Registry kimlik bilgilerinizi ve modül görüntülerinizi uygun createOptions değerleriyle güncelleştirin. createOption değerleri hakkında daha fazla bilgi için bkz. IoT Edge modülleri için kapsayıcı oluşturma seçeneklerini yapılandırma.

  1. Modül görüntünüzü depolamak için bir Azure Container Registry kullanıyorsanız, kimlik bilgilerinizi deployment.debug.template.json>>registryCredentials bölümüne ekleyin. myacr değerini her iki yerde de kendi kayıt defteri adınızla değiştirin ve parolanızı ve Oturum açma sunucusu adresinizi girin. Örneğin:

    "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. Listelenen her sistem (edgeHub ve edgeAgent) ve özel modül (örneğin, filtermodule) için createOptions değerine aşağıdaki dizeli içeriği ekleyin veya değiştirin. Gerekirse değerleri değiştirin.

    "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    

    Örneğin, filtermodule yapılandırması şuna benzer olmalıdır:

    "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. Visual Studio Code komut paletinde Azure IoT Edge: Build and Push IoT Edge solution komutunu çalıştırın.
  2. deployment.debug.template.json Çözümünüz için dosyayı seçin.
  3. Visual Studio Code Gezgini görünümünün Azure IoT Hub>Devices bölümünde, dağıtım için IoT Edge cihaz adına sağ tıklayın ve Tek Cihaz için Dağıtım Oluştur öğesini seçin.

    İpucu

    Seçtiğiniz cihazın IoT Edge bir cihaz olduğunu onaylamak için modül listesini genişletmek için seçin ve $edgeHub ve $edgeAgent varlığını doğrulayın. Her IoT Edge cihaz bu iki modülü içerir.

  4. Çözümünüzün yapılandırma klasörüne gidin, deployment.debug.amd64.json dosyasını seçin ve ardından Edge Dağıtım Bildirimini Seç'i seçin.

Terminalde docker ps komutunu çalıştırarak cihazınızla veya sanal makinenizle kapsayıcı durumunu denetleyin. komutunu çalıştırdıktan sonra kapsayıcınızın listelendiğini görmeniz gerekir. Visual Studio Code ve IoT Edge çalışma zamanı aynı makinede çalıştırılırsa, Visual Studio Code Docker görünümünde durumu denetleyin.

Önemli

Görüntüleriniz için Azure Container Registry gibi özel bir kayıt defteri kullanıyorsanız, görüntüleri göndermek için kimlik doğrulaması yapmanız gerekebilir. Kimlik doğrulaması için docker login <Azure Container Registry login server> veya az acr login --name <Azure Container Registry name> kullanın.

Docker'da oturum açma

Kapsayıcı görüntünüzü kayıt defterindeki depolama alanına gönderebilmesi için docker'a kapsayıcı kayıt defteri kimlik bilgilerinizi sağlayın.

  1. Kayıt defterini oluşturduktan sonra kaydettiğiniz Azure Container Registry kimlik bilgileriyle Docker'da oturum açın.

    docker login -u <Azure Container Registry username> -p <Azure Container Registry password> <Azure Container Registry login server>
    

    kullanılmasını --password-stdinöneren bir güvenlik uyarısı alabilirsiniz. Üretim senaryoları için önerilen en iyi yöntem olsa da, bu öğreticinin kapsamı dışındadır. Daha fazla bilgi için docker oturum açma başvurusuna bakın.

  2. Azure Container Registry için oturum açın. komutunu kullanmak için az yüklemeniz gerekebilir. Bu komut , Ayarlar>Erişim anahtarları'ndaki kapsayıcı kayıt defterinizde bulunan kullanıcı adınızı ve parolanızı ister.

    az acr login -n <Azure Container Registry name>
    

İpucu

Bu öğreticinin herhangi bir noktasında oturumunuz kapanırsa, devam etmek için Docker ve Azure Container Registry oturum açma adımlarını yineleyin.

Docker imajı oluştur

Docker görüntüsünü oluşturmak için modülün Dockerfile dosyasını kullanın.

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

Örneğin, yerel kayıt defteri veya Azure Container Registry görüntüsünü oluşturmak için aşağıdaki komutları kullanın:

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

Gönderme modülü Docker görüntüsü

Modül görüntünüzü yerel kayıt defterine veya kapsayıcı kayıt defterine gönderin.

docker push <ImageName>

Örneğin:

# 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

Modülü IoT Edge cihazına dağıtma

modülleri Azure IoT Hub dağıtmak için IoT Edge Azure CLI set-modules komutunu kullanın. Örneğin, deployment.debug.template.json dosyasında tanımlanan modülleri IoT Hub my-iot-hub IoT Edge cihazı my-device dağıtmak için aşağıdaki komutu kullanın:

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

İpucu

IoT Hub paylaşılan erişim anahtarınızı Azure portalınızda IoT Hub >Güvenlik ayarları>Shared erişim ilkeleri>iothubowner bulabilirsiniz.

Modülünüzde hata ayıklama

Uzak bir cihazdaki modüllerde hata ayıklamak için Visual Studio Code'da Uzaktan SSH hata ayıklamasını kullanın.

Remote Geliştirme uzantısı yükleyerek uzaktan Visual Studio Code hata ayıklamayı etkinleştirin. Visual Studio Code uzaktan hata ayıklama hakkında daha fazla bilgi için bkz. Visual Studio Code Uzaktan Geliştirme.

Visual Studio Code'da Uzaktan SSH hata ayıklamasını kullanma hakkında ayrıntılı bilgi için bkz. SSH kullanarak Geliştirme.

Visual Studio Code Hata Ayıklama görünümünde modülün hata ayıklama yapılandırma dosyasını seçin. Varsayılan olarak, .debug Dockerfile, modülün kapsayıcı createOptions ayarları ve launch.json dosyası localhost kullanır.

Hata Ayıklamayı Başlat veya F5'i seçin, ardından bağlanacak işlemi seçin. Visual Studio Code Hata Ayıklama görünümünde, sol panelde değişkenler görürsünüz.

Docker uzak SSH kullanarak hata ayıklama

Docker ve Moby altyapıları, uzak bir cihaza bağlı Visual Studio Code hata ayıklamanıza olanak sağlayan kapsayıcılara yönelik SSH bağlantılarını destekler. Bu özelliği kullanabilmeniz için önce aşağıdaki önkoşulları karşılamanız gerekir.

Uzak SSH hata ayıklama önkoşulları, kullandığınız dile bağlı olarak farklılık gösterebilir. Aşağıdaki bölümlerde .NET kurulumu açıklanmaktadır. Diğer diller hakkında bilgi için genel bakış için bkz . SSH kullanarak Uzaktan Geliştirme. Uzaktan hata ayıklamayı yapılandırma hakkındaki ayrıntılar, Visual Studio Code belgelerinde her dil için hata ayıklama bölümlerine eklenmiştir.

Docker SSH tüneli yapılandırma

  1. Geliştirme bilgisayarınızda SSH tüneli ayarlamak için Docker SSH tüneli'ndeki adımları izleyin. SSH tüneli için ortak/özel anahtar çifti kimlik doğrulaması ve uzak cihaz uç noktasını tanımlayan bir Docker bağlamı gerekir.

  2. Docker'a bağlanmak için kök ayrıcalıklar gerekir. Uzak cihazdaki Docker daemon'a bağlanmaya izin vermek için Docker'ı kök olmayan kullanıcı olarak yönetme sayfasındaki adımları izleyin. Hata ayıklamayı bitirdiğinizde, kullanıcınızı Docker grubundan kaldırmak isteyebilirsiniz.

  3. Visual Studio Code komut paletini (Ctrl+Shift+P) kullanarak uzak makineye işaret eden Docker bağlamını etkinleştirmek için Docker Bağlamı: Use komutunu çalıştırın. Bu komut hem Visual Studio Code hem de Docker CLI'nin uzak makine bağlamını kullanmasına olanak tanır.

    İpucu

    Tüm Docker komutları geçerli bağlamı kullanır. Hata ayıklamayı bitirdiğinizde bağlamı varsayılana geri döndürmeyi unutmayın.

  4. Uzak Docker bağlamlarının etkin olduğunu doğrulamak için uzak cihazda çalışan kapsayıcıları listeleyin:

    docker ps
    

    Çıkışta, aşağıdakine benzer şekilde uzak cihazda çalışan kapsayıcılar listelenir:

    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. .vscode dizininde launch.json Visual Studio Code açın ve yeni bir yapılandırma ekleyin. Yapılandırma ekle'yi seçin ve ardından modülünüz için eşleşen uzaktan ekleme şablonunu seçin. Örneğin, aşağıdaki yapılandırma .NET Core'a yöneliktir. PipeArgs içindeki -H parametresinin değerini cihazınızın DNS adı veya IP adresi olarak değiştirin.

    "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
    },
    

Modülünüzde uzaktan hata ayıklama

  1. Visual Studio Code Hata Ayıklama görünümünde hata ayıklama yapılandırmasını Remote Debug IoT Edge Module (.NET Core) seçin.

  2. Hata Ayıklamayı Başlat'ı veya F5'i seçin. Bağlanacak işlemi seçin.

  3. Visual Studio Code Hata Ayıklama görünümünde, değişkenleri sol panelde görürsünüz.

  4. Visual Studio Code'da özel modülünüz için kesme noktaları ayarlayın.

  5. Bir kesme noktasına isabet edildiğinde değişkenleri inceleyebilir, kodda ilerleyebilir ve modülünüzde hata ayıklayabilirsiniz.

     Uzak bir cihazdaki Docker kapsayıcısına bağlı Visual Studio Code ekran görüntüsü kesme noktasında duraklatıldı.

Not

Yukarıdaki örnekte, uzak kapsayıcılarda IoT Edge modüllerinde hata ayıklama gösterilmektedir. Örnek, uzak bir Docker bağlamı ekler ve uzak cihazdaki Docker ayrıcalıklarına değişiklik yapar. Modüllerinizde hata ayıklamayı tamamladıktan sonra Docker bağlamınızı varsayılan olarak ayarlayın ve kullanıcı hesabınızdan ayrıcalıkları kaldırın.

Raspberry Pi cihazı kullanan bir örnek için bu IoT Geliştirici blog girdisini inceleyin.

Sonraki adımlar

Modülünüzü derledikten sonra Azure IoT Edge modüllerini nasıl dağıtacağınızı öğrenin.

IoT Edge cihazlarınıza yönelik modüller geliştirmek için Azure IoT Hub SDK hakkında bilgi edinin ve kullanın.