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 onay işareti 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:

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:

  • 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:

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.

  1. Seçtiğiniz dosya yolu ile çözümünüz için bir dizin oluşturun. Dizininize iotedgesolution geçin.

    mkdir c:\dev\iotedgesolution
    
  2. 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 --template csharp
    

    Çözüm filtermodule adlı varsayılan bir C# modülü içerir.

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:

    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.

  1. Komut Paleti Görüntüle'yi> seçin.

  2. Komut paletinde Azure IoT Edge: Yeni IoT Edge Çözümü komutunu girin ve çalıştırın.

    Yeni bir IoT Edge çözümü çalıştırma işleminin ekran görüntüsü.

  3. Yeni çözümü oluşturmak istediğiniz klasöre göz atın ve ardından Klasör seç'i seçin.

  4. Çözümünüz için bir ad girin.

  5. Tercih ettiğiniz geliştirme dili için çözümdeki ilk modül olacak bir modül şablonu seçin.

  6. Modülünüz için bir ad girin. Kapsayıcı kayıt defterinizde benzersiz bir ad seçin.

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

    Docker görüntü deposu sağlama ekran görüntüsü.

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.

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.

  1. .NET IoT Edge C# şablonunu yükleyin.

    dotnet new -i Microsoft.Azure.IoT.Edge.Module
    
  2. Modüller klasöründe yeni bir dizin klasörü oluşturun ve dizini yeni klasörle değiştirin. Örneğin, mkdir SampleModule sonra cd SampleModule.

  3. 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:

modules/<modülünüzün adı>/ModuleBackgroundService.cs

Ö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:

  1. 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.
  2. 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:

  1. Visual Studio Code komut paletinde Azure IoT Edge: Start IoT Edge Hub Simulator for Single Module komutunu çalıştırın.

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

  3. 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ız curl .

    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.

    Visual Studio Code Docker Gezgini bölmesinde simülatör modülü durumunu gösteren ekran görüntüsü.

    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+DVisual 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.jsonprogram 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.

  1. Hata Ayıklamayı Başlat'ı seçin veya hata ayıklama oturumunu başlatmak için F5 tuşuna basın.

  2. 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 curliçin yerine PostMan veya diğer API araçlarını da kullanabilirsiniz.

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

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

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

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

  1. Modül dosyanızı (ModuleBackgroundService.cs, app.js, App.javaveya <your module name>.cs) açın ve bir kesme noktası ekleyin.

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

    İzleme Değişkenleri'nin ekran görüntüsü.

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

  4. Hata Ayıklamayı Başlat'ı seçin veya F5 tuşuna basın. Eklenecek işlemi seçin.

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

  6. 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.debugtemel 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ştirinlaunch.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.

  1. 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"
              }
            }
          }
        },
    ...
    
  2. 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\"}]}}}"
    }
    
  1. Visual Studio Code komut paletinde Azure IoT Edge: Derleme ve gönderme IoT Edge çözümü 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 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.

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

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

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

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

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

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

  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. Kesme noktasına ulaşıldığında 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 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 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.