Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:
IoT Edge 1.5
Önemli
IoT Edge 1.5 LTS desteklenen sürümdür. IoT Edge 1.4 LTS, 12 Kasım 2024 itibarıyla kullanım ömrü sona erer. Önceki bir sürümdeyseniz bkz. IoT Edge’i güncelleştirme.
Bu öğretici, Windows ve Visual Studio 2022'de Linux için IoT Edge'i kullanarak kendi kodunuzu geliştirme, hata ayıklama ve Azure IoT Edge cihazına 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 üzerinde 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 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 öğretici, iki IoT Edge geliştirme aracına yönelik adımları içerir:
- Geliştirme için tercih edilen araç olan Azure IoT Edge Geliştirme Aracı CLI komut satırı arabirimi (CLI)
- Bakım modunda olan Visual Studio için Azure IoT Edge Araçları uzantısı
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 kapsayıcı olarak derleyin ve bir Azure Container Registry'de depolayın.
- Kodunuzu bir IoT Edge cihazına 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 öğretici, modülleri oluşturmak ve dağıtmak için Windows üzerinde Linux için IoT Edge'i kullanarak Linux kapsayıcılarının geliştirilmesinde size yol gösterir.
Başlamadan önce:
Windows'da Linux için IoT Edge'i yükleyin.
İlk IoT Edge modülünüzü Bir Windows cihazına dağıtma hızlı başlangıcını okuyun.
Geliştirme makinenize Visual Studio 2022'yi yükleyin veya değiştirin. C++ iş yükü seçenekleriyle Azure geliştirme ve Masaüstü geliştirme seçeneklerini belirleyin.
Visual Studio 2022 yüklemeniz hazır olduktan sonra Visual Studio Market'ten Azure IoT Edge Araçları'nı indirip 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ı 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.
- Azure CLI’yi yükleyin.
- Azure'da bulut kaynağı olarak ücretsiz veya standart katman bir IoT hub'ı oluşturun.
Azure hesabınız yoksa, başlamadan önce ücretsiz hesap oluşturun.
Temel kavramlar
Bu öğreticide IoT Edge modülü geliştirme adımları açıklanmıştır. IoT Edge modülü yürütülebilir kodu olan 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 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 makinesinde (VM) Linux için IoT Edge'i 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.
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'de 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'e 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, Windows geliştirme makinesinde Docker CLI'yi uzak Docker altyapısına bağlanabilecek şekilde yapılandırmaktır:
Docker CLI'nın önceden derlenmiş
docker.exesürümünü Chocolatey'den indirin. Ayrıca, resmi cli projesini GitHub'dan indirebilir ve depo yönergelerini izleyerek derleyebilirsiniz.Geliştirme makinenizdeki bir dizine ayıklayın
docker.exe; örneğin,C:\Docker\bin.Bilgisayar
Gelişmiş Kullanıcı değişkenleri'nin altında Yol'a tıklayın.
Path değişkenini düzenleyin ve konumunu
docker.exeekleyin.Yükseltilmiş bir PowerShell oturumu açın.
Şu komutu kullanarak Docker CLI'ya erişilebildiğini denetleyin:
docker --versionHer şeyi başarıyla yapılandırdıysanız komutun çıktısı Docker sürümünü göstermelidir. gibi
Docker version 20.10.12, build e91ed57görünmelidir.
Docker altyapısını yapılandırma
İkinci adım, Windows VM Docker altyapısında Linux için IoT Edge'i dış bağlantıları kabul etmek ve uygun güvenlik duvarı kurallarını eklemek için yapılandırmaktır.
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.
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'e Docker bağlantısını test etmektir:
Windows VM'de Linux için IoT Edge'in 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 üzerinde 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.105Windows VM Docker altyapısında Linux için IoT Edge'e bağlanın ve örnek kapsayıcıyı
hello-worldçalıştırın. değerini, önceki adımda edindiğiniz Windows VM IP adresi üzerinde Linux için IoT Edge ile değiştirin<EFLOW-VM-IP>.docker -H tcp://<EFLOW-VM-IP>:2375 run --rm hello-worldKapsayı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 cihazlarına 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'nun 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ı desteklememektedir. Visual Studio projesini oluşturmak için Azure IoT Edge Araçları uzantısını kullanmanız gerekir.
Visual Studio'da, başlangıç sayfasında Yeni proje oluştur'u seçerek veya araç çubuğundaki Yeni Proje düğmesini seçerek yeni bir proje oluşturun.
Yeni proje oluştur sayfasında Azure IoT Edge'i arayın. IoT Edge cihazınız için platform (Linux IoT Edge modülü) ve mimarisiyle eşleşen projeyi seçin ve ardından İleri'yi seçin.
Yeni projenizi yapılandırın sayfasında projeniz için bir ad girin, konumu belirtin ve ardından Oluştur'u seçin.
Modül Ekle iletişim kutusunda, 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ı'nda modülünüzün adını belirtin.
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ınız> 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. Oturum açma sunucusu kayıt defteri adı.azurecr.io<>görünür. Dizenin yalnızca localhost:5000 bölümünü değiştirin; böylece son sonuç kayıt defteri adı.azurecr.io/<> modül adınız<>görünür.
Modülünüzü projeye eklemek için Ekle'yi seçin.
Not
Mevcut bir IoT Edge projeniz varsa, dosyayı açarak depo URL'sini
module.jsondeğiştirebilirsiniz. Depo URL'si, JSON dosyasının özelliğinderepositorybulunur.
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 veya Program.csolarak adlandırılırmain.c. 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ü
edgeAgentveedgeHub. - 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:
Çözüm Gezgini'da ana projenizin adına sağ tıklayın ve IoT Edge çalışma zamanı sürümünü ayarla'yı seçin.
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üleriedgeAgentveedgeHubiçin ç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", //...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 adım, dağıtım şablonunuzu temel alan bir dağıtım bildirimi oluşturur. Bildirim, Visual Studio projenizin klasöründe görünür
config.
deployment.debug.template.jsonDağıtım bildirim dosyasını açın.sistem çalışma zamanı modülü görüntüleri
edgeAgentveedgeHubiçin ç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 bildirimi 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:
Araçlar
DOCKER_HOST localhost değerini Windows VM'de Linux için IoT Edge IP adresiyle değiştirin. IP adresini hatırlamıyorsanız Windows PowerShell'de Linux için IoT Edge cmdlet'ini
Get-EflowVmAddrkullanarak edinin. Örneğin, Windows VM'de Linux için IoT Edge IP adresi 172.20.1.100 ise, yeni değer tcp://172.20.1.100:2375 olmalıdır.
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'a gönderir.
Modül şablonunu kendi kodunuzla özelleştirmeye hazır olduğunuzda Azure IoT Hub SDK'larını kullanarak IoT çözümlerinin temel 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ıklayacağından, ilk adım uzaktan hata ayıklamayı etkinleştirmek için modülü derlemek ve yayımlamaktır:
Çözüm Gezgini modül proje klasörünü seçin (örneğin,
myIotEdgeModule).Özel modülü başlangıç projesi olarak ayarlayın. Menüde Proje Başlangıç Projesi> Olarak Ayarla'yı seçin.
C# Linux modülünde hata ayıklamak için SSH hizmetini etkinleştirmek için dosyayı güncelleştirmeniz
Dockerfile.amd64.debuggerekir. Dosyayı şu şablonu kullanacak şekilde güncelleştirinDockerfile.amd64.debug: Uzaktan Hata Ayıklama Desteği ile Azure IoT Edge AMD64 C# Modülü için Dockerfile.Not
Hata Ayıkla'yı seçtiğinizde Visual Studio, Docker görüntüleri oluşturmak için kullanır
Dockerfile.(amd64|windows-amd64).debug. Bu dosya, 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 SürümDockerfile.(amd64|windows-amd64)ö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.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 olduğundan
id_rsaemin olun.ssh-keygen -t RSA -b 4096 -m PEM
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 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 <Container Registry username> -p <Container Registry password> <Container Registry login server>
Çözüm Gezgini proje klasörüne sağ tıklayın ve IoT Edge Modülleri Oluştur ve Gönder'i seçin. Bu komut, her modül için Docker görüntüsünü derler ve iletir.
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 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.
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ı bilgilerinideployment.debug.template.jsoneklemeniz gerekir:"createOptions": { "HostConfig": { "Privileged": true, "PortBindings": { "22/tcp": [ { "HostPort": "10022" } ] } } }Çö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.
Bulut Gezginini>. Visual Studio 2019'da oturum açtığınızdan emin olun.
Bulut Gezgini'nde aboneliğinizi genişletin ve ardından dağıtmak istediğiniz Azure IoT Hub'ı ve Azure IoT Edge cihazını bulun.
IoT Edge cihazına sağ tıklayın ve Dağıtım oluştur'u seçin. Platformunuz için yapılandırılmış hata ayıklama dağıtım bildirimine gidin.
configVisual Studio çözümünüzün klasöründedir, örneğindeployment.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 bir 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ü 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 bildirimi dosyasını açın.
Dağıtımdan önce Azure Container Registry kimlik bilgilerinizi, modül görüntülerinizi ve uygun createOptions değerleri güncelleştirmeniz gerekir. Değerler hakkında createOption daha fazla bilgi için bkz . IoT Edge modülleri için kapsayıcı oluşturma seçeneklerini yapılandırma.
Modül görüntünüzü depolamak için Azure Container Registry kullanıyorsanız, kimlik bilgilerinizi
deployment.debug.template.jsonayarlaraedgeAgentekleyin. Ö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" } } } }, //...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ülmyacr.azurecr.io/iotedgemodule1:0.0.1-amd64için etiketlenmişIotEdgeModule1bir görüntü gönderdiyseniz, görüntü özelliği değerini etiket değeriyle değiştirin.Değeri, dağıtım şablonundaki
createOptionsher sistem ve özel modül için dizeli içerikle ekleyin veya değiştirin.Örneğin,
imagevecreateOptionsayarlarıIotEdgeModule1aş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\"}]}}}" }Modülleri Azure IoT hub'ına dağıtmak için IoT Edge Azure CLI set-modules komutunu kullanın. Örneğin, dosyasında tanımlanan
deployment.debug.amd64.jsonmodülleri IoT Edge cihazınınmy-iot-hubIoT hub'ınamy-devicedağı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 Hubbulabilirsiniz.
Bulut Gezgini'nde uç cihazınıza sağ tıklayın ve yeni modülün ve modülleriyle
$edgeAgent$edgeHubbirlikte çalıştığını onaylamak için yenileyin.
Çözümde hata ayıklama
Yükseltilmiş bir PowerShell oturumunda aşağıdaki komutları çalıştırın:
moduleIdLinux 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>"Doğru olup olmadığını
$moduleIddenetleyin. Değişken boşsa doğru modül adını kullandığınızdan emin olun.Linux kapsayıcısının içinde SSH hizmetini başlatın:
Invoke-EflowVmCommand "sudo docker exec -it -d $moduleId service ssh start"Modülün SSH bağlantı noktasını Windows VM'de Linux için IoT Edge'de 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.
SSH hizmetini başarıyla başlattıktan sonra İşleme Ekleme Hatalarını Ayıkla'yı, Bağlantı Türü'nü > olarak ayarlayın ve Bağlantı hedefini Windows VM'de Linux için IoT Edge'inizin IP adresine ayarlayın. Windows VM'de Linux için IoT Edge'inizin IP adresini bilmiyorsanız PowerShell cmdlet'ini
Get-EflowVmAddrkullanabilirsiniz.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 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şturduğunuz değerin tam yolu id_rsaParola Önceki adımda oluşturduğunuz anahtar için kullanılan parola 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 işlem dotnet ve Yönetilene Ekle (CoreCLR) seçeneğini belirlemeniz gerekir. İlk seferde 10-20 saniye sürebilir.
Modülü incelemek için bir kesme noktası ayarlayın:
- C# dilinde geliştiriyorsanız işlevinde
PipeMessage()ModuleBackgroundService.csbir kesme noktası ayarlayın. - C kullanıyorsanız işlevinde
InputQueue1Callback()main.cbir kesme noktası ayarlayın.
- C# dilinde geliştiriyorsanız işlevinde
çıktısı
SimulatedTemperatureSensorözel Linux C# modülüneinput1yeniden yönlendirilmelidir. Kesme noktası tetiklenmelidir. Visual Studio Locals penceresinde değişkenleri izleyebilirsiniz.
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ı silin.
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'ı tutmak istediğiniz kaynakları içeren mevcut bir kaynak grubunda oluşturduysanız kaynak grubunu değil yalnızca IoT Hub kaynağını silin.
Kaynakları silmek için:
- Azure portalında oturum açın ve Kaynak grupları’nı seçin.
- IoT Edge test kaynaklarınızı içeren kaynak grubunun adını seçin.
- 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, her kaynağı seçerek tek tek silebilirsiniz.
Sonraki adım
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: