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

Şunlar için geçerlidir:IoT Edge 1.5 onay işareti IoT Edge 1.5 IoT Edge 1.4 onay işareti IoT Edge 1.4

Önemli

IoT Edge 1.5 LTS ve IoT Edge 1.4 LTS desteklenen sürümlerdir. IoT Edge 1.4 LTS, 12 Kasım 2024'te kullanım ömrü sona erer. Önceki bir sürümdeyseniz bkz. IoT Edge’i güncelleştirme.

Bu makalede, Birden çok dilde IoT Edge modüllerinde hata ayıklamak için Visual Studio Code'un nasıl kullanılacağı gösterilmektedir. 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 kullanabilirsiniz.

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 uzantısı için Azure IoT Edge araçları. Uzantı bakım modundadır.

Araç sürümünü seçmek için bu makalenin başındaki araç seçici düğmesini kullanın.

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

  • C# ve C# Azure İşlevleri
  • C
  • Python
  • Node.js
  • Java

Azure IoT Edge aşağıdaki cihaz mimarilerini destekler:

  • 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ı kullanabilir ve modüllerin hatalarını ayıklayabilirsiniz. Modül geliştirmek için EFLOW kullanma hakkında daha fazla bilgi için bkz . Öğretici: Windows üzerinde Linux için IoT Edge kullanarak Linux kapsayıcılarıyla IoT Edge modülleri geliştirme.

Visual Studio Code'un hata ayıklama özelliklerini bilmiyorsanız 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 kullanarak Azure IoT Edge modülleri geliştirme öğreticisini tamamlayın.

Visual Studio Code'u yükleme

Aşağıdaki uzantıları ekleyin:

  • Azure IoT Edge uzantısı. Visual Studio Code uzantısı için Azure IoT Edge araçları 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:

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ın davranışını simüle eden bir araçtır. IoT Edge simülatörünü kullanarak IoT Edge modüllerinizi fiziksel bir cihaz veya tam bir IoT Edge cihaz çalışma zamanı olmadan geliştirebilir ve test edebilirsiniz.

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 kullanarak Azure IoT Edge modülleri geliştirme öğreticisindeki adımları izleyin.

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

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

Ekleme modunda hata ayıklama C veya Python için desteklenmez.

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

Her modül klasöründe, farklı kapsayıcı türleri için birkaç Docker dosyası vardır. Test için modülünüzü derlemek için .debug uzantısıyla biten dosyalardan herhangi birini 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'unuz aynı makinede veya daha genel olarak Visual Studio Code geliştirme makinesinde, IoT Edge çalışma zamanı ve modülleri ise başka bir fiziksel makinede çalışıyor olabilir. Visual Studio Code'dan hata ayıklamak için şunları kullanmanız gerekir:

  • IoT Edge cihazınızı ayarlayın, .debug Dockerfile ile IoT Edge modüllerinizi oluşturun ve ardından IoT Edge cihazına dağıtın.
  • Visual Studio Code'un uzak makinedeki bir kapsayıcıda işleme ekleyebilmesi için güncelleştirin launch.json . 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 kapsayıcıya eklemek için Uzak SSH hata ayıklamasını kullanın.

Modülünüzü derleme ve ioT Edge cihazına dağıtma

Visual Studio Code'da deployment.debug.template.json dağıtım bildirim dosyasını açın. Dağıtım bildirimi , 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ğerlerle güncelleştirmeniz gerekir. 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 Azure Container Registry kullanıyorsanız kimlik bilgilerinizi deployment.debug.template.json'deki edgeAgent>settings>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 Explorer görünümünün Azure IoT Hub>Cihazları bölümünde, dağıtım için IoT Edge cihaz adına sağ tıklayın ve ardından Tek Cihaz için Dağıtım Oluştur'u seçin.

    İpucu

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

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

Terminalde komutunu çalıştırarak kapsayıcınızın durumunu cihazınızdan docker ps veya sanal makinenizden de kontrol edebilirsiniz. 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ınız aynı makinede çalışıyorsa, durumu Visual Studio Code Docker görünümünde de de kontrol edebilirsiniz.

Ö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 veya az acr login --name <Azure Container Registry name> kullanındocker login <Azure Container Registry login server>.

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. Bu, ü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'de oturum açın. komutunu kullanmak için Azure CLI'yiaz yüklemeniz gerekebilir. Bu komut, Ayarlar> Access anahtarlarında 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 kapatılırsa devam etmek için Docker ve Azure Container Registry oturum açma adımlarını yineleyin.

Derleme modülü Docker görüntüsü

Modül 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 için görüntüyü 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'a 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 Edge cihazı my-device için IoT Hub my-iot-hub'a 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ında IoT Hub >Güvenlik ayarları>Paylaşılan erişim ilkeleri>iothubowner'ınızda 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ı kullanabilirsiniz.

Visual Studio Code uzaktan hata ayıklamasını etkinleştirmek için Uzaktan Geliştirme uzantısını yükleyin. 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 Uzaktan Geliştirme

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

Hata Ayıklamayı Başlat'ı veya F5'i seçin. Eklenecek 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 Remote SSH kullanarak hata ayıklama

Docker ve Moby altyapıları, uzak bir cihaza bağlı Visual Studio Code'da 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ı olabilir. 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ırmayla ilgili ayrıntılar, Visual Studio Code belgelerindeki 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 yapılandırmak 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ğlan kök düzeyinde ayrıcalıklar gerektirir. 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'da Komut Paleti'ni (Ctrl+Shift+P) kullanarak Docker Bağlamı: Komutunu kullanarak uzak makineye işaret eden Docker bağlamını etkinleştirin. Bu komut hem Visual Studio Code hem de Docker CLI'nın uzak makine bağlamını kullanmasına neden olur.

    İ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
    

    Çıktı, uzak cihazda çalışan kapsayıcıları benzer şekilde listelemelidir:

    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, dosyayı Visual Studio Code'da açarak launch.json yeni bir yapılandırma ekleyin. Yapılandırma ekle'yi 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 içindir. 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ı Uzaktan Hata Ayıklama IoT Edge Modülü 'nü (.NET Core) seçin.

  2. Hata Ayıklamayı Başlat'ı veya F5'i seçin. Eklenecek 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üzde 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.

    Kesme noktasında duraklatılan uzak bir cihazdaki Docker kapsayıcısına eklenmiş Visual Studio Code'un ekran görüntüsü.

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 Visual Studio Code'dan Azure IoT Edge modüllerini dağıtmayı öğrenin.

IoT Edge cihazlarınıza yönelik modüller geliştirmek için Azure IoT Hub SDK'larını anlayın ve kullanın.