Visual Studio Code kullanarak Azure IoT Edge modüllerinde hata ayıklama
Şunlar için geçerlidir: IoT Edge 1.5 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:
- En az bir IoT Edge cihazına sahip etkin bir IoT Hub.
- Fiziksel bir IoT Edge cihazı veya sanal cihaz. Azure'da sanal cihaz oluşturmak için Linux için hızlı başlangıçtaki adımları izleyin.
- Özel bir IoT Edge modülü. Özel modül oluşturmak için Visual Studio Code kullanarak Azure IoT Edge modülleri geliştirme öğreticisindeki 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ı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.
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" } } } }, ...
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\"}]}}}" }
- Visual Studio Code komut paletinde Azure IoT Edge: Build and Push IoT Edge solution komutunu çalıştırın.
deployment.debug.template.json
Çözümünüz için dosyayı seçin.- 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.
- Çö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.
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.Azure Container Registry'de oturum açın. komutunu kullanmak için Azure CLI'yi
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 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
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.
Docker'a bağlanmak için kök düzeyinde 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.
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.
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
.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
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.
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, değişkenleri sol panelde görürsünüz.
Visual Studio Code'da özel modülünüzde kesme noktaları ayarlayın.
Bir kesme noktasına isabet edildiğinde değişkenleri inceleyebilir, kodda ilerleyebilir ve modülünüzde hata ayıklayabilirsiniz.
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 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.