Bagikan melalui


Tutorial: Menyebarkan Azure Functions sebagai modul - Azure IoT Edge

Berlaku untuk:IoT Edge 1.5 tanda centang IoT Edge 1.5

Penting

IoT Edge 1.5 LTS adalah rilis yang didukung. IoT Edge 1.4 LTS adalah akhir masa pakai per 12 November 2024. Jika Anda berada di rilis sebelumnya, lihat Memperbarui IoT Edge.

Gunakan Azure Functions untuk menyebarkan kode yang menjalankan logika bisnis Anda langsung di perangkat Azure IoT Edge Anda. Tutorial ini menunjukkan kepada Anda cara membuat dan menyebarkan Azure Function yang memfilter data sensor pada perangkat IoT Edge yang disimulasikan. Gunakan perangkat IoT Edge simulasi yang Anda buat di panduan cepat. Dalam tutorial ini, Anda akan mempelajari cara:

  • Menggunakan Visual Studio Code untuk membuat Azure Function
  • Menggunakan Visual Studio Code dan Docker untuk membuat gambar Docker dan menerbitkannya ke registri kontainer
  • Menyebarkan modul dari registri kontainer ke perangkat IoT Edge Anda
  • Menampilkan data yang difilter

Diagram yang memperlihatkan arsitektur fungsi, termasuk cara mentahapkan dan menyebarkan modul fungsi.

Azure Function yang Anda buat dalam tutorial ini memfilter data suhu yang dihasilkan oleh perangkat Anda. Fungsi ini hanya mengirim pesan di hulu ke Azure IoT Hub ketika suhu di atas ambang yang ditentukan.

Jika Anda tidak memiliki akun Azure, buat akun gratis sebelum memulai.

Prasyarat

Sebelum Anda memulai tutorial ini, ikuti tutorial untuk menyiapkan lingkungan pengembangan Anda untuk pengembangan kontainer Linux: Mengembangkan modul Azure IoT Edge menggunakan Visual Studio Code. Setelah selesai, Anda memiliki prasyarat berikut:

Untuk mengembangkan modul IoT Edge dengan Azure Functions, instal prasyarat tambahan ini di komputer pengembangan Anda:

Buat proyek fungsi

Azure IoT Edge untuk Visual Studio Code memberi Anda kemampuan manajemen dan templat kode. Di bagian ini, Anda menggunakan Visual Studio Code untuk membuat solusi IoT Edge dengan Azure Function.

Membuat proyek baru

Ikuti langkah-langkah ini untuk membuat templat solusi Fungsi C# yang dapat disesuaikan.

  1. Buka Visual Studio Code di mesin pengembangan Anda.

  2. Buka palet perintah Visual Studio Code dengan memilih Tampilkan>Palet Perintah.

  3. Di palet perintah, tambahkan dan jalankan perintah Azure IoT Edge: Solusi IoT Edge baru. Ikuti perintah ini di palet perintah untuk membuat solusi Anda:

    • Pilih folder: pilih lokasi di komputer pengembangan Anda untuk Visual Studio Code untuk membuat file solusi.
    • Berikan nama solusi: tambahkan nama deskriptif untuk solusi Anda, seperti FunctionSolution, atau terima default.|
    • Pilih templat modul: pilih Azure Functions - C#.
    • Berikan nama modul | Beri nama modul Anda CSharpFunction.
    • Berikan repositori gambar Docker untuk modul. Repositori gambar mencakup nama registri kontainer dan nama gambar kontainer Anda. Gambar kontainer Anda telah diisi sebelumnya dari langkah terakhir. Ganti localhost:5000 dengan nilai Server masuk dari registri kontainer Azure Anda. Anda dapat mengambil server Masuk dari halaman Gambaran Umum registri kontainer Anda di portal Microsoft Azure. String akhir terlihat seperti <nama> registri.azurecr.io/csharpfunction.

    Cuplikan layar memperlihatkan tempat untuk menambahkan nama repositori gambar Docker Anda di Visual Studio Code.

Menambahkan informasi masuk registri

File lingkungan dalam solusi Anda menyimpan kredensial untuk registri kontainer Anda dan membagikannya dengan runtime IoT Edge. Runtime memerlukan kredensial ini untuk menarik gambar privat Anda ke perangkat IoT Edge Anda.

Ekstensi IoT Edge di Visual Studio Code mencoba menarik kredensial registri kontainer Anda dari Azure dan mengisinya dalam file lingkungan. Periksa apakah kredensial Anda sudah ada dalam file. Jika belum, tambahkan sekarang:

  1. Di penjelajah Visual Studio Code, buka .env file .
  2. Perbarui bidang dengan nilai nama pengguna dan kata sandi yang Anda salin dari registri kontainer Azure Anda. Untuk menemukannya lagi, bukaregistri kontainer Anda di Azure dan lihat di halaman Kunci akses >.
  3. Simpan file ini.

Catatan

Tutorial ini menggunakan kredensial masuk admin untuk Azure Container Registry, yang memudahkan pengembangan dan pengujian skenario. Untuk produksi, gunakan opsi autentikasi dengan hak akses minimal seperti prinsipal layanan. Untuk informasi selengkapnya, lihat Mengelola akses ke registri kontainer Anda.

Atur arsitektur target ke AMD64

Modul Azure Functions di IoT Edge hanya didukung pada kontainer berbasis Linux AMD64. Arsitektur target default untuk Visual Studio Code adalah Linux AMD64, tetapi Anda mengaturnya secara eksplisit ke Linux AMD64 di sini.

  1. Buka palet perintah dan cari Azure IoT Edge: Atur Platform Target Default untuk Solusi Edge.

  2. Di palet perintah, pilih arsitektur target AMD64 dari daftar opsi.

Memperbarui modul dengan kode kustom

Tambahkan beberapa kode sehingga modul CSharpFunction Anda memproses pesan di tepi sebelum meneruskannya ke IoT Hub.

  1. Di penjelajah Visual Studio Code, buka modul>CSharpFunction>CSharpFunction.cs.

  2. Ganti konten file CSharpFunction.cs dengan kode berikut. Kode ini menerima telemetri tentang sekitar dan suhu mesin, dan meneruskan pesan ke IoT Hub hanya jika suhu komputer berada di atas ambang yang ditentukan.

    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. Simpan file.

Membangun dan mendorong solusi Azure IoT Edge

Di bagian sebelumnya, Anda membuat solusi IoT Edge dan mengubah CSharpFunction untuk memfilter pesan dengan suhu komputer yang dilaporkan di bawah ambang batas yang dapat diterima. Sekarang bangun solusi sebagai gambar kontainer dan dorong ke registri kontainer Anda.

  1. Buka terminal yang terintegrasi di Visual Studio Code. Pilih Tampilkan>Terminal.

  2. Masuk ke Docker di terminal. Gunakan nama pengguna, kata sandi, dan server masuk dari registri kontainer Azure Anda. Dapatkan nilai-nilai ini dari bagian Kunci akses registri Anda di portal Microsoft Azure.

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

    Anda dapat menerima peringatan keamanan yang merekomendasikan penggunaan --password-stdin. Meskipun praktik terbaik tersebut disarankan untuk skenario produksi, praktik terbaik berada di luar cakupan tutorial ini. Untuk informasi selengkapnya, lihat referensi masuk docker .

  3. Di penjelajah Visual Studio Code, klik kanan file deployment.template.json , lalu pilih Bangun dan Dorong Solusi IoT Edge.

    Perintah bangun dan dorong memulai tiga operasi. Pertama, ini membuat folder baru dalam solusi yang disebut konfigurasi yang memiliki manifes penyebaran lengkap, yang dibangun dari templat penyebaran dan file solusi lainnya. Kedua, ini menjalankan docker build untuk membangun citra kontainer berdasarkan Dockerfile yang sesuai untuk arsitektur target Anda. Kemudian, perintah ini menjalankan docker push untuk mendorong repositori gambar ke registri kontainer Anda.

    Proses ini dapat memakan waktu beberapa menit untuk pertama kalinya, tetapi lebih cepat saat Anda menjalankan perintah berikutnya.

Verifikasi gambar kontainer Anda

Visual Studio Code menampilkan pesan sukses saat gambar kontainer Anda didorong ke registri kontainer Anda. Untuk mengonfirmasi operasi, lihat gambar di registri.

  1. Di portal Microsoft Azure, buka registri kontainer Azure Anda.
  2. Pilih Layanan>Repositori.
  3. Anda melihat repositori csharpfunction dalam daftar. Pilih repositori ini untuk melihat detail selengkapnya.
  4. Di bagian Tag , Anda akan melihat tag 0.0.1-amd64 . Tag ini menunjukkan versi dan platform gambar yang Anda buat. Nilai-nilai ini diatur dalam file module.json di folder CSharpFunction .

Menyebarkan dan menjalankan solusi

Gunakan portal Azure untuk menyebarkan modul Function Anda ke perangkat IoT Edge seperti yang dijelaskan dalam panduan mulai cepat. Anda juga dapat menyebarkan dan memantau modul dari Visual Studio Code. Bagian berikut menggunakan azure IoT Edge dan IoT Hub untuk ekstensi Visual Studio Code yang tercantum dalam prasyarat. Instal ekstensi sekarang jika Anda belum melakukannya.

  1. Di penjelajah Visual Studio Code, di bawah bagian Azure IoT Hub , perluas Perangkat untuk melihat daftar perangkat IoT.

  2. Klik kanan nama perangkat IoT Edge Anda, lalu pilih Buat Penyebaran untuk Perangkat Tunggal.

  3. Buka folder solusi yang memiliki CSharpFunction. Buka folder konfigurasi, pilih file deployment.amd64.json , lalu pilih Pilih Manifes Penyebaran Edge.

  4. Di bawah perangkat Anda, perluas Modul untuk melihat daftar modul yang disebarkan dan berjalan. Pilih tombol refresh. Anda dapat melihat CSharpFunction baru yang berjalan bersama dengan modul SimulatedTemperatureSensor , $edgeAgent, dan $edgeHub.

    Diperlukan beberapa saat agar modul baru muncul. Perangkat IoT Edge mengambil informasi penyebaran barunya dari IoT Hub, memulai kontainer baru, lalu melaporkan status kembali ke IoT Hub.

    Cuplikan layar memperlihatkan cara menampilkan modul yang disebarkan di Visual Studio Code.

Menampilkan data yang dihasilkan

Lihat semua pesan yang tiba di hub IoT Anda dari perangkat Anda dengan menjalankan Azure IoT Hub: Mulai Memantau Titik Akhir Peristiwa Bawaan di palet perintah. Untuk menghentikan pemantauan pesan, jalankan Azure IoT Hub: Hentikan Pemantauan Titik Akhir Peristiwa Bawaan di palet perintah.

Untuk memfilter tampilan dan melihat pesan dari perangkat tertentu, klik kanan perangkat di bagianPerangkat> dari penjelajah Visual Studio Code, dan pilih Mulai Memantau Titik Akhir Peristiwa Bawaan.

Membersihkan sumber daya

Jika Anda berencana untuk melanjutkan ke artikel yang direkomendasikan berikutnya, pertahankan sumber daya dan konfigurasi yang Anda buat dan gunakan kembali. Anda juga dapat tetap menggunakan perangkat IoT Edge yang sama sebagai perangkat uji.

Jika tidak, hapus konfigurasi lokal dan sumber daya Azure yang Anda buat dalam artikel ini untuk menghindari biaya.

Menghapus sumber daya Azure

Menghapus sumber daya Azure dan grup sumber daya tidak dapat diubah. Pastikan Anda tidak menghapus grup atau sumber daya yang salah secara tidak sengaja. Jika Anda membuat IoT Hub di dalam grup sumber daya yang ada yang memiliki sumber daya yang ingin Anda simpan, hapus hanya sumber daya IoT Hub itu sendiri, bukan grup sumber daya.

Untuk menghapus sumber daya:

  1. Masuk ke portal Microsoft Azure, lalu pilih Grup sumber daya.
  2. Pilih nama grup sumber daya yang berisi sumber daya pengujian IoT Edge Anda.
  3. Tinjau daftar sumber daya yang dimuat grup sumber daya Anda. Jika Anda ingin menghapus semuanya, Anda dapat memilih Hapus grup sumber daya. Jika Anda hanya ingin menghapus beberapa dari mereka, Anda dapat memilih setiap sumber daya untuk menghapusnya satu per satu.

Langkah berikutnya

Dalam tutorial ini, Anda telah membuat modul Azure Function dengan kode untuk memfilter data mentah yang dibuat oleh perangkat IoT Edge.

Lanjutkan ke tutorial berikutnya untuk mempelajari cara lain bahwa Azure IoT Edge dapat membantu Anda mengubah data menjadi wawasan bisnis di tepi.