Azure IoT Edge için modüller geliştirmek ve hatalarını ayıklamak için Visual Studio 2022'yi kullanma

Ş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, özel Azure IoT Edge modülleri geliştirmek, hatalarını ayıklamak ve dağıtmak için Visual Studio 2022'nin nasıl kullanılacağı gösterilmektedir. Visual Studio 2022, C ve C# dilinde yazılmış IoT Edge modülleri için şablonlar sağlar. Desteklenen cihaz mimarileri Windows x64, Linux x64, ARM32 ve ARM64'tür (önizleme). Desteklenen işletim sistemleri, diller ve mimariler hakkında daha fazla bilgi için bkz . Dil ve mimari desteği.

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

  • Komut satırı arabirimi (CLI), geliştirme için tercih edilen araçtır.
  • Visual Studio uzantısı için Azure IoT Edge araçları. Uzantı bakım modundadır.

Bu makale için araç seçeneğinizi belirlemek için başlangıçtaki araç seçici düğmesini kullanın. Her iki araç da aşağıdaki avantajları sağlar:

  • Yerel geliştirme bilgisayarınızda IoT Edge çözümleri ve modülleri oluşturun, düzenleyin, derleyin, çalıştırın ve hatalarını ayıklar.
  • Azure IoT modüllerinizi Visual Studio geliştirmenin avantajlarıyla C veya C# dilinde kodlayın.
  • IoT Edge çözümünüzü Azure IoT Hub aracılığıyla bir IoT Edge cihazına dağıtın.

Önkoşullar

Bu makalede, geliştirme makineniz olarak Windows çalıştıran bir makine kullandığınız varsayılır.

  • Geliştirme makinenize Visual Studio 2022'yi yükleyin veya değiştirin. C++ iş yükleri seçenekleriyle Azure geliştirme ve Masaüstü geliştirme seçeneklerini belirleyin.

  • Visual Studio Market'ten Azure IoT Edge Araçları'nı indirin ve yükleyin. IoT Edge çözümünüzü oluşturmak ve oluşturmak için Azure IoT Edge Araçları uzantısını kullanabilirsiniz. Tercih edilen geliştirme aracı, komut satırı (CLI) Azure IoT Edge Geliştirme Aracı'dır. Uzantı, Visual Studio projesini oluştururken kullanılan Azure IoT Edge proje şablonlarını içerir. Şu anda kullandığınız geliştirme aracından bağımsız olarak uzantının yüklü olması gerekir.

    Önemli

    VS 2022 için Azure IoT Edge Araçları uzantısı bakım modundadır. Tercih edilen geliştirme aracı, komut satırı (CLI) Azure IoT Edge Geliştirme Aracı'dır.

    İpucu

    Visual Studio 2019 kullanıyorsanız Visual Studio marketinden VS 2019 için Azure IoT Edge Araçları'nı indirip yükleyin.

  • Vcpkg kitaplık yöneticisini yükleme

    git clone https://github.com/Microsoft/vcpkg
    cd vcpkg
    bootstrap-vcpkg.bat
    

    Windows için azure-iot-sdk-c paketini yükleme

    vcpkg.exe install azure-iot-sdk-c:x64-windows
    vcpkg.exe --triplet x64-windows integrate install
    
  • 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.

  • Linux kapsayıcılarıyla modül geliştirmek için Docker Desktop gereksinimlerini karşılayan bir Windows bilgisayar kullanın.

  • Modül görüntülerinizi depolamak için bir Azure Container Registry veya Docker Hub oluşturun.

    İpucu

    Prototip ve test amacıyla bulut kayıt defteri yerine yerel bir Docker kayıt defteri kullanabilirsiniz.

  • Azure CLI’yi yükleyin.

  • Modülünüzü bir cihazda test etmek için en az bir IoT Edge cihazına sahip etkin bir IoT Hub'ınız olmalıdır. Test için bir IoT Edge cihazı oluşturmak için Azure portalında veya CLI ile bir cihaz oluşturabilirsiniz:

    • Azure portalında bir tane oluşturmak en hızlı olanıdır. Azure portalından IoT Hub kaynağınıza gidin. Cihaz yönetimi menüsünün altında Cihazlar'ı ve ardından Cihaz Ekle'yi seçin.

      Cihaz oluştur bölümünde Cihaz Kimliği'ni kullanarak cihazınızı adlandırın, IoT Edge Cihazı'nı işaretleyin ve sol alttaki Kaydet'i seçin.

      Son olarak, Cihaz yönetimi > Cihazları menüsünden yeni cihazınızın IoT Hub'ınızda mevcut olduğunu onaylayın. Azure portalı üzerinden IoT Edge cihazı oluşturma hakkında daha fazla bilgi için Simetrik anahtarları kullanarak Linux'ta IoT Edge cihazı oluşturma ve sağlama konularını okuyun.

    • CLI ile bir IoT Edge cihazı oluşturmak için Linux veya Windows için hızlı başlangıçtaki adımları izleyin. IoT Edge cihazını kaydetme işleminde bir IoT Edge cihazı oluşturursunuz.

    Geliştirme makinenizde IoT Edge daemon çalıştırıyorsanız Visual Studio'da geliştirmeye başlamadan önce EdgeHub ve EdgeAgent'ı durdurmanız gerekebilir.

Azure IoT Edge projesi oluşturma

Visual Studio'daki IoT Edge proje şablonu, IoT Edge cihazlarına dağıtmak için bir çözüm oluşturur. İlk olarak bir Azure IoT Edge çözümü oluşturursunuz. Ardından, bu çözümde bir modül oluşturursunuz. Her IoT Edge çözümü birden fazla modül içerebilir.

Çözümümüzde üç proje oluşturacağız. Sıcaklık sensörü modülüne ek olarak EdgeAgent ve EdgeHub'ı içeren ana modül. Ardından iki IoT Edge modülü daha ekleyeceksiniz.

Önemli

Visual Studio tarafından oluşturulan IoT Edge proje yapısı, Visual Studio Code'dakiyle aynı değildir.

Şu anda Azure IoT Edge Geliştirme Aracı CLI'sı Visual Studio proje türünün oluşturulmasını desteklememektedir. Visual Studio projesini oluşturmak için Visual Studio IoT Edge uzantısını kullanmanız gerekir.

  1. Visual Studio'da yeni bir proje oluşturun.

  2. Yeni proje oluştur bölümünde Azure IoT Edge'i arayın. IoT Edge cihazınızın platformu ve mimarisiyle eşleşen projeyi seçin ve İleri'yi seçin.

  3. Yeni projenizi yapılandırın bölümünde projeniz için bir ad girin, konumu belirtin ve Oluştur'u seçin.

  4. Modül Ekle bölümünde geliştirmek istediğiniz modül türünü seçin. Dağıtımınıza eklemek istediğiniz mevcut bir modül varsa Mevcut modül'e tıklayın.

  5. Modül Adı alanına modülünüz için bir ad girin. Kapsayıcı kayıt defterinizde benzersiz bir ad seçin.

  6. Depo Url'sinde modülün görüntü deposunun adını belirtin. Visual Studio, modül adını localhost:5000/<modülünüzün adıyla> 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 localhost:5000 bölümünü yalnızca değiştirerek son sonucun kayıt defteri adı.azurecr.io/<> modül adınız> gibi <görünmesini sağlayın.

  7. Modülünüzü projeye eklemek için Ekle'yi seçin.

    Uygulama ve Modülün nasıl ekleneceğini gösteren ekran görüntüsü.

    Not

    Mevcut bir IoT Edge projeniz varsa, module.json dosyasını açarak depo URL'sini değiştirebilirsiniz. Depo URL'si, JSON dosyasının depo özelliğinde bulunur.

Artık Visual Studio çözümünüzde bir IoT Edge projeniz ve ioT Edge modülünüz var.

Proje yapısı

Çözümünüzde, bir ana proje klasörü ve tek bir modül klasörü de dahil olmak üzere iki proje düzeyinde klasör vardır. Örneğin, AzureIotEdgeApp1 adlı bir ana proje klasörünüz ve IotEdgeModule1 adlı bir modül klasörünüz olabilir. Ana proje klasörü dağıtım bildiriminizi içerir.

Modül projesi klasörü, modül kodunuz için seçtiğiniz dile bağlı olarak veya main.c adlı Program.cs bir dosya içerir. Bu klasör, modülünüzün meta verilerini açıklayan adlı module.json bir dosya da içerir. Burada yer alan çeşitli Docker dosyaları, modülünüzü Windows veya Linux kapsayıcısı olarak oluşturmak için gereken bilgileri sağlar.

Projenizin dağıtım bildirimi

Düzenlediğiniz dağıtım bildiriminin adıdır deployment.debug.template.json. Bu dosya, bir cihazda çalışan tüm modülleri ve birbirleriyle nasıl iletişim kuracaklarını tanımlayan bir IoT Edge dağıtım bildirimi şablonudur. Dağıtım bildirimleri hakkında daha fazla bilgi için bkz . Modülleri dağıtmayı ve yolları belirlemeyi öğrenin.

Bu dağıtım şablonunu açarsanız, bu Visual Studio projesinde oluşturduğunuz özel modülün yanı sıra edgeAgent ve edgeHub gibi iki çalışma zamanı modülünün de dahil olduğunu görürsünüz. SimulatedTemperatureSensor adlı dördüncü modül de dahildir. Bu varsayılan modül, modüllerinizi test etmek veya gerekli değilse silmek için kullanabileceğiniz sanal veriler oluşturur. Simülasyon sıcaklık algılayıcısının nasıl çalıştığını görmek için SimulatedTemperatureSensor.csproj kaynak kodunu görüntüleyin.

IoT Edge çalışma zamanı sürümünü ayarlama

Şu anda en son kararlı çalışma zamanı sürümü 1.5'tir. IoT Edge çalışma zamanı sürümünü en son kararlı sürüme veya cihazlarınız için hedeflemek istediğiniz sürüme güncelleştirmeniz gerekir.

  1. Çözüm Gezgini ana projenizin adına sağ tıklayın ve IoT Edge çalışma zamanı sürümünü ayarla'yı seçin.

    'IoT Edge Çalışma Zamanı sürümünü ayarla' adlı menü öğesini bulma ve seçme işleminin ekran görüntüsü.

  2. IoT Edge cihazlarınızın çalıştırılan çalışma zamanı sürümünü seçmek için açılan menüyü kullanın, ardından değişikliklerinizi kaydetmek için Tamam'ı seçin. Değişiklik yapılmadıysa çıkmak için İptal'i seçin.

    Uzantı şu anda en son çalışma zamanı sürümleri için bir seçim içermez. Çalışma zamanı sürümünü 1.2'den yüksek bir sürüme ayarlamak istiyorsanız deployment.debug.template.json dağıtım bildirim dosyasını açın. edgeAgent ve edgeHub sistem çalışma zamanı modülü görüntülerinin çalışma zamanı sürümünü değiştirin. Örneğin, IoT Edge çalışma zamanı sürüm 1.5'i kullanmak istiyorsanız dağıtım bildirim dosyasında aşağıdaki satırları değiştirin:

    "systemModules": {
       "edgeAgent": {
        //...
          "image": "mcr.microsoft.com/azureiotedge-agent:1.5"
        //...
       "edgeHub": {
       //...
          "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
       //...
    
  3. Sürümü değiştirdiyseniz, projenizin adına sağ tıklayıp IoT Edge için dağıtım oluştur'u seçerek dağıtım bildiriminizi yeniden oluşturun. Bu, dağıtım şablonunuzu temel alan bir dağıtım bildirimi oluşturur ve Visual Studio projenizin yapılandırma klasöründe görünür.

  1. 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çıklayan bir JSON belgesidir.

  2. edgeAgent ve edgeHub sistem çalışma zamanı modülü görüntülerinin çalışma zamanı sürümünü değiştirin. Örneğin, IoT Edge çalışma zamanı sürüm 1.5'i kullanmak istiyorsanız dağıtım bildirim dosyasında aşağıdaki satırları değiştirin:

    "systemModules": {
        "edgeAgent": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-agent:1.5",
        //...
        "edgeHub": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
        //...
    

Modül altyapısı ve geliştirme seçenekleri

Yeni bir modül eklediğinizde, herhangi bir koda dokunmadan test etmeye başlayabilmeniz için bir cihaza derlenip dağıtılmaya hazır varsayılan kodla birlikte gelir. Modül kodu modül klasöründe (C#için) veya main.c (C için) adlı Program.cs bir dosyada bulunur.

Varsayılan çözüm, SimulatedTemperatureSensor modülündeki simülasyon verilerinin modülünüze yönlendirilmesi için oluşturulur ve bu da girişi alır ve ardından IoT Hub'a gönderir.

Modül şablonunu kendi kodunuzla özelleştirmeye hazır olduğunuzda Azure IoT Hub SDK'larını kullanarak güvenlik, cihaz yönetimi ve güvenilirlik gibi IoT çözümlerinin temel gereksinimlerini karşılayan modüller oluşturun.

Simülatörü kullanarak hata ayıklama

Azure IoT EdgeHub Geliştirme Aracı, yerel bir geliştirme ve hata ayıklama deneyimi sağlar. Araç, IoT Edge modüllerini ve çözümlerini yerel olarak oluşturabilmeniz, geliştirebilmeniz, test edebilmeniz, çalıştırabilmeniz ve hatalarını ayıklayabileceğiniz IoT Edge çalışma zamanı olmadan IoT Edge modüllerini başlatmanıza yardımcı olur. Görüntüleri kapsayıcı kayıt defterine göndermeniz ve test için bir cihaza dağıtmanız gerekmez.

Daha fazla bilgi için bkz . Azure IoT EdgeHub Geliştirme Aracı.

Visual Studio'da aracı başlatmak için:

  1. Azure portalından veya Azure CLI'dan IoT Edge cihazınızın (IoT Hub'ınızda bulunur) bağlantı dizesi alın.

    bağlantı dizesi almak için CLI kullanıyorsanız, "[device_id]" ve "[hub_name]" değerlerini kendi değerlerinizle değiştirerek şu komutu kullanın:

    az iot hub device-identity connection-string show --device-id [device_id] --hub-name [hub_name]
    
  2. Visual Studio'daki Araçlar menüsünden Azure IoT Edge Araçları>Kurulumu IoT Edge Simülatörü'ne tıklayın.

  3. bağlantı dizesi yapıştırın ve Tamam'ı seçin.

Not

Sonuçlar sonraki tüm Azure IoT Edge çözümlerine otomatik olarak uygulandığından bu adımları geliştirme bilgisayarınızda yalnızca bir kez izlemeniz gerekir. Farklı bir bağlantı dizesi değiştirmeniz gerekiyorsa bu yordam yeniden izlenebilir.

Tek bir modül oluşturma ve hata ayıklama

Genellikle, birden çok modül içeren bir çözümün tamamında çalıştırmadan önce her modülü test etmek ve hatalarını ayıklamak istersiniz. IoT Edge simülatör aracı, 53000 numaralı bağlantı noktası üzerinden ileti göndermeyi yalıtarak tek bir modül çalıştırmanızı sağlar.

  1. Çözüm Gezgini modül projesi klasörünü seçin ve vurgulayın (örneğin, IotEdgeModule1). Özel modülü başlangıç projesi olarak ayarlayın. Menüden Proje>Başlangıç Projesi Olarak Ayarla'yı seçin.

  2. Tek bir modül için IoT Edge simülatörünü başlatmak için F5 tuşuna basın veya araç çubuğunu çalıştır düğmesini seçin. Başlangıçta 10-20 saniye sürebilir.

    Modülü çalıştırma işleminin ekran görüntüsü.

  3. Modül başarıyla başlatıldıysa bir .NET Core konsol uygulaması penceresi görmeniz gerekir.

  4. Modülü incelemek için bir kesme noktası ayarlayın.

    • C# dilinde geliştiriyorsanız, ModuleBackgroundService.cs işlevinde PipeMessage()bir kesme noktası ayarlayın.
    • C kullanıyorsanız main.c dosyasındaki InputQueue1Callback() işlevinde bir kesme noktası ayarlayın.
  5. bir ileti göndererek modülü test edin. Tek bir modülde hata ayıklarken, simülatör iletiler için varsayılan bağlantı noktası 53000'i dinler. Modülünüze ileti göndermek için Git Bash veya WSL Bash gibi bir komut kabuğundan aşağıdaki curl komutunu çalıştırın.

    curl --header "Content-Type: application/json" --request POST --data '{"inputName": "input1","data":"hello world"}' http://localhost:53000/api/v1/messages
    

    URL'de eşleşmeyen kapatma ayracı/köşeli ayraç hatası alırsanız, bunun yerine aşağıdaki komutu deneyin:

    curl --header "Content-Type: application/json" --request POST --data "{\"inputName\": \"input1\", \"data\", \"hello world\"}"  http://localhost:53000/api/v1/messages
    

    Çıkış konsolu, Visual Studio projesi ve Bash penceresinin ekran görüntüsü.

    Kesme noktası tetiklenmelidir. Hata ayıklayıcı çalışırken bulunan Visual Studio Locals penceresinde değişkenleri izleyebilirsiniz. Windows>Yerel Ayarlarında Hata Ayıklama'ya >gidin.

    Bash veya kabuğunuzda bir {"message":"accepted"} onay görmeniz gerekir.

    .NET konsolunuzda şunu görmeniz gerekir:

    IoT Hub module client initialized.
    Received message: 1, Body: [hello world]
    

    İpucu

    İleti göndermek curliçin yerine PostMan veya diğer API araçlarını da kullanabilirsiniz.

  6. Hata ayıklamayı durdurmak için Ctrl + F5 tuşlarına basın veya durdur düğmesini seçin.

Birden çok modül oluşturma ve hata ayıklama

Tek bir modül geliştirmeyi tamamladıktan sonra birden çok modülle çözümün tamamını çalıştırmak ve hata ayıklamak isteyebilirsiniz. IoT Edge simülatör aracı, ileti yönlendirme için sanal edgeHub da dahil olmak üzere dağıtım bildiriminde tanımlanan tüm modülleri çalıştırmanıza olanak tanır. Bu örnekte iki özel modül ve simülasyon sıcaklık sensörü modülünü çalıştıracaksınız. Simülasyon sıcaklık sensörü modülünden gelen iletiler her özel modüle yönlendirilir.

  1. Çözüm Gezgini'da, ana proje klasörüne sağ tıklayarak çözüme ikinci bir modül ekleyin. Menüde Yeni IoT Edge Modülü Ekle'yi>seçin.

    Menüden 'Yeni IoT Edge Modülü' ekleme işleminin ekran görüntüsü.

  2. Add module Pencerede yeni modülünüze bir ad verin ve depo URL'sinin bölümünü daha önce yaptığınız gibi Azure Container Registry oturum açma sunucunuzla değiştirinlocalhost:5000.

  3. Yeni modülün modüller bölümüne eklendiğini görmek için dosyasını deployment.debug.template.json açın. Yeni modülden IoT Hub'a ileti göndermek için içindeki yollar bölümüne EdgeHub yeni bir yol da eklendi. Simülasyon sıcaklık sensöründen yeni modüle veri göndermek için aşağıdaki satırıyla JSONbaşka bir yol ekleyin. öğesini (iki yerde) kendi modül adınızla değiştirin <NewModuleName> .

    "sensorTo<NewModuleName>": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/<NewModuleName>/inputs/input1\")"
    
  4. Ana projeye (örneğin AzureIotEdgeApp1) sağ tıklayın ve StartUp Projesi Olarak Ayarla'yı seçin. Ana projeyi başlangıç projesi olarak ayarlayarak çözümdeki tüm modüller çalıştırılır. Bu, çözüme eklediğiniz her iki modülü, simülasyon sıcaklık sensörü modülünü ve sanal Edge hub'ını içerir.

  5. Çözümü çalıştırmak için F5 tuşuna basın veya araç çubuğunu çalıştır düğmesini seçin. Başlangıçta 10-20 saniye sürebilir. Bu proje için ihtiyacınız olan bağlantı noktasını bağlayacak başka Docker kapsayıcılarınız olmadığından emin olun.

  6. Her modül için bir .NET Core konsol uygulaması penceresinin göründüğünü görmeniz gerekir.

  7. Modülleri incelemek için bir kesme noktası ayarlayın.

    • C# dilinde geliştiriyorsanız, ModuleBackgroundService.cs işlevinde PipeMessage()bir kesme noktası ayarlayın.
    • C kullanıyorsanız main.c dosyasındaki InputQueue1Callback() işlevinde bir kesme noktası ayarlayın.
  8. Her modülde kesme noktaları oluşturun ve aynı anda birden çok modülü çalıştırmak ve hatalarını ayıklamak için F5 tuşuna basın. Her pencere farklı bir modülü temsil eden birden çok .NET Core konsol uygulaması penceresi görmeniz gerekir.

    İki çıkış konsolu içeren Visual Studio'nun ekran görüntüsü.

  9. Hata ayıklamayı durdurmak için Ctrl + F5 tuşlarına basın veya durdur düğmesini seçin.

Görüntüleri derleme ve kayıt defterine gönderme

Modülünüzü geliştirip hata ayıkladıktan sonra, modül görüntüsünü derleyip Azure Container Registry'nize gönderebilirsiniz. Ardından modülü IoT Edge cihazınıza dağıtabilirsiniz.

  1. Ana IoT Edge projesini tek tek modüllerden biri değil başlangıç projesi olarak ayarlayın.

  2. Modül görüntüleriniz için derlemek üzere yapılandırma olarak Hata Ayıkla veya Serbest Bırak'ı seçin.

    Not

    Hata Ayıkla'yı seçerken Visual Studio, Docker görüntüleri oluşturmak için kullanırDockerfile.(amd64|windows-amd64).debug. Bu, kapsayıcı görüntünüzde derlenirken .NET Core komut satırı hata ayıklayıcısı VSDBG'yi içerir. Üretime hazır IoT Edge modülleri için, VSDBG olmadan kullanan Dockerfile.(amd64|windows-amd64) Sürüm yapılandırmasını kullanmanızı öneririz.

  3. Azure Container Registry (ACR) gibi özel bir kayıt defteri kullanıyorsanız oturum açmak için aşağıdaki Docker komutunu kullanın. Kullanıcı adını ve parolayı Azure portalındaki kayıt defterinizin Erişim anahtarları sayfasından alabilirsiniz.

    docker login <ACR login server>
    
  4. Azure Container Registry oturum açma bilgilerini dosyasında deployment.debug.template.jsonbulunan çalışma zamanı ayarlarına ekleyelim. Bunu yapmanın iki yolu vardır. Kayıt defteri kimlik bilgilerinizi dosyanıza .env ekleyebilir (en güvenli) veya doğrudan dosyanıza deployment.debug.template.json ekleyebilirsiniz.

    Dosyanıza .env kimlik bilgileri ekleyin:

    Çözüm Gezgini'da Tüm Dosyaları Göster araç çubuğu düğmesini seçin. Dosya .env görüntülenir. Azure Container Registry kullanıcı adınızı ve parolanızı dosyanıza .env ekleyin. Bu kimlik bilgileri Azure portalındaki Azure Container Registry'nizin Erişim Anahtarları sayfasında bulunabilir.

    Çözüm Gezgini tüm dosyaları gösteren düğmenin ekran görüntüsü.

        DEFAULT_RT_IMAGE=1.2
        CONTAINER_REGISTRY_USERNAME_myregistry=<my-registry-name>
        CONTAINER_REGISTRY_PASSWORD_myregistry=<my-registry-password>
    

    Kimlik bilgilerini doğrudan deployment.debug.template.json ekleme

    Kimlik bilgilerinizi doğrudan dağıtım şablonunuza eklemek isterseniz yer tutucuları ACR yönetici kullanıcı adınız, parolanız ve kayıt defteri adınızla değiştirin.

          "settings": {
            "minDockerVersion": "v1.25",
            "loggingOptions": "",
            "registryCredentials": {
              "registry1": {
                "username": "<username>",
                "password": "<password>",
                "address": "<registry name>.azurecr.io"
              }
            }
          }
    

    Not

    Bu makalede, geliştirme ve test senaryoları için uygun olan Azure Container Registry için yönetici oturum açma kimlik bilgileri kullanılır. Üretim senaryolarına hazır olduğunuzda, hizmet sorumluları gibi en az ayrıcalıklı bir kimlik doğrulama seçeneği öneririz. Daha fazla bilgi için bkz . Kapsayıcı kayıt defterinize erişimi yönetme.

  5. Yerel kayıt defteri kullanıyorsanız, yerel bir kayıt defteri çalıştırabilirsiniz.

  6. Son olarak, Çözüm Gezgini ana proje klasörüne sağ tıklayın ve her modül için Docker görüntüsünü derlemek ve göndermek için IoT Edge Modülleri Oluştur ve Gönder'i seçin. Bu işlem bir dakika sürebilir. Visual Studio Çıkış konsolunuzda gördüğünüzde Finished Build and Push IoT Edge Modules. işiniz biter.

Çözümü dağıtma

Artık modül görüntülerinizi derleyip Azure Container Registry'nize ilettikten sonra çözümü IoT Edge cihazınıza dağıtabilirsiniz. Bu öğretici boyunca gözlemlediğiniz bir dağıtım bildirimi şablonunuz zaten var. Şimdi bu bildirimden bir dağıtım bildirimi oluşturalım, ardından modüllerinizi Azure'daki IoT Edge cihazınıza dağıtmak için bir Azure CLI komutu kullanalım.

  1. Visual Studio Çözüm Gezgini'da ana projenize sağ tıklayın ve IoT Edge için Dağıtım Oluştur'u seçin.

    'Dağıtım oluştur' menü öğesinin konumunun ekran görüntüsü.

  2. Yerel Visual Studio ana proje klasörünüze gidin ve klasörüne config bakın. Dosya yolu şöyle görünebilir: C:\Users\<YOUR-USER-NAME>\source\repos\<YOUR-IOT-EDGE-PROJECT-NAME>\config. Burada gibi deployment.amd64.debug.jsonoluşturulan dağıtım bildirimini bulabilirsiniz.

  3. Şema sürümünün edgeHub 1.2 olarak ayarlandığını onaylamak için dosyanızı deployment.amd64.debug.json denetleyin.

     "$edgeHub": {
         "properties.desired": {
           "schemaVersion": "1.2",
           "routes": {
             "IotEdgeModule2022ToIoTHub": "FROM /messages/modules/IotEdgeModule2022/outputs/* INTO $upstream",
             "sensorToIotEdgeModule2022": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/IotEdgeModule2022/inputs/input1\")",
             "IotEdgeModule2022bToIoTHub": "FROM /messages/modules/IotEdgeModule2022b/outputs/* INTO $upstream"
           },
           "storeAndForwardConfiguration": {
             "timeToLiveSecs": 7200
           }
         }
       }
    

    İpucu

    Visual Studio 2022 için dağıtım şablonu 1.2 şema sürümünü gerektirir. 1.1 veya 1.0 olması gerekiyorsa, dağıtım oluşturulana kadar bekleyin (içinde deployment.debug.template.jsondeğiştirmeyin). Dağıtım oluşturmak varsayılan olarak bir 1.2 şeması oluşturur. Ancak, gerekirse Azure'a dağıtmadan önce oluşturulan bildirimi el ile değiştirebilirsiniz deployment.amd64.debug.json.

    Önemli

    IoT Edge cihazınız dağıtıldıktan sonra azure portalında şema sürümü 1.2 (sürüm 1.1 iyi olacaktır) ile düzgün görüntülenmez. Bu bilinen bir hatadır ve yakında düzeltilecektir. Ancak, ioT Hub'a bağlı olduğundan ve azure CLI kullanılarak herhangi bir zamanda ile iletişim kuraabildiği için bu durum cihazınızı etkilemez.

    IoT Edge cihaz sayfasındaki Azure portalı hatasının ekran görüntüsü.

  4. Şimdi bir Azure CLI komutuyla bildirimimizi dağıtalım. Visual Studio Geliştirici Komut İstemi'ni açın ve yapılandırma dizinine geçin.

        cd config
    
  5. IoT Edge cihazınızın bildirimini IoT Hub'a dağıtın. komutu, cihazı çözümünüzde geliştirilen modülleri kullanacak şekilde yapılandırıyor. Dağıtım bildirimi önceki adımda oluşturulmuş ve yapılandırma klasöründe depolanmış. Yapılandırma klasörünüzden aşağıdaki dağıtım komutunu yürütür. , [hub name]ve [file path] değerlerini [device id]değerlerinizle değiştirin. IoT Edge cihaz kimliği IoT Hub'da yoksa, oluşturulması gerekir.

        az iot edge set-modules --device-id [device id] --hub-name [hub name] --content [file path]
    

    Örneğin, komutunuz şu şekilde görünebilir:

    az iot edge set-modules --device-id my-device-name --hub-name my-iot-hub-name --content deployment.amd64.debug.json
    
  6. Komutu çalıştırdıktan sonra, komut isteminizde dağıtım onayının yazdırıldığını JSON görürsünüz.

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

Modülünüzü geliştirdikten sonra IoT Edge cihazınıza dağıtım için bir kapsayıcı kayıt defterinde depolamak üzere modül görüntüsünü oluşturabilirsiniz.

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, komut kabuğunuzun proje dizininizde ve modülünüzün adının IotEdgeModule1 olduğunu varsayalım. Yerel kayıt defteri veya Azure kapsayıcı kayıt defteri için görüntü oluşturmak için aşağıdaki komutları kullanın:

# Build the image for the local registry

docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t localhost:5000/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"

# Or build the image for an Azure Container Registry

docker build --rm -f "./IotEdgeModule1/Dockerfile.amd64.debug" -t myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 "./IotEdgeModule1"

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/iotedgemodule1:0.0.1-amd64

# Or push the Docker image to an Azure Container Registry
az acr login --name myacr
docker push myacr.azurecr.io/iotedgemodule1:0.0.1-amd64

Modülü IoT Edge cihazına dağıtın.

Visual Studio'da ana projede 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çıklayan bir JSON belgesidir. Dağıtımdan önce Azure Container Registry kimlik bilgilerinizi, modül görüntülerinizi ve uygun createOptions değerleri 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 edgeAgent ayarlarındaki deployment.debug.template.json kimlik bilgilerinizi eklemeniz gerekir. Örneğin,

    "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. Görüntü özelliği değerini kayıt defterine iletmiş olduğunuz modül görüntüsü adıyla değiştirin. Örneğin, IotEdgeModule1 özel modülü için etiketlenmiş myacr.azurecr.io/iotedgemodule1:0.0.1-amd64 bir görüntü gönderdiyseniz, görüntü özelliği değerini etiket değeriyle değiştirin.

  3. createOptions değerini dağıtım şablonundaki her sistem ve özel modül için dizeli içerikle ekleyin veya değiştirin.

    Örneğin, IotEdgeModule1'in görüntüsü ve createOptions ayarları aşağıdakine benzer olacaktır:

    "IotEdgeModule1": {
    "version": "1.0.0",
    "type": "docker",
    "status": "running",
    "restartPolicy": "always",
    "settings": {
        "image": "myacr.azurecr.io/iotedgemodule1:0.0.1-amd64",
        "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
    }
    

Modülleri Azure IoT Hub'a dağıtmak için IoT Edge Azure CLI set-modules komutunu kullanın. Örneğin, deployment.debug.amd64.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 bağlantı dizesi Azure portalında Azure IoT Hub >Güvenlik ayarları>Paylaşılan erişim ilkeleri altında bulabilirsiniz.

Cihazınıza dağıtımı onaylayın

IoT Edge modüllerinizin Azure'a dağıtılıp dağıtılmadığını denetlemek için cihazınızda (veya sanal makinede), örneğin SSH veya Azure Bastion aracılığıyla oturum açın ve IoT Edge liste komutunu çalıştırın.

   iotedge list

Cihazınızda veya sanal makinenizde çalışan modüllerinizin listesini görmeniz gerekir.

   NAME                        STATUS           DESCRIPTION      CONFIG
   SimulatedTemperatureSensor  running          Up a minute      mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.0
   edgeAgent                   running          Up a minute      mcr.microsoft.com/azureiotedge-agent:1.2
   edgeHub                     running          Up a minute      mcr.microsoft.com/azureiotedge-hub:1.2
   IotEdgeModule1              running          Up a minute      myacr.azurecr.io/iotedgemodule1:0.0.1-amd64.debug
   myIotEdgeModule2            running          Up a minute      myacr.azurecr.io/myiotedgemodule2:0.0.1-amd64.debug

Docker Remote SSH kullanarak hata ayıklama

Docker ve Moby altyapıları, Visual Studio kullanarak uzak bir cihaza kod eklemenize ve hata ayıklamanıza olanak sağlayan kapsayıcılara yönelik SSH bağlantılarını destekler.

  1. Docker'a uzaktan 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.

  2. Uzak cihazınızda docker kapsayıcısı üzerinde çalışan bir işleme eklemek için Visual Studio'yu kullanma adımlarını izleyin.

  3. Visual Studio'da, özel modülünüzde kesme noktaları ayarlayın.

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

    Bir kesme noktasında duraklatılan bir cihazdaki uzak docker kapsayıcısına eklenmiş Visual Studio'nun ekran görüntüsü.

Sonraki adımlar