Öğretici: Windows üzerinde Linux için IoT Edge kullanarak Linux kapsayıcılarıyla IoT Edge modülleri geliştirme

Şunlar için geçerlidir:IoT Edge 1.4 checkmark IoT Edge 1.4

Önemli

IoT Edge 1.4 desteklenen sürümdür. Önceki bir sürümdeyseniz bkz. IoT Edge’i güncelleştirme.

Bu öğreticide, Windows ve Visual Studio 2022'de Linux için IoT Edge kullanarak kendi kodunuzu geliştirme, hata ayıklama ve IoT Edge cihazına dağıtma adımları açıklanmıştır. Linux cihazına C# modülü dağıtarak IoT Edge çözümleri için en yaygın geliştirici senaryolarını öğreneceksiniz. Windows(EFLOW) üzerindeki bir Linux kapsayıcısında çalışan özel bir Azure IoT Edge modülünü dağıtacak ve hatalarını ayıklayacaksınız. Farklı bir dil kullanmayı veya Bir Azure hizmetini 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 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.

Araç sürümünü seçmek için bu makalenin başındaki araç 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 Visual Studio Code için IoT Edge araçlarını kullanın.
  • Projenizi kapsayıcı olarak derleyin ve bir Azure kapsayıcı kayıt defterinde depolayın.
  • Kodunuzu 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. Windows bilgisayarlarda, Windows veya Linux modülleri geliştirebilirsiniz. Bu öğretici, Linux kapsayıcılarının geliştirilmesinde, modülleri oluşturmak ve dağıtmak için Windows üzerinde Linux için IoT Edge'i kullanma konusunda size yol gösterir.

Visual Studio 2022'niz hazır olduktan sonra aşağıdaki araçlara ve bileşenlere de ihtiyacınız vardır:

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

    Bahşiş

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

Bulut kaynakları:

Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.

Temel kavramlar

Bu öğreticide IoT Edge modülü geliştirme adımları açıklanmıştır. IoT Edge modülü veya bazen yalnızca kısaca modül, yürütülebilir kod içeren bir kapsayıcıdır. IoT Edge cihazına 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 sonunda dağıtılacağı hedef IoT Edge cihazı arasındaki farkı anlamak ö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, Bir Windows bilgisayarda IoT Edge çalıştıran bir Linux cihazını hedeflemeyi hedefleyen bir modül geliştiren bir kişidir. Bu durumda kapsayıcı işletim sistemi Linux olacaktı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 derlemek ve dağıtmak için Windows üzerinde Linux için IoT Edge (EFLOW) VM'sini kullanacaksınız.

Bu öğretici, Linux kapsayıcıları ile 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'ı da kullanabilirsiniz. Daha fazla bilgi için bkz . Visual Studio Code kullanarak Azure IoT Edge modülleri geliştirme.

Docker-cli ve Docker altyapısı uzak bağlantı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. EFLOW sanal makinesi zaten bir Docker altyapısı örneği içerdiğinden, bu öğreticide Windows geliştirici makinesinden EFLOW VM Docker örneğine uzaktan nasıl bağlanabileceğiniz gösterilir. Bunu kullanarak Windows için Docker Desktop bağımlılığını kaldırırız.

İlk adım, Windows geliştirme makinesinde docker-cli'yi uzak docker altyapısına bağlanabilecek şekilde yapılandırmaktır.

  1. docker-cli Chocolatey'den docker-cli'nin önceden derlenmiş docker.exe sürümünü indirin. Ayrıca docker/cli GitHub'dan resmi cli projesini indirebilir ve depo yönergelerini izleyerek derleyebilirsiniz.
  2. Docker.exe dosyasını geliştirme makinenizdeki bir dizine ayıklayın. Örneğin, C:\Docker\bin
  3. Bilgisayarınız hakkında ->Sistem Bilgileri ->Gelişmiş sistem ayarları'nı açın
  4. Gelişmiş ->Ortam değişkenleri -> Kullanıcı değişkenleri altında Yol'a bakın
  5. Path değişkenini düzenleyin ve docker.exe dosyasının konumunu ekleyin
  6. Yükseltilmiş bir PowerShell oturumu açma
  7. Komutunu kullanarak Docker CLI'nın erişilebilir olup olmadığını denetleyin
    docker --version
    

Her şey başarıyla yapılandırıldıysa, önceki komut Docker sürüm 20.10.12 gibi bir docker sürümünün çıkışını vermelidir ve e91ed57 derlemesi gerekir.

İkinci adım, dış bağlantıları kabul etmek için EFLOW sanal makinesi Docker altyapısını 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ırma yalnızca geliştirme amacıyla kullanılmalıdır. 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 EFLOW virtual machine 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 EFLOW 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 EFLOW 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"
    

    Aşağıda örnek çıkış verilmiştir.

    PS C:\> # Configure the EFLOW 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 EFLOW 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 EFLOW 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
    
  2. Son adım, EFLOW VM Docker altyapısına Docker bağlantısını test etmektir. İlk olarak, EFLOW VM IP adresine ihtiyacınız vardır.

    Get-EflowVmAddr
    

    Bahşiş

    EFLOW VM 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. Her uzak Docker altyapısı bağlantısı kurmak istediğinizde doğru EFLOW VM IP adresini kullandığınızdan emin olun.

    Aşağıda örnek çıkış verilmiştir.

    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 
    
  3. Alınan IP adresini kullanarak EFLOW VM Docker altyapısına bağlanın ve Hello-World örnek kapsayıcısını çalıştırın. EFLOW-VM-IP> değerini önceki adımda alınan EFLOW VM IP adresiyle değiştirin<.

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

    Kapsayıcının indirildiğini ve çalıştırıldıktan sonra aşağıdakinin çıkışını alınacağını görmeniz gerekir.

    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 are 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 cihazlarına dağıtılabilir bir çözüm oluşturur. İlk olarak bir Azure IoT Edge çözümü oluşturursunuz ve ardından bu çözümdeki ilk modülü oluşturursunuz. Her IoT Edge çözümü birden fazla modül içerebilir.

Ö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 sayfasında Azure IoT Edge'i arayın. IoT Edge cihazınız için platformla (Linux IoT Edge modülü) ve mimariyle eşleşen projeyi seçin ve İleri'yi seçin.

    Create New Project

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

  4. Modül Ekle penceresinde, geliştirmek istediğiniz modül türünü seçin. Ayrıca mevcut bir IoT Edge modülünü dağıtımınıza eklemek için Mevcut modülü de seçebilirsiniz. Modül adınızı ve modül görüntü deponuzu belirtin.

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

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

    Screenshot of adding how to add an application and module to Visual Studio solution

    Dekont

    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 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. Çeşitli Docker dosyaları, modülünüzü Windows veya Linux kapsayıcısı olarak derlemek 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.4'dür. 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.

    Screenshot of how to find and select the menu item named 'Set IoT Edge Runtime version'.

  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ı 1.4 sürümünü 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.4"
        //...
       "edgeHub": {
       //...
          "image": "mcr.microsoft.com/azureiotedge-hub:1.4",
       //...
    
  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ı 1.4 sürümünü 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.4",
        //...
        "edgeHub": {
        //...
            "image": "mcr.microsoft.com/azureiotedge-hub:1.4",
        //...
    

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

Azure IoT Edge araçları uzantısını kullanın ve EFLOW sanal makinesinde çalışan uzak Docker altyapısını kullanacak şekilde yapılandırın.

  1. Araçlar ->Azure IoT Edge araçları ->IoT Edge araçları ayarları... öğesini seçin.

  2. DOCKER_HOST localhost değerini EFLOW VM IP adresiyle değiştirin. IP adresini hatırlamıyorsanız, EFLOW PowerShell cmdlet'ini Get-EflowVmAddr kullanarak alın. Exmaple için EFLOW VM IP adresi 172.20.1.100 ise yeni değer tcp://172.20.1.100:2375 olmalıdır.

    Screenshot of IoT Edge Tools settings

  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 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 başka modüller oluşturun.

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, EFLOW VM içinde çalışan Docker altyapısı kullanılarak derlenecek veya hata ayıklanacağından, ilk adım uzaktan hata ayıklamayı etkinleştirmek için modülü derlemek ve yayımlamaktır.

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

  2. C# Linux modülünün hatalarını ayıklamak için SSH hizmetini etkinleştirmek için Dockerfile.amd64.debug dosyasını güncelleştirmemiz gerekir. Dockerfile.amd64.debug dosyasını şu şablonu kullanacak şekilde güncelleştirin: Uzaktan Hata Ayıklama Desteği ile Azure IoT Edge IÇIN Dockerfile AMD64 C# Modülü.

    Dekont

    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.

    Uyarı

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

    Screenshot of setting the Dockerfile template

  3. Linux modülüyle SSH bağlantısı kurmak için bir RSA anahtarı oluşturmamı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 kaydettiğinizden ve anahtarın adının id_rsa olduğundan emin olun.

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

    Screenshot of how to create an SSH key

  4. 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. Yerel kayıt defteri kullanıyorsanız, yerel bir kayıt defteri çalıştırabilirsiniz.

    docker -H tcp://<EFLOW-VM-IP>:2375 login -u <ACR username> -p <ACR password> <ACR login server>
    
  1. Çözüm Gezgini'da 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.

  2. Azure Container Registry gibi özel bir kayıt defteri kullanıyorsanız, kayıt defteri oturum açma bilgilerinizi dosyasında deployment.template.jsonbulunan çalışma zamanı ayarlarına eklemeniz gerekir. Yer tutucuları gerçek 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"
              }
            }
          }
    

    Dekont

    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 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 Linux C# modülüne bağlanmak için SSH bağlantı noktası olarak kullanılacak farklı bir bağlantı noktası belirtebilirsiniz. dosyasında deployment.debug.template.jsonbulunan bu Linux modülü ayarının "createOptions" öğesine SSH bağlantı noktası bilgilerini eklemeniz gerekir.

         "createOptions": {
            "HostConfig": {
               "Privileged": true,
               "PortBindings": {
                     "22/tcp": [
                        {
                           "HostPort": "10022"
                        }
                     ]
               }
            }
         }
    
  4. Çözüm Gezgini'da proje klasörüne sağ tıklayın ve yeni IoT Edge dağıtım json'unu oluşturmak için IoT Edge için Dağıtım Oluştur'a tıklayın.

  5. Bulut Gezgini'ne tıklayarak Bulut Gezgini'ne tıklayın>. Visual Studio 2019'da oturum açtığınızdan emin olun.

  6. Bulut Gezgini'nde aboneliğinizi genişletin, Azure IoT Hub'ınızı ve dağıtmak istediğiniz Azure IoT Edge cihazını bulun.

  7. IoT Edge cihazına sağ tıklayın ve Dağıtım oluştur'u seçin. Gibi deployment.amd64.jsonVisual Studio çözümünüzdeki yapılandırma klasöründe bulunan platformunuz için yapılandırılan hata ayıklama dağıtım bildirimine gidin.

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ında deployment.debug.template.json dosyasına 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>"

Bahşiş

IoT Hub bağlantı dizesi Azure portalında Azure IoT Hub >Güvenlik ayarları>Paylaşılan erişim ilkeleri altında bulabilirsiniz.

  1. Bulut Gezgini'nde, $edgeAgent ve $edgeHub modülleriyle birlikte çalışan yeni modülü görmek için uç cihazınıza sağ tıklayın ve yenileyin.

Çözümde hata ayıklama

  1. PowerShell oturumunu kullanma ve yükseltme aşağıdaki komutları çalıştırın

    1. Linux C# modülü için kullanılan ada göre moduleId değerini alın. iot-edge-module-name> yer tutucusunun <modülünüzün adıyla değiştirdiğinizden emin olun.

      $moduleId = Invoke-EflowVmCommand "sudo docker ps -aqf name=<iot-edge-module-name>"
      
    2. $moduleId doğru olup olmadığını 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şlatma

      Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"
      
    4. EFLOW VM'sinde modül 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, EFLOW VM her yeniden başlatıldığında IP tablosu kuralı silinir ve özgün ayarlara geri döner. Ayrıca, modül SSH hizmetinin el ile yeniden başlatılması gerekir.

  2. SSH hizmetini başarıyla başlattıktan sonra Hata Ayıkla ->İşleme Ekle'yi seçin, Bağlan Ion Türü'nü SSH olarak ayarlayın ve hedefi EFLOW VM'nizin IP adresine Bağlan. EFLOW VM IP'sini bilmiyorsanız PowerShell cmdlet'ini Get-EflowVmAddr kullanabilirsiniz. İlk olarak, IP'yi yazın ve enter tuşuna basın. Açılır pencerede aşağıdaki yapılandırmaları girin:

    Alan Değer
    Ana Bilgisayar Adı EFLOW VM IP'sini kullanma
    Bağlantı noktası 10022 (Veya dağıtım yapılandırmanızda kullandığınız)
    Kullanıcı adı kök
    Kimlik doğrulaması türü Özel Anahtar
    Özel Anahtar Dosyası Önceki adımda oluşturulan id_rsa tam yolu
    Parola Önceki adımda oluşturulan anahtar için kullanılan parola

    Screenshot of how to connect to a remote system

  3. SSH kullanarak modüle başarıyla bağlandıktan sonra işlemi seçip Ekle'yi seçebilirsiniz. C# modülü için işlem dotnet'i ve Yönetilene Ekle'yi (CoreCLR) seçmeniz gerekir. İlk seferde 10-20 saniye sürebilir.

    Screenshot of how to attach an edge module process.

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

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

    Screenshot of how to debug a single module

  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. Aynı IoT Edge cihazını test cihazı olarak kullanmaya devam edebilirsiniz.

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

Azure kaynaklarını silme

Azure kaynaklarını ve kaynak gruplarını silme işlemi geri alınamaz. Yanlış kaynak grubunu veya kaynakları yanlışlıkla silmediğinizden emin olun. IoT hub'ını tutmak istediğiniz kaynakların yer aldığı mevcut bir kaynak grubunda oluşturduysanız, kaynak grubunu değil yalnızca IoT hub kaynağını silin.

Kaynakları silmek için:

  1. Azure portalında oturum açın ve Kaynak grupları’nı seçin.

  2. IoT Edge test kaynaklarınızı içeren kaynak grubunun adını seçin.

  3. Kaynak grubunuzda bulunan kaynakların listesini gözden geçirin. Tümünü silmek isterseniz Kaynak grubunu sil'i seçebilirsiniz. Kaynakların yalnızca bazılarını silmek istiyorsanız tek tek tıklayarak silebilirsiniz.

Sonraki adımlar

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