Azure IoT Edge için modüller geliştirmek ve hatalarını ayıklamak için Visual Studio Code kullanma
Şunlar için geçerlidir: IoT Edge 1.4
Bu makalede, birden çok dilde ve birden çok mimaride IoT Edge modülleri geliştirmek ve hatalarını ayıklamak için Visual Studio Code nasıl kullanılacağı gösterilmektedir. Geliştirme bilgisayarınızda Visual Studio Code kullanarak yerel veya uzak modül kapsayıcısında modülünüzü ekleyebilir ve hatalarını ayıklayabilirsiniz.
IoT Edge geliştirme aracı olarak Azure IoT Edge Geliştirme Aracı CLI'sini veya Visual Studio Code uzantısı için Azure IoT Edge araçlarını seçebilirsiniz. Bu makale için araç seçeneğinizi belirlemek için başlangıçtaki araç seçici düğmesini kullanın.
Visual Studio Code, aşağıdaki programlama dillerinde IoT Edge modülleri yazmayı destekler:
- C# ve C# Azure İşlevleri
- C
- Python
- Node.js
- Java
Azure IoT Edge aşağıdaki cihaz mimarilerini destekler:
- x64
- ARM32
- 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 Simulator'da modül kodunuzu başlatabilir ve hatalarını ayıklayabilirsiniz.
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. Öğretici: 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 özelliklerini bilmiyorsanız bkz. hata ayıklamayı Visual Studio Code.
Ö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.
önce Visual Studio Code yükleyin ve ardından aşağıdaki uzantıları ekleyin:
- Azure IoT Edge uzantısı.
- Azure IoT Hub uzantısı.
Modül görüntünüzü derlemek ve dağıtmak için, modül görüntüsünü oluşturmak için Docker'a ve modül görüntüsünü barındıracak bir kapsayıcı kayıt defterine ihtiyacınız vardır:
Modül görüntülerinizi derlemek ve çalıştırmak için geliştirme makinenize Docker uyumlu bir kapsayıcı yönetim sistemi indirip yükleyin. Örneğin Docker Community Edition'ı yükleyin.
Modül görüntülerinizi depolamak için bir Azure Container Registry veya Docker Hub oluşturun.
İpucu
Bulut kayıt defteri yerine prototip ve test amacıyla yerel bir Docker kayıt defteri kullanabilirsiniz.
Azure CLI'yi yükleyin.
IoT Edge çözümünüzün hatalarını ayıklamanızı, çalıştırmanızı ve test etmenizi sağlamak için aşağıdaki komutla Python tabanlı Azure IoT Edge Geliştirme Aracı'nı yükleyin. Python (3.6/3.7) ve Pip3 gereklidir.
pip3 install iotedgedev
Not
Önceden yüklenmiş Python 2.7 de dahil olmak üzere birden çok Python sürümünüz varsa (örneğin, Ubuntu veya macOS'ta), IoT Edge Geliştirme Aracı'nı (iotedgedev) yüklemek için kullandığınızdan
pip3
emin olun.Geliştirme makinenizi ayarlama hakkında daha fazla bilgi için bkz. iotedgedev geliştirme kurulumu.
IoT Edge için test ortamında güncel kalmak için test kapsamı listesine bakın.
Geliştirmekte olduğunuz dile özgü önkoşulları yükleyin:
- .NET Core SDK'sı yükleme
- C# Visual Studio Code uzantısını yükleme
Modülünüzü bir cihazda test etmek için şunları yapmanız gerekir:
- En az bir IoT Edge cihazı olan etkin bir IoT Hub.
- Fiziksel IoT Edge cihazı veya sanal cihaz. Azure'da sanal cihaz oluşturmak için Linux veya Windows için hızlı başlangıçtaki adımları izleyin.
IoT Edge modülü oluşturma
Aşağıdaki adımlar, tercih ettiğiniz geliştirme dilinde bir IoT Edge modülü oluşturmayı gösterir. Bir çözüm oluşturarak ve ardından bu çözümdeki ilk modülü oluşturarak başlarsınız. Her çözüm birden çok modül içerebilir.
IoT Edge Geliştirme Aracı, Azure IoT Edge geliştirmeyi ortam değişkenleri tarafından yönetilen basit komutlarla basitleştirir. Varsayılan modülü ve gerekli tüm yapılandırma dosyalarını içeren IoT Edge Geliştirme Kapsayıcısı ve IoT Edge çözümü iskelesi ile IoT Edge geliştirmeye başlamanızı sağlar.
Seçtiğiniz dosya yolu ile çözümünüz için bir dizin oluşturun. Dizininize
iotedgesolution
geçin.mkdir c:\dev\iotedgesolution
Bir çözüm oluşturmak ve Azure IoT Hub istediğiniz geliştirme dilinde ayarlamak için iotedgedev solution init komutunu kullanın.
iotedgedev solution init betiği aşağıdakiler de dahil olmak üzere birkaç adımı tamamlamanızı ister:
- Azure'da kimlik doğrulaması
- Azure aboneliği seçme
- Kaynak grubu seçme veya oluşturma
- Azure IoT Hub seçme veya oluşturma
- Azure IoT Edge cihazı seçme veya oluşturma
Çözüm oluşturulduktan sonra bu ana dosyalar çözümdedir:
.vscode klasörü launch.json yapılandırma dosyasını içerir.
Her modül için alt klasörleri olan bir modules klasörü. Her modülün alt klasöründe module.json dosyası modüllerin nasıl derlenip dağıtılma şeklini denetler.
Bir .env dosyası, ortam değişkenlerinizi listeler. Kapsayıcı kayıt defteri için ortam değişkeni varsayılan olarak localhost:5000'dir . Kayıt defteriniz Azure Container Registry ise, Azure Container Registry bir kullanıcı adı ve parola ayarlayın. Bu değerleri Azure portal kapsayıcı kayıt defterinizin Ayarlar>Erişim anahtarları menüsünden alın. CONTAINER_REGISTRY_SERVER, kayıt defterinizin Oturum Açma sunucusudur.
Örnek:
CONTAINER_REGISTRY_SERVER="myacr.azurecr.io" CONTAINER_REGISTRY_USERNAME="myacr" CONTAINER_REGISTRY_PASSWORD="<registry_password>"
Üretim senaryolarında, .env dosyası yerine kapsayıcı kayıt defterinize erişim sağlamak için hizmet sorumlularını kullanmanız gerekir. Daha fazla bilgi için bkz. Kapsayıcı kayıt defterinize erişimi yönetme.
Not
Ortam dosyası yalnızca modül için bir görüntü deposu sağlarsanız oluşturulur. Yerel olarak test etmek ve hata ayıklamak için localhost varsayılanlarını kabul ettiyseniz, ortam değişkenlerini bildirmeniz gerekmez.
deployment.template.json ve deployment.debug.template.json adlı iki modül dağıtım dosyası, cihazınıza dağıtılacak modülleri listeler. Varsayılan olarak, liste IoT Edge sistem modüllerini (edgeAgent ve edgeHub) ve aşağıdaki gibi örnek modülleri içerir:
- filtermodule , basit bir filtre işlevi uygulayan örnek bir modüldür.
- Test için kullanabileceğiniz verilerin simülasyonunu yapan SimulatedTemperatureSensor modülü. Dağıtım bildirimlerinin nasıl çalıştığı hakkında daha fazla bilgi için bkz. Modülleri dağıtmak ve yolları oluşturmak için dağıtım bildirimlerini kullanmayı öğrenin. Simülasyon sıcaklık modülünün nasıl çalıştığı hakkında daha fazla bilgi için bkz . SimulatedTemperatureSensor.csproj kaynak kodu.
Not
Tam olarak yüklenen modüller seçtiğiniz dile bağlı olabilir.
Visual Studio Code ve Azure IoT Edge uzantısını kullanın. Bir çözüm oluşturarak ve ardından bu çözümdeki ilk modülü oluşturarak başlarsınız. Her çözüm birden çok modül içerebilir.
Komut Paleti Görüntüle'yi> seçin.
Komut paletinde Azure IoT Edge: Yeni IoT Edge Çözümü komutunu girin ve çalıştırın.
Yeni çözümü oluşturmak istediğiniz klasöre göz atın ve ardından Klasör seç'i seçin.
Çözümünüz için bir ad girin.
Tercih ettiğiniz geliştirme dili için çözümdeki ilk modül olacak bir modül şablonu seçin.
Modülünüz için bir ad girin. Kapsayıcı kayıt defterinizde benzersiz bir ad seçin.
Modülün görüntü deposunun adını belirtin. Visual Studio Code modül adını localhost:5000/<modül adınız> ile otomatik olarak doldurulur. Bunu kendi kayıt defteri bilgilerinizle değiştirin. Test için yerel bir Docker kayıt defteri kullanıyorsanız localhost kullanın. Azure Container Registry kullanıyorsanız kayıt defterinizin ayarlarından Oturum açma sunucusunu kullanın. Oturum açma sunucusu kayıt defteri adı.azurecr.io> gibi< görünür. Dizenin yalnızca localhost:5000 bölümünü değiştirerek son sonucun kayıt defteri adı.azurecr.io/><modül adınız> gibi< görünmesini sağlayın.
Visual Studio Code sağladığınız bilgileri alır, bir IoT Edge çözümü oluşturur ve yeni bir pencereye yükler.
Çözüm içinde dört öğe vardır:
- .vscode klasörü hata ayıklama yapılandırmaları içerir.
- Modüller klasöründe her modül için alt klasörler bulunur. Her modülün klasöründe modüllerin nasıl derlendiğini ve dağıtıldığını denetleen module.json adlı bir dosya bulunur. Modül dağıtım kapsayıcısı kayıt defterini localhost'tan uzak kayıt defterine değiştirmek için bu dosyayı değiştirmeniz gerekir. Bu noktada yalnızca bir modüle sahip olursunuz. Ancak gerekirse daha fazla ekleyebilirsiniz.
- Bir .env dosyası, ortam değişkenlerinizi listeler. Kapsayıcı kayıt defteri için ortam değişkeni varsayılan olarak localhost'tır . Kayıt defteriniz Azure Container Registry ise, Azure Container Registry bir kullanıcı adı ve parola ayarlayın. Bu değerleri Azure portal kapsayıcı kayıt defterinizin Ayarlar>Erişim anahtarları menüsünden alın. CONTAINER_REGISTRY_SERVER, kayıt defterinizin Oturum Açma sunucusudur.
Örnek:
CONTAINER_REGISTRY_SERVER="myacr.azurecr.io"
CONTAINER_REGISTRY_USERNAME="myacr"
CONTAINER_REGISTRY_PASSWORD="<my_acr_password>"
Üretim senaryolarında, .env dosyası yerine kapsayıcı kayıt defterinize erişim sağlamak için hizmet sorumlularını kullanmanız gerekir. Daha fazla bilgi için bkz. Kapsayıcı kayıt defterinize erişimi yönetme.
Not
Ortam dosyası yalnızca modül için bir görüntü deposu sağlarsanız oluşturulur. Yerel olarak test etmek ve hata ayıklamak için localhost varsayılanlarını kabul ettiyseniz, ortam değişkenlerini bildirmeniz gerekmez.
deployment.template.json ve deployment.debug.template adlı iki modül dağıtım dosyası, cihazınıza dağıtılacak modülleri listeler. Varsayılan olarak, liste IoT Edge sistem modüllerini ve test için kullanabileceğiniz verilerin simülasyonunu yapan SimulatedTemperatureSensor modülünü içeren örnek modülleri içerir.
Dağıtım bildirimleri hakkında daha fazla bilgi için bkz. Modülleri dağıtmak ve yolları oluşturmak için dağıtım bildirimlerini kullanmayı öğrenin. Sanal sıcaklık modülü hakkında daha fazla bilgi için bkz . SimulatedTemperatureSensor.csproj kaynak kodu.
Daha fazla modül ekleme
Çözümünüze daha fazla modül eklemek için modules dizinine geçin ve bunları oraya ekleyin.
cd modules
Azure IoT Edge: Komut paletinden IoT Edge Modülü Ekle komutunu çalıştırın. Ayrıca Visual Studio Code Gezgini görünümünde modüller klasörüne veya deployment.debug.template.json
dosyaya sağ tıklayıp IoT Edge Modülü Ekle'yi seçebilirsiniz.
Modülleri seçtiğiniz dili kullanarak yükleyin.
.NET IoT Edge C# şablonunu yükleyin.
dotnet new -i Microsoft.Azure.IoT.Edge.Module
Modüller klasöründe yeni bir dizin klasörü oluşturun ve dizini yeni klasörle değiştirin. Örneğin,
mkdir SampleModule
sonracd SampleModule
.Yeni bir C# modülü eklemek için IoT Edge .NET şablonunu kullanın. Örneğin, aşağıdaki komut SampleModule adlı yeni bir modül ekler ve module.json dosyasını görüntü deposu olarak myacr.azurecr.io/samplemodule kullanacak şekilde yapılandırılır.
dotnet new aziotedgemodule --name SampleModule --repository myacr.azurecr.io/samplemodule
komutu geçerli dizinde modülü oluşturur ve module.json dosyasını depo bilgileriyle yapılandırmaktadır.
Modülünüzü geliştirme
Çözümle birlikte gelen varsayılan modül kodu aşağıdaki konumda bulunur:
Örnek modüller çözümü oluşturmanıza, kapsayıcı kayıt defterinize göndermenize ve bir cihaza dağıtmanıza olanak sağlar. Bu işlem, herhangi bir kod değiştirmeden test etmeye başlamanızı sağlar. Örnek modül bir kaynaktan giriş alır (bu örnekte, verilerin simülasyonunu yapan SimulatedTemperatureSensor modülü) ve bunu IoT Hub.
Şablonu kendi kodunuzla özelleştirmeye hazır olduğunuzda güvenlik, cihaz yönetimi ve güvenilirlik gibi IoT çözümlerinin temel gereksinimlerini karşılayan modüller oluşturmak için Azure IoT Hub SDK'larını kullanın.
IoT Edge simülatörü kullanarak kapsayıcı olmadan hata ayıklama
Modülünüz, iletileri başlatabilmesi, çalıştırabilmesi ve yönlendirebilmesi için varsayılan modül kodunda moduleClient nesnesinin kullanılmasını gerektirir. Modül iletileri aldığında işlem yapmak için varsayılan giriş kanalı input1'i de kullanacaksınız.
IoT Edge simülatörünü ayarlama
IoT Edge modüllerin çalıştırılması ve hata ayıklaması için bir IoT Edge ortamı gerekir. Tam IoT Edge güvenlik alt sistemini ve çalışma zamanını çalıştırmak yerine geliştirme makinenizde bir IoT Edge simülatörü kullanabilirsiniz. Birden çok modülle çözüm hatalarını ayıklamak için bir cihazın benzetimini yapabilir veya tek bir modül uygulamasının benzetimini yapabilirsiniz.
Seçenek 1: IoT Edge çözümünün benzetimini yapın:
- Sol taraftaki Gezgin sekmesinde Azure IoT Hub bölümünü genişletin. IoT Edge cihaz kimliğinize sağ tıklayın ve simülatöre cihaz bağlantı dizesiyle başlamak için Simülatör IoT Edge Kur'u seçin.
- tümleşik terminaldeki ilerleme ayrıntılarını okuyarak IoT Edge Simülatörünün başarıyla ayarlandığını görebilirsiniz.
Seçenek 2: Tek bir IoT Edge modülünün benzetimini yapın:
Visual Studio Code komut paletinde Azure IoT Edge: Start IoT Edge Hub Simulator for Single Module komutunu çalıştırın.
Modülünüzle test etmek istediğiniz girişlerin adlarını belirtin. Varsayılan örnek kodu kullanıyorsanız input1 değerini kullanın.
komutu iotedgehubdev CLI'yi tetikler ve ardından IoT Edge simülatörünü ve test yardımcı programı modül kapsayıcısını başlatır. Simülatör tek modül modunda başarıyla başlatıldıysa tümleşik terminalde aşağıdakine benzer bir çıkış görebilirsiniz. Çıktı, simülatöre ileti göndermek için örnek
curl
bir komut içerir. Komutunu daha sonra kullanacaksınızcurl
.D:\Workspaces\EdgeSolution>iotedgehubdev start -i "input1" ...
Modülün çalışma durumunu görmek için Visual Studio Code'daki Docker Gezgini görünümünü kullanabilirsiniz.
edgeHubDev kapsayıcısı, yerel IoT Edge simülatörünün çekirdeğidir. IoT Edge güvenlik daemon'ı olmadan geliştirme makinenizde çalıştırılabilir ve yerel modül uygulamanız veya modül kapsayıcılarınız için ortam ayarları sağlar. Giriş kapsayıcısı, iletilerin modülünüzdeki hedef giriş kanalına köprülenmesine yardımcı olmak için REST API'lerini kullanıma sunar.
Başlatma modunda hata ayıklama modülü
Simülatör başarıyla başlatıldıktan sonra modül kodunuzda hata ayıklayabilirsiniz.
Ortamınızı hata ayıklamaya hazırlayın, modülünüzde bir kesme noktası ayarlayın ve kullanılacak hata ayıklama yapılandırmasını seçin.
tümleşik Visual Studio Code terminalde dizini modül adı> klasörünüzle< değiştirin ve ardından .NET Core uygulaması oluşturmak için aşağıdaki komutu çalıştırın.
dotnet build
Dosyayı ModuleBackgroundService.cs
açın ve bir kesme noktası ekleyin.
Soldaki menüden hata ayıklama simgesini seçerek veya yazarak Ctrl+Shift+D
Visual Studio Code Hata Ayıklama görünümüne gidin. Açılan listeden modülünüzün adının> Yerel Hata Ayıklama (.NET Core) hata ayıklama yapılandırmasını< seçin.
Not
.NET Core'unuz TargetFramework
içindeki launch.json
program yolunuzla tutarlı değilse, Visual Studio Code bu programı başarıyla başlatabilmesi için içindeki program yolunu launch.json
.csproj dosyanızdaki ile eşleşecek TargetFramework
şekilde el ile güncelleştirmeniz gerekir.
Hata Ayıklamayı Başlat'ı seçin veya hata ayıklama oturumunu başlatmak için F5 tuşuna basın.
tümleşik Visual Studio Code terminalde aşağıdaki komutu çalıştırarak modülünüze bir Merhaba Dünya iletisi gönderin. Bu, IoT Edge simülatörünü ayarlarken önceki adımlarda gösterilen komutdur.
curl --header "Content-Type: application/json" --request POST --data '{"inputName": "input1","data":"hello world"}' http://localhost:53000/api/v1/messages
Not
Windows kullanıyorsanız Visual Studio Code tümleşik terminalinizin kabuğunun Git Bash veya WSL Bash olduğundan emin olun. Komutu bir PowerShell veya komut isteminden çalıştıramazsınız
curl
.İpucu
İleti göndermek
curl
için yerine PostMan veya diğer API araçlarını da kullanabilirsiniz.Visual Studio Code Hata Ayıklama görünümünde değişkenleri sol panelde görürsünüz.
Hata ayıklama oturumunuzu durdurmak için Durdur düğmesini seçin veya Shift + F5 tuşlarına basın ve ardından simülatörü durdurmak ve temizlemek için komut paletinde Azure IoT Edge: Stop IoT Edge Simulator komutunu çalıştırın.
IoT Edge simülatörü kullanarak ekleme modunda hata ayıklama
Varsayılan çözümünüz iki modül içerir; biri sanal sıcaklık sensörü modülü, diğeri de boru modülüdür. Simülasyon sıcaklık sensörü kanal modülüne iletiler gönderir ve ardından iletiler IoT Hub gider. Oluşturduğunuz 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 üzere .debug uzantısıyla biten dosyalardan herhangi birini kullanın.
Şu anda ekleme modunda hata ayıklama yalnızca aşağıdaki gibi desteklenir:
- Azure İşlevleri modülleri dahil olmak üzere C# modülleri Linux amd64 kapsayıcılarında hata ayıklamayı destekler
- Node.js modülleri Linux amd64 ve arm32v7 kapsayıcılarında ve Windows amd64 kapsayıcılarında hata ayıklamayı destekler
- Java modülleri Linux amd64 ve arm32v7 kapsayıcılarında hata ayıklamayı destekler
İpucu
Visual Studio Code durum çubuğundaki öğeye tıklayarak IoT Edge çözümünüz için varsayılan platform seçenekleri arasında geçiş yapabilirsiniz.
IoT Edge çözümü için IoT Edge simülatörü ayarlama
Geliştirme makinenizde, IoT Edge çözümünüzü çalıştırabilmeniz için IoT Edge güvenlik daemon'ını yüklemek yerine bir IoT Edge simülatörü başlatabilirsiniz.
Sol taraftaki Gezgin sekmesinde Azure IoT Hub bölümünü genişletin. IoT Edge cihaz kimliğinize sağ tıklayın ve simülatörü cihaz bağlantı dizesiyle başlatmak için Simülatör IoT Edge Kur'u seçin.
Tümleşik terminaldeki ilerleme ayrıntılarını okuyarak IoT Edge Simülatörü'nin başarılı kurulumunu görebilirsiniz.
Ekleme modunda hata ayıklama ve hata ayıklama için kapsayıcı oluşturma ve çalıştırma
Modül dosyanızı (
ModuleBackgroundService.cs
,app.js
,App.java
veya<your module name>.cs
) açın ve bir kesme noktası ekleyin.Visual Studio Code Gezgini görünümünde, çözümünüz için dosyaya
deployment.debug.template.json
sağ tıklayın ve ardından Simülatör'de IoT Edge çözümü oluştur ve çalıştır'ı seçin. Tüm modül kapsayıcı günlüklerini aynı pencerede izleyebilirsiniz. Kapsayıcı durumunu izlemek için Docker görünümüne de gidebilirsiniz.Visual Studio Code Hata Ayıklama görünümüne gidin ve modülünüz için hata ayıklama yapılandırma dosyasını seçin. Hata ayıklama seçeneği adı, uzaktan hata ayıklama modülünüzün adıyla<> benzer olmalıdır
Hata Ayıklamayı Başlat'ı seçin veya F5 tuşuna basın. Eklenecek işlemi seçin.
Visual Studio Code Hata Ayıklama görünümünde, sol panelde değişkenleri görürsünüz.
Hata ayıklama oturumunu durdurmak için önce Durdur düğmesini seçin veya Shift + F5 tuşlarına basın ve ardından komut paletinden Azure IoT Edge: Stop IoT Edge Simulator öğesini seçin.
Not
Yukarıdaki örnekte kapsayıcılarda IoT Edge modüllerinde hata ayıklama gösterilmektedir. Modülünüzün kapsayıcı createOptions
ayarlarına kullanıma sunulan bağlantı noktaları ekledi. Modüllerinizde hata ayıklamayı tamamladıktan sonra üretime hazır IoT Edge modülleri için kullanıma sunulan bu bağlantı noktalarını kaldırmanızı öneririz.
bu örnek, Azure İşlevleri dahil olmak üzere C# dilinde yazılmış modüller için kapsayıcı görüntünüzde derlenirken .NET Core komut satırı hata ayıklayıcısını (VSDBG) içeren hata ayıklama sürümünü Dockerfile.amd64.debug
temel alır. C# modüllerinizde hata ayıkladıktan sonra üretime hazır IoT Edge modülleri için VSDBG olmadan Dockerfile'ı doğrudan kullanmanızı öneririz.
IoT Edge çalışma zamanıyla 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 üzere .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 aynı makinede veya daha çok Visual Studio Code geliştirme makinesinde ve IoT Edge çalışma zamanı ile modülleri başka bir fiziksel makinede çalışıyor olabilir. Visual Studio Code hata ayıklamak için şunları gerçekleştirmelisiniz:
- 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ıda işleme eklenebilmesi 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 cihaza 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 bir Azure Container Registry kullanıyorsanız, kimlik bilgilerinizi deployment.debug.template.json dosyasının 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 sağlayın. Örnek:
"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" } } } }, ...
Listelenen her sistem (edgeHub ve edgeAgent) ve özel modül (örneğin tempSensor) 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: Derleme ve gönderme IoT Edge çözümü komutunu çalıştırın.
deployment.debug.template.json
Çözümünüz için dosyayı seçin.- 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 ardından Tek Cihaz için Dağıtım Oluştur'u seçin.
İpucu
Seçtiğiniz cihazın IoT Edge bir cihaz olduğunu onaylamak için modül listesini genişletmek ve $edgeHub ile $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 Bildirimini 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 (ACR) 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 <ACR name>
kullanındocker login <ACR login server>
.
Derleme modülü Docker görüntüsü
Modülün Dockerfile dosyasını kullanarak Modül Docker görüntüsünü oluşturun .
docker build --rm -f "<DockerFilePath>" -t <ImageNameAndTag> "<ContextPath>"
Örneğin, yerel kayıt defteri veya Azure kapsayıcı kayıt defteri 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>
Örnek:
# 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 cihaza dağıtın.
Modülleri Azure IoT Hub dağıtmak için IoT Edge Azure CLI set-modules komutunu kullanın. Örneğin, my-device IoT Edge cihazı için my-iot-hub IoT Hub deployment.debug.amd64.json dosyasında tanımlanan modülleri 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 Güvenlik ayarları>Paylaşılan erişim ilkeleri>iothubowner'ınızdaki Azure portal IoT Hub > bağlantı dizenizi bulabilirsiniz.
Modülünüzde hata ayıklama
Geliştirme diliniz için modül dosyasını açın ve bir kesme noktası ekleyin:
Kesme noktanızı dosyasına ModuleBackgroundService.cs
ekleyin.
Uzak bir cihazdaki modüllerde hata ayıklamak için Visual Studio Code'de Uzak SSH hata ayıklamasını kullanabilirsiniz.
Visual Studio Code uzaktan hata ayıklamayı etkinleştirmek için Uzaktan Geliştirme uzantısını yükleyin. Uzaktan hata ayıklama Visual Studio Code hakkında daha fazla bilgi için bkz. Uzaktan Geliştirme Visual Studio Code.
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 için 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şkenleri 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 hata ayıklamanıza olanak sağlayan kapsayıcılara yönelik SSH bağlantılarını destekler. Bu özelliği kullanabilmek için aşağıdaki önkoşulları karşılamanız gerekir.
Docker SSH tüneli yapılandırma
Geliştirme bilgisayarınızda SSH tüneli yapılandırmak için Docker SSH tüneli bölümü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 bağlantısına izin vermek için Docker'ı kök olmayan kullanıcı olarak yönetme bölümündeki adımları izleyin. Hata ayıklamayı tamamladığınızda, 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 makineyi 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ılan olarak değiştirmeyi 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.4 "/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.4 "/bin/sh -c 'exec /a…" 24 hours ago Up 6 minutes edgeAgent
.Visual Studio Code dizininde, dosyayı Visual Studio Code'da açarak launch.json dosyasına 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.
Kesme noktasına ulaşıldığında 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 Visual Studio Code dağıtmayı öğrenin.
IoT Edge cihazlarınıza yönelik modüller geliştirmek için Azure IoT Hub SDK'ları anlayın ve kullanın.