Kılavuz: Windows üzerinde IoT Edge for Linux kullanarak Linux kapsayıcılarıyla IoT Edge modüllerini geliştirme

Applies to:IoT Edge 1.5 onay işareti IoT Edge 1.5

Önemli

IoT Edge 1.5 LTS, desteklenen bir sürümdür. IoT Edge 1.4 LTS, 12 Kasım 2024'te kullanım ömrüne ulaştı. Önceki bir sürümü kullanıyorsanız bkz. Update IoT Edge.

Bu öğretici, Windows ve Visual Studio 2022'de Linux için IoT Edge kullanarak Azure IoT Edge bir cihaza kendi kodunuzu geliştirme, hata ayıklama ve dağıtma konusunda size yol gösterir. Linux cihazına C# modülü dağıtarak IoT Edge çözümleri için en yaygın geliştirici senaryolarını öğreneceksiniz. Windows'daki bir Linux kapsayıcısında çalışan özel bir IoT Edge modülünü dağıtacak ve hatalarını ayıklayacaksınız. Farklı bir dil kullanmayı veya bir Azure hizmeti dağıtmayı planlıyor olsanız bile, bu öğretici geliştirme araçları ve kavramları hakkında bilgi edinmek için hala yararlıdır.

Bu öğretici, iki IoT Edge geliştirme aracına yönelik adımları içerir:

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

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Geliştirme makinenizi ayarlayın.
  • Yeni bir proje oluşturmak için IoT Edge geliştirme araçlarını kullanın.
  • Projenizi bir container olarak oluşturun ve Azure Container Registry'de depolayın.
  • Kodunuzu IoT Edge bir cihaza dağıtın.

Önkoşullar

Bu öğreticide geliştirme makineniz olarak Windows çalıştıran bir makine kullandığınız varsayılır. Windows bilgisayarlarda Windows veya Linux modülleri geliştirebilirsiniz. Bu kılavuz, IoT Edge for Linux on Windows kullanarak modülleri oluşturmak ve dağıtmak için Linux kapsayıcılarının geliştirilmesine rehberlik eder.

Başlamadan önce:

  • Windows üzerinde Linux için IoT Edge yükleyin.

  • Hızlı Başlangıç Kılavuzunu okuyun İlk IoT Edge modülünüzü bir Windows cihazına dağıtın.

  • .NET Core SDK indirin.

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

  • Visual Studio 2022 yüklemeniz hazır olduktan sonra Visual Studio Market'ten Azure IoT Edge Tools indirip yükleyin.

    IoT Edge çözümünüzü oluşturmak ve geliştirmek için Azure IoT Edge Araçları uzantısını kullanabilirsiniz. Tercih edilen geliştirme aracı, Azure IoT Edge Geliştirme Aracı CLI'dır. Uzantı, Visual Studio projesini oluşturmak için kullandığınız Azure IoT Edge proje şablonlarını içerir. Şu anda kullandığınız geliştirme aracından bağımsız olarak uzantıyı yüklemeniz gerekir.

    İpucu

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

  • Bulut kaynağı olarak Azure'da ücretsiz veya standart katman IoT hub oluşturun.

Azure hesabınız yoksa başlamadan önce free hesabı oluşturun.

Temel kavramlar

Bu öğreticide IoT Edge modülü geliştirme adımları gösterilir. IoT Edge modülü yürütülebilir kodu olan bir kapsayıcıdır. bir IoT Edge cihaza bir veya daha fazla modül dağıtabilirsiniz. Modüller algılayıcılardan veri alma, verileri temizleme ve analiz etme veya IoT hub'ına ileti gönderme gibi belirli görevleri gerçekleştirir. Daha fazla bilgi için bkz. Azure IoT Edge modüllerini anlama.

IoT Edge modülleri geliştirirken geliştirme makinesi ile modülün dağıtılacağı hedef IoT Edge cihaz arasındaki farkı anlamanız önemlidir. Modül kodunuzu tutmak için oluşturduğunuz kapsayıcının hedef cihazın işletim sistemiyle (OS) eşleşmesi gerekir.

Örneğin, en yaygın senaryo, IoT Edge çalıştıran bir Linux cihazını hedeflemek isteyen bir Windows bilgisayarda modül geliştiren bir kişidir. Bu durumda kapsayıcı işletim sistemi Linux'tır.

Bu öğreticiyi tamamladığınızda, geliştirme makinesi işletim sistemi ile kapsayıcı işletim sistemi arasındaki farkı aklınızda bulundurun. Bu öğreticide geliştirme için Windows ana bilgisayarınızı ve modülleri oluşturmak ve dağıtmak için Windows sanal makinede (VM) Linux için IoT Edge kullanacaksınız.

Bu kılavuz, Linux kapsayıcılarıyla IoT Edge çalıştıran cihazları hedefler. Geliştirme makineniz Linux kapsayıcıları çalıştırdıkça tercih ettiğiniz işletim sistemini kullanabilirsiniz. Linux kapsayıcıları ile geliştirmek için Visual Studio kullanmanızı öneririz, bu nedenle bu öğreticide bu kullanılır. İki araç arasında destek farklılıkları olsa da Visual Studio Code de kullanabilirsiniz. Daha fazla bilgi için Visual Studio Code kullanarak Azure IoT Edge modülleri geliştirin bölümüne bakın.

Uzak bağlantı için Docker CLI ve Docker altyapısını ayarlama

IoT Edge modülleri kapsayıcı olarak paketlenir, bu nedenle bunları derlemek ve yönetmek için geliştirme makinenizde bir kapsayıcı altyapısına ihtiyacınız vardır.

Windows VM üzerinde Linux için IoT Edge zaten Docker altyapısının bir örneğini içerir. Bu öğreticide, Windows geliştirici makinesinden Windows VM Docker örneğinde Linux için IoT Edge uzaktan nasıl bağlanabileceğiniz gösterilmektedir. Bu uzak bağlantıyı kullanarak Windows için Docker Desktop bağımlılığını kaldırırsınız.

Docker CLI'yi yapılandırma

İlk adım, uzak Docker altyapısına bağlanabilmek için Windows geliştirme makinesinde Docker CLI'yi yapılandırmaktır:

  1. Docker CLI'nın önceden derlenmiş docker.exe sürümünü Chocolatey'den indirin. Ayrıca GitHub adresinden resmi cli projesini indirebilir ve depo yönergelerini izleyerek derleyebilirsiniz.

  2. Geliştirme makinenizdeki bir dizine ayıklayın docker.exe ; örneğin, C:\Docker\bin.

  3. Bilgisayarınız HakkındaSistem BilgisiGelişmiş sistem ayarları.

  4. Gelişmiş>Ortam değişkenleri. Kullanıcı değişkenleri altında Path'e tıklayın.

  5. Path değişkenini düzenleyin ve konumunu docker.exeekleyin.

  6. Yükseltilmiş bir PowerShell oturumu açın.

  7. Şu komutu kullanarak Docker CLI'ya erişilebildiğini denetleyin:

    docker --version
    

    Her şeyi başarıyla yapılandırdıysanız komutun çıktısı Docker sürümünü göstermelidir. Docker version 20.10.12, build e91ed57 gibi görünmelidir.

Docker altyapısını yapılandırma

İkinci adım, Windows VM Docker altyapısında Linux için IoT Edge dış bağlantıları kabul etmek üzere yapılandırmak ve uygun güvenlik duvarı kurallarını eklemektir.

Uyarı

Docker altyapısının dış bağlantılara açıklanması güvenlik risklerini artırabilir. Bu yapılandırmayı yalnızca geliştirme amacıyla kullanmanız gerekir. Geliştirme tamamlandıktan sonra yapılandırmayı varsayılan ayarlara döndürdiğinizden emin olun.

  1. Yükseltilmiş bir PowerShell oturumu açın ve aşağıdaki komutları çalıştırın:

    # Configure the IoT Edge for Linux on Windows VM Docker engine to accept external connections, and add the appropriate firewall rules.
    Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT"
    
    # Create a copy of the IoT Edge for Linux on Windows VM _docker.service_ in the system folder.
    Invoke-EflowVmCommand "sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service"
    
    # Replace the service execution line to listen for external connections.
    Invoke-EflowVmCommand "sudo sed -i 's/-H fd:\/\// -H fd:\/\/ -H tcp:\/\/0.0.0.0:2375/g'  /etc/systemd/system/docker.service"
    
    # Reload the IoT Edge for Linux on Windows VM services configurations.
    Invoke-EflowVmCommand "sudo systemctl daemon-reload"
    
    # Reload the Docker engine service.
    Invoke-EflowVmCommand "sudo systemctl restart docker.service"
    
    # Check that the Docker engine is listening to external connections.
    Invoke-EflowVmCommand "sudo netstat -lntp | grep dockerd"
    

    Örnek çıktı aşağıda verilmişti:

    PS C:\> # Configure the IoT Edge for Linux on Windows virtual machine Docker engine to accept external connections, and add the appropriate firewall rules.
    PS C:\> Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 2375 -j ACCEPT"
    PS C:\>
    PS C:\> # Create a copy of the IoT Edge for Linux on Windows VM docker.service in the system folder.
    PS C:\> Invoke-EflowVmCommand "sudo cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service"
    PS C:\>
    PS C:\> # Replace the service execution line to listen for external connections.
    PS C:\> Invoke-EflowVmCommand "sudo sed -i 's/-H fd:\/\// -H fd:\/\/ -H tcp:\/\/0.0.0.0:2375/g' /etc/systemd/system/docker.service"
    PS C:\>
    PS C:\> # Reload the IoT Edge for Linux on Windows VM services configurations.
    PS C:\> Invoke-EflowVmCommand "sudo systemctl daemon-reload"
    PS C:\>
    PS C:\> # Reload the Docker engine service.
    PS C:\> Invoke-EflowVmCommand "sudo systemctl restart docker.service"
    PS C:\>
    PS C:\> # Check that the Docker engine is listening to external connections.
    PS C:\> Invoke-EflowVmCommand "sudo netstat -lntp | grep dockerd"
    tcp6       0      0 :::2375                 :::*                    LISTEN      2790/dockerd
    

Bağlantıyı test edin

Son kurulum adımı, Windows VM Docker altyapısında Linux için IoT Edge Docker bağlantısını test etmektir:

  1. Windows VM üzerinde Linux için IoT Edge IP adresini alın:

    Get-EflowVmAddr
    

    İpucu

    Windows VM'de Linux için IoT Edge statik IP olmadan dağıtıldıysa, IP adresi Windows ana bilgisayar işletim sistemi yeniden başlatmaları veya ağ değişiklikleri arasında değişebilir. Docker altyapısına her uzak bağlantı kurmak istediğinizde Windows VM'de Linux için IoT Edge için doğru IP adresini kullandığınızdan emin olun.

    Örnek çıktı aşağıda verilmişti:

    PS C:\> Get-EflowVmAddr
    [03/15/2022 15:22:30] Querying IP and MAC addresses from virtual machine (DESKTOP-J1842A1-EFLOW)
     - Virtual machine MAC: 00:15:5d:6f:da:78
     - Virtual machine IP : 172.31.24.105 retrieved directly from virtual machine
    00:15:5d:6f:da:78
    172.31.24.105 
    
  2. Windows VM Docker altyapısında Linux için IoT Edge bağlanın ve hello-world örnek kapsayıcısını çalıştırın. <EFLOW-VM-IP> değerini önceki adımda aldığınız Windows VM IP adresi üzerinde Linux için IoT Edge ile değiştirin.

    docker -H tcp://<EFLOW-VM-IP>:2375 run --rm hello-world
    

    Kapsayıcının indirilmesi tamamlandığında kapsayıcı çalışır ve şu çıkışı üretir:

    PS C:\> docker -H tcp://172.31.24.105:2375 run --rm hello-world
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    2db29710123e: Pull complete
    Digest: sha256:4c5f3db4f8a54eb1e017c385f683a2de6e06f75be442dc32698c9bbe6c861edd
    Status: Downloaded newer image for hello-world:latest
    
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you're currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/
    

Azure IoT Edge projesi oluşturma

Visual Studio'daki IoT Edge proje şablonu, IoT Edge cihazlara dağıtabileceğiniz bir çözüm oluşturur. Bir Azure IoT Edge çözümü oluşturmak ve ardından bu çözümdeki ilk modülü oluşturmak için aşağıdaki adımları kullanın. Her IoT Edge çözümü birden fazla modül içerebilir.

Önemli

Visual Studio'nin oluşturduğu 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ı desteklemez. Visual Studio projesini oluşturmak için Azure IoT Edge Araçları uzantısını kullanmanız gerekir.

  1. Visual Studio'da, başlangıç sayfasında Yeni proje oluştur seçerek veya araç çubuğundaki Yeni Proje düğmesini seçerek yeni bir proje oluşturun.

  2. Yeni proje oluştur sayfasında Azure IoT Edge araması yapın. IoT Edge cihazınızın platform (Linux IoT Edge modülü) ve mimarisiyle eşleşen projeyi seçin ve ardından Ext öğesini seçin.

  3. Yeni projenizi yapılandırın sayfasında projeniz için bir ad girin, konumu belirtin ve ardından Oluştur'u seçin.

  4. Modül Ekle iletişim kutusunda, geliştirmek istediğiniz modül türünü seçin. Dağıtımınıza mevcut bir IoT Edge modülü eklemek için Existing module öğesini de seçebilirsiniz.

  5. Modül Adı'nda modülünüzün adını belirtin.

  6. Depo Url'sinde modülün görüntü deposunun adını belirtin. Visual Studio modül adını otomatik olarak localhost:5000/< modül adı> ile doldurur. 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. Giriş sunucusu <kayıt defteri adı>.azurecr.io şeklinde görünür. Dizenin yalnızca localhost:5000 bölümünü değiştirin, böylece son durumda <kayıt defteri adı>.azurecr.io/<modül adınız> şeklinde görünür.

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

    Bir Visual Studio çözümüne uygulama ve modül eklemeye yönelik seçimlerin 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 özelliğinde repository 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üz iki proje düzeyinde klasöre sahiptir: ana proje klasörü ve modül klasörü. Örneğin, adlı bir ana proje klasörünüz ve adlı AzureIotEdgeApp1IotEdgeModule1bir modül klasörünüz olabilir.

Ana proje klasörü dağıtım bildiriminizi içerir. Dağıtım bildirimi, hedeflenen IoT Edge cihazında yapılandırılacak modülleri açıklayan bir JSON belgesidir.

Modül klasörü, modül kodunuz için bir dosya içerir. Seçtiğiniz dile bağlı olarak ya Program.cs ya da main.c olarak adlandırılır. Bu klasör, modülünüzün meta verilerini açıklayan adlı module.json bir dosya da içerir. Çeşitli Docker dosyaları, modülünüzü Windows veya Linux kapsayıcısı olarak derlemek için gerekli 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 tanımlayan bir IoT Edge dağıtım bildirimi şablonudur. Dosya ayrıca modüllerin birbirleriyle nasıl iletişim kurasını tanımlar. Dağıtım bildirimleri hakkında daha fazla bilgi için bkz . Modülleri dağıtmayı ve yolları belirlemeyi öğrenin.

Dağıtım şablonu şunları içerir:

  • İki çalışma zamanı modülü edgeAgent ve edgeHub.
  • Bu Visual Studio projesinde oluşturduğunuz özel modül.
  • adlı SimulatedTemperatureSensorbir modül. 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ştirin:

  1. Solution Explorer'da ana projenizin adına sağ tıklayın ve Set IoT Edge runtime version öğesini seçin.

    IoT Edge çalışma zamanı sürümü ayarlamaya yönelik 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. Herhangi bir değişiklik yapmadıysanız İ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 dağıtım bildirim dosyasını açın deployment.debug.template.json . sistem çalışma zamanı modülü görüntüleri için edgeAgent ve edgeHub ç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 Dağıt IoT Edge için dağıtımı oluştur'u seçerek dağıtım bildiriminizi yeniden üretin. Bu adım, dağıtım şablonunuzu temel alan bir dağıtım bildirimi oluşturur. Bildirim, Visual Studio projenizin config klasöründe görünür.

  1. deployment.debug.template.json Dağıtım bildirim dosyasını açın.

  2. sistem çalışma zamanı modülü görüntüleri için edgeAgent ve edgeHub ç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",
        //...
    

Visual Studio 2022 uzak Docker altyapısı örneğini ayarlama

Azure IoT Edge Araçları uzantısını, Windows VM üzerinde Linux için IoT Edge içinde çalışan uzak Docker altyapısını kullanacak şekilde yapılandırın:

  1. Tools>Azure IoT Edge tools>IoT Edge tools settings öğesini seçin.

  2. DOCKER_HOST localhost değerini Windows VM'de Linux için IoT Edge IP adresiyle değiştirin. IP adresini hatırlamıyorsanız, almak için Windows PowerShell cmdlet'inde Linux için IoT Edge Get-EflowVmAddr kullanın. Örneğin, Windows VM IP adresi üzerinde Linux için IoT Edge 172.20.1.100 ise, yeni değer tcp://172.20.1.100:2375 olmalıdır.

     IoT Edge Araçları ayarlarının ekran görüntüsü

  3. Tamam'ı seçin.

Modülünüzü geliştirme

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 Program.cs (C için) adlı main.c bir dosyada bulunur.

Varsayılan çözümde, modüldeki SimulatedTemperatureSensor simülasyon verileri modülünüze yönlendirilir. Modül girişi alır ve Azure IoT Hub gönderir.

Modül şablonunu kendi kodunuzla özelleştirmeye hazır olduğunuzda Azure IoT Hub SDK'ları kullanarak IoT çözümlerinin anahtar gereksinimlerini karşılayan başka modüller oluşturun. Bu gereksinimler arasında güvenlik, cihaz yönetimi ve güvenilirlik yer alabilir.

Tek bir modül oluşturma ve gönderme

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. Çözüm, Windows VM'de Linux için IoT Edge içinde çalışan Docker altyapısını kullanarak derlendiğinden veya hata ayıklandığından, ilk adım uzaktan hata ayıklamayı etkinleştirmek için modülü derlemek ve yayımlamaktır:

  1. Solution Explorer bölümünde modül proje klasörünü seçin (örneğin, myIotEdgeModule).

  2. Özel modülü başlangıç projesi olarak ayarlayın. Menüde Proje Başlangıç Projesi> Olarak Ayarla'yı seçin.

  3. C# Linux modülünde hata ayıklamak için SSH hizmetini etkinleştirmek için dosyayı güncelleştirmeniz Dockerfile.amd64.debug gerekir. Dockerfile.amd64.debug dosyasını şu şablonu kullanacak şekilde güncelleyin: Uzaktan Hata Ayıklama Desteği ile Azure IoT Edge AMD64 C# Modülü için Dockerfile.

    Not

    Debug'ı seçtiğinizde Visual Studio Docker görüntüleri oluşturmak için Dockerfile.(amd64|windows-amd64).debug kullanır. Kapsayıcı görüntünüzü oluştururken bu dosya, .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) yapılandırmasını kullanmanızı öneririz.

    Şablonun son satırında (ENTRYPOINT ["dotnet", "IotEdgeModule1.dll"]) DLL adının IoT Edge modül projenizin adıyla eşleştiğinden emin olun.

  4. Linux modülüyle SSH bağlantısı kurmak için bir RSA anahtarı oluşturmanız gerekir. Yükseltilmiş bir PowerShell oturumu açın ve yeni bir RSA anahtarı oluşturmak için aşağıdaki komutları çalıştırın. RSA anahtarını aynı IoT Edge modülü klasörüne kaydedin ve anahtarın adının id_rsa olduğundan emin olun.

    ssh-keygen -t RSA -b 4096 -m PEM
    

    SSH anahtarı oluşturmak için PowerShell komutunun ekran görüntüsü.

  5. Azure Container Registry 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 Access anahtarları sayfasından alabilirsiniz. Yerel kayıt defteri kullanıyorsanız, yerel bir kayıt defteri çalıştırabilirsiniz.

    docker -H tcp://<EFLOW-VM-IP>:2375 login -u <Container Registry username> -p <Container Registry password> <Container Registry login server>
    
  1. Solution Explorer'da proje klasörüne sağ tıklayın ve Build and Push IoT Edge Modules öğesini seçin. Bu komut, her modül için Docker görüntüsünü derler ve iletir.

  2. Azure Container Registry gibi özel bir kayıt defteri kullanıyorsanız, kayıt defteri oturum açma bilgilerinizi deployment.template.json dosyasında bulunan çalışma zamanı ayarlarına eklemeniz gerekir. Yer tutucuları gerçek Container Registry yönetici kullanıcı adınız, parolanız ve kayıt defteri adınız ile 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.

  3. Modülün SSH hizmetine erişmek için 22 numaralı bağlantı noktasını kullanıma sunmanız gerekir. Bu öğreticide konak bağlantı noktası olarak 10022 kullanılır, ancak farklı bir bağlantı noktası belirtebilirsiniz. Belirttiğiniz bağlantı noktası, Linux C# modülüne bağlanmak için SSH bağlantı noktası olarak kullanılır. dosyasında createOptionsbu Linux modülü ayarı için SSH bağlantı noktası bilgilerini deployment.debug.template.json eklemeniz gerekir:

         "createOptions": {
            "HostConfig": {
               "Privileged": true,
               "PortBindings": {
                     "22/tcp": [
                        {
                           "HostPort": "10022"
                        }
                     ]
               }
            }
         }
    
  4. Solution Explorer'da proje klasörüne sağ tıklayın ve Yeni IoT Edge dağıtımı JSON oluşturmak için IoT Edge için Dağıtım Oluştur'u seçin.

  5. Görünüm> seçeneğini seçin, ardından Bulut Gezgini. Visual Studio 2019'da oturum açtığınızdan emin olun.

  6. Cloud Explorer'da aboneliğinizi genişletin ve ardından dağıtmak istediğiniz Azure IoT Hub ve Azure IoT Edge cihazını bulun.

  7. IoT Edge cihaza sağ tıklayın ve Dağıtım oluştur öğesini seçin. Platformunuz için yapılandırılmış hata ayıklama dağıtım bildirimine gidin. Visual Studio çözümünüzün config klasöründedir; örneğin, deployment.amd64.json.

Modülün Docker görüntüsünü oluşturma

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

Modülün 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 adınızın olduğunu IotEdgeModule1varsayalım. Yerel kayıt defteri veya Azure Container Registry için görüntüyü oluşturmak için aşağıdaki komutları kullanın:

# Build the image for the local registry

docker build --rm -f "./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"

Modülün Docker görüntüsünü gönderme

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ğıtma

Visual Studio'da ana projede deployment.debug.template.json dağıtım bildirim dosyasını açın.

Dağıtımdan önce Azure Container Registry kimlik bilgilerinizi, modül görüntülerinizi ve uygun createOptions değerlerini 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 ayarlarına edgeAgent ekleyerek ekleyin. Ö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. image Özellik değerini, kayıt defterine iletmiş olduğunuz modül görüntüsü adıyla değiştirin. Örneğin, özel modül myacr.azurecr.io/iotedgemodule1:0.0.1-amd64için etiketlenmiş IotEdgeModule1 bir görüntü gönderdiyseniz, görüntü özelliği değerini etiket değeriyle değiştirin.

  3. Değeri, dağıtım şablonundaki createOptionsher sistem ve özel modül için dizeli içerikle ekleyin veya değiştirin.

    Örneğin, image ve createOptions ayarları IotEdgeModule1 aşağıdaki örneğe 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\"}]}}}"
    }
    
  4. modülleri Azure IoT hub'ına 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-iot-hub için IoT hub'ı my-device 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 connection string Azure portalında Azure IoT Hub>Güvenlik ayarları>Paylaşılan erişim ilkeleri altında bulabilirsiniz.

  5. Bulut Gezgini'nde, uç cihazınıza sağ tıklayın ve sayfayı yenileyerek, yeni modülün $edgeAgent ve $edgeHub modülleriyle birlikte çalıştığını onaylayın.

Çözümde hata ayıklama

  1. Yükseltilmiş bir PowerShell oturumunda aşağıdaki komutları çalıştırın:

    1. moduleId Linux C# modülünün adına göre değerini alın. Yer tutucuyu <iot-edge-module-name> modülünüzün adıyla değiştirin.

      $moduleId = Invoke-EflowVmCommand "sudo docker ps -aqf name=<iot-edge-module-name>"
      
    2. Doğru olup olmadığını $moduleId denetleyin. Değişken boşsa doğru modül adını kullandığınızdan emin olun.

    3. Linux kapsayıcısının içinde SSH hizmetini başlatın:

      Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"
      
    4. Windows VM üzerinde Linux için IoT Edge'de modülün SSH bağlantı noktasını açın. (Bu öğreticide 10022 numaralı bağlantı noktası kullanılır.)

      Invoke-EflowVmCommand "sudo iptables -A INPUT -p tcp --dport 10022 -j ACCEPT"
      

    Uyarı

    Güvenlik nedeniyle, Windows VM'de Linux için IoT Edge her yeniden başlatıldığında IP tablosu kuralı silinir ve özgün ayarlara geri döner. Ayrıca modülün SSH hizmetini el ile yeniden başlatmanız gerekir.

  2. SSH hizmetini başarıyla başlattıktan sonra Debug>İslemBağlantı TürüSSH olarak ayarlayın ve Bağlantı hedefi Windows VM'de Linux için IoT Edge IP adresine ayarlayın. Windows VM üzerinde Linux için IoT Edge IP adresini bilmiyorsanız Get-EflowVmAddr PowerShell cmdlet'ini kullanabilirsiniz.

    IP'yi yazın ve Enter tuşunu seçin. Açılan pencerede aşağıdaki yapılandırmaları girin:

    Alan Değer
    Ana Bilgisayar Adı Windows VM'de Linux için IoT Edge IP adresi
    Port 10022 (veya dağıtım yapılandırmanızda kullandığınız)
    Kullanıcı adı root
    Kimlik doğrulaması türü Özel Anahtar
    Özel Anahtar Dosyası Önceki adımda oluşturduğunuz id_rsa değerin tam yolunu
    Parola Önceki adımda oluşturduğunuz anahtar için kullanılan parola
  3. SSH kullanarak modüle başarıyla bağlandıktan sonra işlemi seçebilir ve Ekle'yi seçebilirsiniz. C# modülü için, dotnet işlemini ve Yönetilen (CoreCLR) seçeneğine Bağla seçmeniz gerekir. İlk seferde 10-20 saniye sürebilir.

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

    • C# dilinde geliştiriyorsanız, PipeMessage() işlevinde, ModuleBackgroundService.cs adlı dosyada bir kesme noktası ayarlayın.
    • C kullanıyorsanız, InputQueue1Callback() içindeki main.c işlevinde bir kesme noktası ayarlayın.
  5. SimulatedTemperatureSensor çıktısı, özel Linux C# modülünün input1'sine yeniden yönlendirilmelidir. Kesme noktası tetiklenmelidir. değişkenleri Visual Studio Locals penceresinde izleyebilirsiniz.

    Tek bir modülde hata ayıklama işleminin ekran görüntüsü.

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

Kaynakları temizleme

Bir sonraki önerilen makaleye geçmeyi planlıyorsanız, oluşturduğunuz kaynaklarla yapılandırmaları tutabilir ve yeniden kullanabilirsiniz. Ayrıca test cihazıyla aynı IoT Edge cihazı kullanmaya devam edebilirsiniz.

Aksi takdirde, ücretlerden kaçınmak için bu makalede kullandığınız yerel yapılandırmaları ve Azure kaynaklarını silin.

Azure kaynaklarını silme

Azure kaynakları ve kaynak gruplarını silme işlemini geri alamazsınız. Yanlış kaynak grubunu veya kaynakları yanlışlıkla silmediğinizden emin olun. IoT Hub tutmak istediğiniz kaynakları içeren mevcut bir kaynak grubunda oluşturduysanız, kaynak grubunu değil yalnızca IoT Hub kaynağı silin.

Kaynakları silmek için:

  1. Azure portalında oturum açın ve ardından Kaynak grupları'i seçin.
  2. IoT Edge test kaynaklarınızı içeren kaynak grubunun adını seçin.
  3. Kaynak grubunuzun içerdiği kaynakların listesini gözden geçirin. Tümünü silmek isterseniz Kaynak grubunu sil'i seçebilirsiniz. Yalnızca bazılarını silmek istiyorsanız, tek tek silmek için her kaynağı seçin.

Sonraki adım

Bu öğreticide, geliştirme makinenizde Visual Studio'yu kurdunuz ve buradan ilk IoT Edge modülünüzü dağıtıp hata ayıkladınız. Temel kavramları öğrendiğinize göre, modülden geçen verileri analiz edebilmesi için modüle işlevsellik eklemeyi deneyin:

Tutorial: Visual Studio Code