Öğretici: Azure İşlevleri IoT Edge modülleri olarak dağıtma

Şunlar için geçerlidir:IoT Edge 1.5 onay işareti IoT Edge 1.5 IoT Edge 1.4 onay işareti IoT Edge 1.4

Önemli

IoT Edge 1.5 LTS ve IoT Edge 1.4 LTS desteklenen sürümlerdir. IoT Edge 1.4 LTS, 12 Kasım 2024'te kullanım ömrü sona erer. Önceki bir sürümdeyseniz bkz. IoT Edge’i güncelleştirme.

İş mantığınızı doğrudan Azure IoT Edge cihazlarınıza uygulayan kodu dağıtmak için Azure İşlevleri'ni kullanabilirsiniz. Bu öğretici, sanal IoT Edge cihazında algılayıcı verilerini filtreleyen bir Azure İşlevi oluşturma ve dağıtma konusunda size yol gösterir. Hızlı başlangıçlarda oluşturduğunuz sanal IoT Edge cihazını kullanırsınız. Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Azure İşlevi oluşturmak için Visual Studio Code'u kullanın.
  • Visual Studio Code ve Docker kullanarak bir Docker görüntüsü oluşturun ve bunu bir kapsayıcı kayıt defterinde yayımlayın.
  • Kapsayıcı kayıt defterindeki modülü IoT Edge cihazınıza dağıtma.
  • Filtrelenmiş verileri görüntüleme.

İşlev modülünü hazırlamayı ve dağıtmayı gösteren işlev mimarisi diyagramı.

Bu öğreticide oluşturduğunuz Azure İşlevi, cihazınız tarafından oluşturulan sıcaklık verilerini filtreler. İşlev yalnızca sıcaklık belirtilen eşiğin üzerinde olduğunda Azure IoT Hub'a yukarı akış iletileri gönderir.

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

Önkoşullar

Bu öğreticiye başlamadan önce, Linux kapsayıcı geliştirme için geliştirme ortamınızı ayarlama öğreticisini yapın: Visual Studio Code kullanarak Azure IoT Edge modülleri geliştirme. Bu öğreticiyi tamamladıktan sonra aşağıdaki önkoşullara sahip olmanız gerekir:

Azure İşlevleri ile bir IoT Edge modülü geliştirmek için geliştirme makinenize ek önkoşullar yükleyin:

İşlev projesi oluşturma

Önkoşullara yüklediğiniz Visual Studio Code için Azure IoT Edge, yönetim özelliklerinin yanı sıra bazı kod şablonları sağlar. Bu bölümde, Azure İşlevi içeren bir IoT Edge çözümü oluşturmak için Visual Studio Code'u kullanacaksınız.

Yeni proje oluşturma

Özelleştirilebilen bir C# İşlevi çözümü şablonu oluşturmak için bu adımları izleyin.

  1. Geliştirme makinenizde Visual Studio Code'u açın.

  2. Komut Paletini Görüntüle'yi seçerek Visual Studio Code komut paletini açın.>

  3. Komut paletinde Azure IoT Edge: Yeni IoT Edge çözümü komutunu ekleyin ve çalıştırın. Çözümünüzü oluşturmak için komut paletinde şu istemleri izleyin:

    • Bir klasör seçin: Çözüm dosyalarını oluşturmak için Visual Studio Code geliştirme makinenizde konumu seçin.
    • Çözüm adı sağlayın: Çözümünüz için FunctionSolution gibi açıklayıcı bir ad ekleyin veya varsayılanı kabul edin.|
    • Modül şablonu seçin: Azure İşlevleri - C# öğesini seçin.
    • Modül adı sağlayın | Modülünüze CSharpFunction adını verin.
    • Modül için bir Docker görüntü deposu sağlayın. Görüntü deposu, kapsayıcı kayıt defterinizin adını ve kapsayıcı görüntünüzün adını içerir. Kapsayıcı görüntünüz son adımda önceden doldurulmuş. localhost:5000 değerini Azure kapsayıcı kayıt defterinizdeki Oturum açma sunucusu değeriyle değiştirin. Oturum açma sunucusunu Azure portalındaki kapsayıcı kayıt defterinizin Genel Bakış sayfasından alabilirsiniz. Dizenin son hali <kayıt defteri adı>.azurecr.io/csharpfunction ifadesine benzer olmalıdır.

    Visual Studio Code'da Docker görüntü deponuzun adının nereye ekleneceğini gösteren ekran görüntüsü.

Kayıt defteri kimlik bilgilerinizi ekleme

Çözümünüzün ortam dosyası kapsayıcı kayıt defterinizin kimlik bilgilerini depolar ve bunları IoT Edge çalışma zamanıyla paylaşır. Çalışma zamanı, özel görüntülerinizi IoT Edge cihazınıza çekmek için bu kimlik bilgilerine ihtiyaç duyar.

Visual Studio Code'daki IoT Edge uzantısı, kapsayıcı kayıt defteri kimlik bilgilerinizi Azure'dan çekip ortam dosyasında doldurmaya çalışır. Kimlik bilgilerinizin zaten dosyada olup olmadığını denetleyin. Yoksa, şimdi ekleyin:

  1. Visual Studio Code gezgininde .env dosyayı açın.
  2. Alanları Azure kapsayıcı kayıt defterinizden kopyaladığınız kullanıcı adı ve parola değerleriyle güncelleştirin. Azure'da kapsayıcı kayıt defterinize gidip Ayarlar> Access anahtarları sayfasına bakarak bunları yeniden bulabilirsiniz.
  3. Bu dosyayı kaydedin.

Not

Bu öğreticide, 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.

Hedef mimariyi AMD64 olarak ayarlama

IoT Edge'de Azure İşlevleri modüllerinin çalıştırılması yalnızca Linux AMD64 tabanlı kapsayıcılarda desteklenir. Visual Studio Code için varsayılan hedef mimari Linux AMD64'dür, ancak burada bunu açıkça Linux AMD64 olarak ayarlayacağız.

  1. Komut paletini açın ve Azure IoT Edge: Edge Çözümü için Varsayılan Hedef Platformu Ayarla'yı arayın.

  2. Komut paletinde, seçenekler listesinden AMD64 hedef mimarisini seçin.

Modülü özel kodla güncelleştirme

CSharpFunction modülünüzün iletileri IoT Hub'a iletmeden önce uçta işlemesi için ek kod ekleyelim.

  1. Visual Studio Code gezgininde CSharpFunction CSharpFunction.cs modüllerini>açın.>

  2. CSharpFunction.cs dosyasının içeriğini aşağıdaki kodla değiştirin. Bu kod, ortam ve makine sıcaklığı hakkında telemetri alır ve yalnızca makine sıcaklığı tanımlı eşiğin üzerindeyse iletiyi IoT Hub'a iletir.

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;
    using System.Threading.Tasks;
    using Microsoft.Azure.Devices.Client;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Extensions.EdgeHub;
    using Microsoft.Azure.WebJobs.Host;
    using Microsoft.Extensions.Logging;
    using Newtonsoft.Json;
    
    namespace Functions.Samples
    {
        public static class CSharpFunction
        {
            [FunctionName("CSharpFunction")]
            public static async Task FilterMessageAndSendMessage(
                [EdgeHubTrigger("input1")] Message messageReceived,
                [EdgeHub(OutputName = "output1")] IAsyncCollector<Message> output,
                ILogger logger)
            {
                const int temperatureThreshold = 20;
                byte[] messageBytes = messageReceived.GetBytes();
                var messageString = System.Text.Encoding.UTF8.GetString(messageBytes);
    
                if (!string.IsNullOrEmpty(messageString))
                {
                    logger.LogInformation("Info: Received one non-empty message");
                    // Get the body of the message and deserialize it.
                    var messageBody = JsonConvert.DeserializeObject<MessageBody>(messageString);
    
                    if (messageBody != null && messageBody.machine.temperature > temperatureThreshold)
                    {
                        // Send the message to the output as the temperature value is greater than the threshold.
                        using (var filteredMessage = new Message(messageBytes))
                        {
                             // Copy the properties of the original message into the new Message object.
                             foreach (KeyValuePair<string, string> prop in messageReceived.Properties)
                             {filteredMessage.Properties.Add(prop.Key, prop.Value);}
                             // Add a new property to the message to indicate it is an alert.
                             filteredMessage.Properties.Add("MessageType", "Alert");
                             // Send the message.
                             await output.AddAsync(filteredMessage);
                             logger.LogInformation("Info: Received and transferred a message with temperature above the threshold");
                        }
                    }
                }
            }
        }
        //Define the expected schema for the body of incoming messages.
        class MessageBody
        {
            public Machine machine {get; set;}
            public Ambient ambient {get; set;}
            public string timeCreated {get; set;}
        }
        class Machine
        {
            public double temperature {get; set;}
            public double pressure {get; set;}
        }
        class Ambient
        {
            public double temperature {get; set;}
            public int humidity {get; set;}
        }
    }
    
  3. Dosyayı kaydedin.

IoT Edge çözümünüzü oluşturma ve gönderme

Önceki bölümde bir IoT Edge çözümü oluşturdunuz ve CSharpFunction'ı değiştirerek kabul edilebilir eşiğin altında bildirilen makine sıcaklıklarına sahip iletileri filtrelediyseniz. Şimdi çözümü kapsayıcı görüntüsü olarak derlemeniz ve kapsayıcı kayıt defterine göndermeniz gerekiyor.

  1. Terminali Görüntüle'yi>seçerek Visual Studio Code tümleşik terminalini açın.

  2. Terminale aşağıdaki komutu girerek Docker'da oturum açın. Azure kapsayıcı kayıt defterinizden kullanıcı adı, parola ve oturum açma sunucusuyla oturum açın. Bu değerleri Azure portalındaki kayıt defterinizin Erişim anahtarları bölümünden alabilirsiniz.

    docker login -u <ACR username> -p <ACR password> <ACR login server>
    

    kullanılmasını --password-stdinöneren bir güvenlik uyarısı alabilirsiniz. Üretim senaryoları için bu en iyi yöntem önerilir ancak bu öğreticinin kapsamı dışındadır. Daha fazla bilgi için docker oturum açma başvurusuna bakın.

  3. Visual Studio Code gezgininde deployment.template.json dosyasına sağ tıklayın ve IoT Edge Çözümü Oluştur ve Gönder'i seçin.

    Derleme ve gönderme komutu üç işlem başlatır. İlk olarak, çözümde, dağıtım şablonundaki ve diğer çözüm dosyalarındaki bilgilerle oluşturulmuş olan tam dağıtım bildirimini tutan yapılandırma adlı yeni bir klasör oluşturur. İkincisi, hedef mimariniz için uygun dockerfile'ı temel alarak kapsayıcı görüntüsünü derlemek için çalışır docker build . Ardından, görüntü deposunu kapsayıcı kayıt defterinize göndermek için çalışır docker push .

    Bu işlem ilk kez birkaç dakika sürebilir, ancak komutları bir sonraki çalıştırmanızda daha hızlıdır.

Kapsayıcı görüntünüzü açma

Kapsayıcı görüntünüz, kapsayıcı kayıt defterinize gönderildiğinde Visual Studio Code işlemin başarılı olduğunu belirten bir ileti görüntüler. İşlemin başarılı olduğunu kendiniz onaylamak isterseniz kayıt defterindeki görüntüye bakabilirsiniz.

  1. Azure portalında Azure kapsayıcı kayıt defterinize göz atın.
  2. Hizmetler>Depoları'nı seçin.
  3. Listede csharpfunction deposunu görüyor olmalısınız. Diğer ayrıntıları görmek için bu depoyu seçin.
  4. Etiketler bölümünde 0.0.1-amd64 etiketini görmeniz gerekir. Bu etiket, derlediğiniz görüntünün sürümünü ve platformunu gösterir. Bu değerler CSharpFunction klasöründeki module.json dosyasında belirlenir.

Çözümü dağıtma ve çalıştırma

hızlı başlangıçta yaptığınız gibi İşlev modülünüzü bir IoT Edge cihazına dağıtmak için Azure portalını kullanabilirsiniz. Ayrıca modülleri Visual Studio Code'un içinden de dağıtabilir ve izleyebilirsiniz. Aşağıdaki bölümlerde, önkoşullarda listelenen Visual Studio Code için Azure IoT Edge ve IoT Hub kullanılır. Henüz yüklemediyseniz uzantıları şimdi yükleyin.

  1. Visual Studio Code gezginindeki Azure IoT Hub bölümünün altında, IoT cihazları listenizi görmek için Cihazlar'ı genişletin.

  2. IoT Edge cihazınızın adına sağ tıklayın ve ardından Tek Cihaz için Dağıtım Oluştur'u seçin.

  3. CSharpFunction modülünü içeren çözüm klasörüne göz atın. Yapılandırma klasörünü açın, deployment.amd64.json dosyasını seçin ve ardından Edge Dağıtım Bildirimi seç'i seçin.

  4. Dağıtılan ve çalışan modüllerin listesini görmek için cihazınızın altında Modüller'i genişletin. Yenile düğmesine tıklayın. SimulatedTemperatureSensor modülü ve $edgeAgent ve $edgeHub ile birlikte çalışan yeni CSharpFunction'ı görmeniz gerekir.

    Yeni modüllerin görünmesi birkaç dakika sürebilir. IoT Edge cihazınızın yeni dağıtım bilgilerini IoT Hub'dan alması, yeni kapsayıcıları başlatması ve ardından durumu IoT Hub'a geri bildirmesi gerekir.

    Visual Studio Code'da dağıtılan modülleri görüntülemeyi gösteren ekran görüntüsü.

Oluşturulan verileri görüntüleme

Komut paletinde Azure IoT Hub: Yerleşik Olay Uç Noktasını İzlemeyi Başlat'ı çalıştırarak tüm cihazlarınızdan IoT hub'ınıza ulaşan tüm iletileri görebilirsiniz. İletileri izlemeyi durdurmak için, komut paletinde Azure IoT Hub: Yerleşik Olay Uç Noktasını İzlemeyi Durdur komutunu çalıştırın.

IoT hub'ınıza belirli bir cihazdan gelen iletilerin gösterilmesi için görünüme filtre de uygulayabilirsiniz. Visual Studio Code gezgininin Azure IoT Hub>Cihazları bölümünde cihaza sağ tıklayın ve Yerleşik Olay Uç Noktasını İzlemeyi Başlat'ı 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.

Geçmeyecekseniz ücret kesilmesini önlemek için yerel yapılandırmalarınızı ve bu makalede oluşturulan 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, IoT Edge cihazınız tarafından oluşturulan ham verileri filtrelemek için kod içeren bir Azure İşlevi modülü oluşturdunuz.

Azure IoT Edge'in verileri iş içgörüsüne çevirmenize yardımcı olabilecek diğer yolları öğrenmek için bir sonraki öğreticiye geçin.